如何在Android中连续运行TransitionDrawable动画?

Ole*_*lek 5 animation android transition drawable imageview

我正在尝试制作一个动画徽标.它由两个静态图像组成.

我想要实现交叉淡化效果.

我已经使用TransitionDrawable完成了它,设置了crossFadeEnabled,一切看起来都不错.

问题是我需要在圈子里跑.如何实现?

<transition xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/image_expand">
  <item android:drawable="@drawable/image_collapse">
</transition>

Resources res = mContext.getResources();
TransitionDrawable transition = (TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
ImageView image = (ImageView) findViewById(R.id.toggle_image);
image.setImageDrawable(transition);
Run Code Online (Sandbox Code Playgroud)

谷歌的代码运行完美.最重要的是需要在Android 1.6下工作.

hap*_*ude 1

并没有真正的内置方法可以做到这一点。 TransitionDrawable没有设计无限循环动画功能。最简单的建议是如果可以的话,在仅包含您的 s 之一的a 上使用Animation(alpha、scale、translate 等) 。ViewDrawable

一个相当简单的技巧是将Handler和 回调添加到您的自定义View保存中TransitionDrawable。创建后ViewHandler可以将其设置为您的转换间隔。也View将实现Handler.Callback并在其handleMessage(Message)方法内部,它会调用reverseTransition(int)您的TransitionDrawable.

一个粗略的例子如下:

public class myView extends View implements Handler.Callback {

    private Handler mHandler = new Handler(this);

    private int mDelay = 1000; // Delay in milliseconds.

    private Runnable mEvent = new Runnable() {
        public void run() {
            mHandler.removeCallbacks(mEvent);
            mHandler.postDelayed(mEvent, mDelay);
            Message message = mHandler.obtainMessage();
            mHandler.sendMessage(message);
        }
    };

    public View(Context context) {
        super(context);
        // Set your background TransitionDrawable.
        setBackgroundDrawable(...);
    }

    public handleMessage(Message message) {
        TransitionDrawable drawable = (TransitionDrawable) getBackgroundDrawable();
        drawable.reverseTransition(mDelay);
    }

    public void start() {
        mHandler.post(mEvent);
    }

    public void stop() {
        mHandler.removeCallbacks(mEvent);
    }

}
Run Code Online (Sandbox Code Playgroud)

打电话start()来开始你的连续过渡,stop()停止它。这有点像创建自己的动画,但它可以在紧要关头发挥作用。