0

AnimationDrawable には 1 つの問題があります。frameAnimation を停止した後に表示される背景を、frameAnimation を開始する前に表示される背景と同じにしたい。残念ながらそうではありません。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);
    }
}
4

1 に答える 1

1
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);
                }

            }
        });
    }
}); 

このように変更setOnItemClickListenerします。デフォルトでは、フレーム アニメーションはループします。また、に設定したgetViewに対してメソッドが呼び出されたときに背景をリセットすることもできます。アニメーション リスナーの場合、フレームの総数を取得し、それを 1 つのフレームの期間で乗算するなどの操作を実行できます。またはこれを行うAdapterGridView

view.post()

于 2013-03-26T15:33:11.520 に答える