gpt4 book ai didi

android - 尝试为 Android 创建一个高效的无限循环帧动画例程

转载 作者:行者123 更新时间:2023-11-29 01:40:55 25 4
gpt4 key购买 nike

由于 AnimationDrawable 的内存在几张图片后爆炸,我需要自己编写。谷歌有一些关于高效帧动画的演示,但它非常复杂(不必要?)。

这是我的初步方法,我可以请一些专家/聪明的人插话吗?

  1. 在 UI 线程上创建处理程序。
  2. 为处理程序创建可运行程序 (A)。
  3. 在可运行对象 (A) 中,我为每个帧创建 AsyncTasks。
  4. 每个 AsyncTask 都使用 PostDelay 运行以达到所需的帧速率。
  5. 目标 ImageVew 设置为来自 AsyncTask 的新帧。

代码如下:

private void addTask(Handler handler, final String animationName, final int frameNumber, final AsyncTaskLoadBitmap asyncLoadBitmap, int frameIndex) {
Runnable runnable = new Runnable() {
@Override
public void run() {
int frameIdentifier = getResources().getIdentifier(animationName, "drawable", getPackageName());
Log.v("Runable","adding name");
new AsyncTaskLoadBitmap(imageView,thisActivity).execute(frameIdentifier);
}
};

boolean done = handler.postDelayed(runnable,100 + (100 * frameIndex));
Log.v("PostDelayed","Done");
}

我遇到的问题是让它循环以及停止循环的方法。

什么是更好的方法?

最佳答案

试试这个:

    final ImageView iv = new ImageView(this);
setContentView(iv);

final int LOAD = 1;
final int SHOW = 2;
HandlerThread loader = new HandlerThread("frameLoader");
loader.start();
Callback callback = new Callback() {
int idx = 0;
int[] ids = {
R.drawable.ic_launcher, R.drawable.layer0, R.drawable.layer1,
};
Resources res = getResources();
@Override
public boolean handleMessage(Message msg) {
if (msg.what == LOAD) {
Log.d(TAG, "handleMessage LOAD " + Thread.currentThread().getName());
idx++;
if (idx < 18) {
Bitmap btm = BitmapFactory.decodeResource(res, ids[idx % ids.length]);
msg = mUIHandler.obtainMessage(SHOW, btm);
mUIHandler.sendMessage(msg);
}
} else
if (msg.what == SHOW) {
Log.d(TAG, "handleMessage SHOW " + Thread.currentThread().getName());
iv.setImageBitmap((Bitmap) msg.obj);
mBackgroundHandler.sendEmptyMessageDelayed(LOAD, 500);
}
return true;
}
};
mBackgroundHandler = new Handler(loader.getLooper(), callback);
mUIHandler = new Handler(callback);

mBackgroundHandler.sendEmptyMessage(LOAD);

关于android - 尝试为 Android 创建一个高效的无限循环帧动画例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729245/

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