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

标签 android animation imageview drawable transition

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

我想实现交叉淡入淡出的效果。

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

这是来自谷歌的完美运行的代码。 最重要的是需要在Android 1.6下运行。

最佳答案

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

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android"  >

    <item android:drawable="@drawable/background_animation1"/>
    <item android:drawable="@drawable/background_animation2"/>

</transition>

可绘制对象是渐变的:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
     <corners android:topLeftRadius = "10dp" android:topRightRadius="10dp" android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/>
    
    <gradient
        android:startColor="#d200ff" 
        android:centerColor="#4e00ff"
        android:endColor="#006cff"/>

</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <size android:width="900dp" android:height="500dp"/>
    <corners android:topLeftRadius = "10dp" android:topRightRadius="10dp" android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/>
    <gradient
        android:startColor="#006cff" 
        android:centerColor="#ff6600"
        android:endColor="#d200ff"/>

</shape>

在我的初始化代码中:

trans = (TransitionDrawable) getResources().getDrawable(R.drawable.transition);
		trans.setCrossFadeEnabled(true);
		backgroundimage.setImageDrawable(trans);

....

handlechange();

处理程序代码中最重要的部分;请注意全局运行的标志。我在 Gingerbread 和 Kitkat 上运行了它;

void handlechange1()
	{
		Handler hand = new Handler();
		hand.postDelayed(new Runnable()
		{
			@Override
			public void run()
			{
				change();
			}
			private void change()
			{
				if (flag)
				{
					trans.startTransition(8000);
					flag = false;
				} else
				{
					trans.reverseTransition(8000);
					flag = true;
				}
				handlechange1();
			}
		}, 8000);

	}

关于android - Android中如何制作连续运行的TransitionDrawable动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939879/

相关文章:

Android - ListView 行内的水平 ListView

javascript - 错误位置的动画加载

wpf - 有任何可用于 WPF 的免费动画吗?

java - 从 AsyncTask 返回位图文件会卡住 UI 线程

java - 如何在不改变ImageView宽度的情况下设置图像的宽度(在ImageView中)?

android - 带圆边的 ImageView Circle ripple

android - Picasso 加载本 map 片速度慢?

android - 从外部类中的名称获取资源

android - 如何正确删除保留的实例 fragment

animation - 带有 CSS 动画的媒体查询