gpt4 book ai didi

Android - 如何在有限的时间内显示 GIF?

转载 作者:行者123 更新时间:2023-11-29 23:16:54 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它在加载时显示带有动画 GIF 图像的屏幕。 如果我使用计时器,图像将永远显示或只显示一个空白屏幕。我只想显示它 5 秒钟。 如何让 GIF 只显示 5 秒?

使用此代码,图像将永远显示:

public class MainActivity extends AppCompatActivity {

public GifImageView gifImageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gifImageView = (GifImageView) findViewById(R.id.GifImageView);
gifImageView.setGifImageResource(R.drawable.gif2);
}

使用此代码,gif 图像不会显示,只会显示空白屏幕,但应用程序会在 5 秒后关闭:

public class MainActivity extends AppCompatActivity {

public GifImageView gifImageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gifImageView = (GifImageView) findViewById(R.id.GifImageView);
startCountDownTimer();
}

private void startCountDownTimer() {
new CountDownTimer( 5000, 5000 ) {
public void onTick(long millisUntilFinished) {
gifImageView.setGifImageResource(R.drawable.gif2);
}
public void onFinish() {
finish();
}
}.start();
}

这是 GifImageView 代码:

public class GifImageView extends View {

private InputStream mInputStream;
private Movie mMovie;
private int mWidth, mHeight;
private long mStart;
private Context mContext;

public GifImageView(Context context) {
super(context);
this.mContext = context;
}

public GifImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public GifImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
if (attrs.getAttributeName(1).equals("background")) {
int id = Integer.parseInt(attrs.getAttributeValue(1).substring(1));
setGifImageResource(id);
}
}


private void init() {
setFocusable(true);
mMovie = Movie.decodeStream(mInputStream);
mWidth = mMovie.width();
mHeight = mMovie.height();
requestLayout();
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(mWidth, mHeight);
}

@Override
protected void onDraw(Canvas canvas) {
long now = SystemClock.uptimeMillis();
if (mStart == 0) {
mStart = now;
}

if (mMovie != null) {
int duration = mMovie.duration();
if (duration == 0) {
duration = 1000;
}

int relTime = (int) ((now - mStart) % duration);
mMovie.setTime(relTime);
mMovie.draw(canvas, 0, 0);
invalidate();
}
}

public void setGifImageResource(int id) {
mInputStream = mContext.getResources().openRawResource(id);
init();
}

最佳答案

您可以使用 CountDownTimer,将时间设置为 5000 毫秒。当调用 onFinish() 时,您可以停止显示 GIF。使用此代码:

new CountDownTimer(5000, 5000) {

public void onTick(long millisUntilFinished) {
// You don't need to use this.
}

public void onFinish() {
// Put the code to stop the GIF here.
}

}.start();

您可以在 documentation 中阅读有关 CountDownTimers 的更多信息.

关于Android - 如何在有限的时间内显示 GIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com