Android AnimationDrawable问题

Android AnimationDrawable问题,android,Android,我对AnimationDrawable有一个问题。我希望停止帧动画后显示的背景与开始帧动画前显示的背景相同。不幸的是,它不是,因为当frameAnimation停止时,背景图像被设置为frameAnimation显示的最后一个ImageView 有没有办法解决这个问题 ImageView view; gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(Adapte

我对AnimationDrawable有一个问题。我希望停止帧动画后显示的背景与开始帧动画前显示的背景相同。不幸的是,它不是,因为当frameAnimation停止时,背景图像被设置为frameAnimation显示的最后一个ImageView

有没有办法解决这个问题

ImageView view;

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            view=(ImageView)v;
            frameAnimation = (AnimationDrawable) v.getBackground();
            frameAnimation.start();
            myDataThread=new Thread(new DataThread());
            myDataThread.start();

        }
    });

public class DataThread implements Runnable {

    public void run() {
    //do smth
    view.stop();
    view.setBackgroundResource(R.drawable.connectbutton);
    }
}
ImageView;
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
视图=(图像视图)v;
frameAnimation=(AnimationDrawable)v.getBackground();
frameAnimation.start();
myDataThread=新线程(newDataThread());
myDataThread.start();
}
});
公共类DataThread实现可运行{
公开募捐{
//做smth
view.stop();
view.setBackgroundResource(R.drawable.connectbutton);
}
}
gridview.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
视图=(图像视图)v;
view.setBackgroundResource(R.drawable.your\u frame\u animation\u id);
AnimationDrawable frameAnimation=(AnimationDrawable)view.getBackground();
frameAnimation.start();
view.post(新的Runnable(){
@凌驾
公开募捐{
if(frameAnimation.getCurrent()!=frameAnimation.getFrame(frameAnimation.getNumberOfFrames()-1))
{
视图.post(本);
}否则
{
查看。移除回调(此);
视图.setBackgroundResource(R.id.some_image_资源);
}
}
});
}
}); 
像这样更改
setOnItemClickListener
,默认情况下,帧动画将循环。另外,当为
GridView
设置的
Adapter
调用
getView
方法时,您可能需要重置背景。对于动画监听器,您可以执行一些操作,例如获取总帧数,并将其与单个帧的持续时间相乘。还是这样做


view.post()

在动画结束时,您可以重置背景资源。如何重置背景资源?view.setBackgroundResource(someotherresource或null);不幸的是,我遇到了这个异常:
android.graphics.drawable.BitmapDrawable无法强制转换为android.graphics.drawable.AnimationDrawable
首先删除线程您无法直接从另一个线程访问视图,因此删除它您可以在需要时简单地设置动画可绘制,并在需要时添加动画侦听器动画是完全改变背景资源好吧,它实际上解决了问题,但是我想要的是能够在某个事件发生时停止动画,而不仅仅是一个接一个地显示图像集,并在到达最后一个图像时停止动画。这个实现似乎让我无法做到这一点。
gridview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        view=(ImageView)v;
        view.setBackgroundResource(R.drawable.your_frame_animation_id);
        AnimationDrawable frameAnimation = (AnimationDrawable) view.getBackground();
        frameAnimation.start();

        view.post(new Runnable() {

            @Override
            public void run() {

                if(frameAnimation.getCurrent() != frameAnimation.getFrame(frameAnimation.getNumberOfFrames() - 1))
                {
                    view.post(this);
                }else
                {
                    view.removeCallbacks(this);
                    view.setBackgroundResource(R.id.some_image_resource);
                }

            }
        });
    }
});