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

如何在Android中制作连续运行的TransitionDrawable动画?,android,animation,imageview,drawable,transition,Android,Animation,Imageview,Drawable,Transition,我正在尝试制作一个动画徽标。它由两个静态图像组成 我想实现交叉衰落效果 我使用TransitionDrawable,设置crossFadeEnabled,一切看起来都很好 问题是我需要绕圈子跑。如何实现这一目标 <transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/image_expand"> <ite

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

我想实现交叉衰落效果

我使用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);

Resources res=mContext.getResources();
TransitionDrawable transition=(TransitionDrawable)res.getDrawable(R.drawable.expand\u collapse);
ImageView图像=(ImageView)findViewById(R.id.toggle_图像);
image.setImageDrawable(转换);
这是来自谷歌的代码,运行非常好。
最重要的是,in需要在Android 1.6下工作。

实际上没有一种内置的方法来实现这一点
TransitionDrawable
未设计无限循环动画功能。最简单的建议是在
视图
上使用
动画
(alpha、scale、translate等),如果可以,只包含一个
可绘制的

一个相当简单的方法是添加一个
处理程序
并回调到您的自定义
视图
中,以保存您的
可转换绘图文件
。创建
视图
时,可以将
处理程序
设置为您的转换间隔。
视图
还将实现
处理程序.回调
,在其
handleMessage(Message)
方法中,它将调用
TransitionDrawable上的
反向转换(int)

下面是一个粗略的例子:

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

}

调用
start()
开始连续转换,调用
stop()
停止转换。这有点像创建自己的动画,但它在紧要关头起作用。

我通过一个处理程序方法,在从drawable1转换到drawable2后,将方向反转,从而使转换drawable工作起来。在我的XML中: