30

我有两个要交叉淡入淡出的图像。最初他们都使用 imageview。然后我使用 .getDrawable() 来获取图像的可绘制对象。

这是我使用的代码

Drawable backgrounds[] = new Drawable[2];
backgrounds[0] = BackgroundImage.getDrawable();
backgrounds[1] = BackgroundImageBlurred.getDrawable();

TransitionDrawable crossfader = new TransitionDrawable(backgrounds);
crossfader.startTransition(3000);

它只显示第一个数组元素上的图像,因为这两个图像在 XML 中都设置为可见,所以它无论如何都会显示。

过渡没有开始

任何帮助,将不胜感激 :)

4

5 回答 5

38

这是一个示例,如果您有 2 个可绘制对象并希望在某些情况下为它们的过渡设置动画ImageView

package com.example.app;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.widget.ImageView;

 class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Drawable backgrounds[] = new Drawable[2];
        Resources res = getResources();
        backgrounds[0] = res.getDrawable(android.R.drawable.btn_star_big_on);
        backgrounds[1] = res.getDrawable(android.R.drawable.btn_star_big_off);

        TransitionDrawable crossfader = new TransitionDrawable(backgrounds);

        ImageView image = (ImageView)findViewById(R.id.image);
        image.setImageDrawable(crossfader);

        crossfader.startTransition(3000);

    }
}

然后,如果您想转换回原始图像,您可以调用

// Make sure the transition occurred
crossfader.startTransition(0);
// Reverse transition
crossfader.reverseTransition(3000);

如果我误解了你的问题,请纠正我。

于 2014-07-06T00:12:57.333 回答
14

你应该使用setCrossFadeEnabled属性

final TransitionDrawable briefcaseTransition = (TransitionDrawable) briefcase.getDrawable();
briefcaseTransition.setCrossFadeEnabled(true);
briefcaseTransition.startTransition(500);
于 2015-03-25T14:42:33.017 回答
6

也许你喜欢这个
- res/drawable/transition.xml:

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

图像视图:

<ImageButton android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" /> 

Java代码:

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

如果有帮助,您可以查看 Google-Dev:

http://developer.android.com/guide/topics/resources/drawable-resource.html

于 2015-04-05T18:54:50.400 回答
6

如果您使用向量,您的 VectorDrawables将不会在 TransitionDrawable 中交叉淡入淡出。

您需要先将它们转换为 BitmapDrawables。

在这里查看我的答案https://stackoverflow.com/a/54583929/114549以获取示例

于 2019-02-07T23:36:08.630 回答
2

ATransitionDrawable只是一种特殊的可绘制对象。它不是自己绘制的,它必须放置在某个地方(例如,在视图背景上、在 ImageView 上等)才能显示。

如果您尝试交叉淡入淡出两个图像,您有两种可能的方法:

  1. 单个ImageView 与TransitionDrawable.
  2. 使用两个 ImageView 并用动画交叉淡化它们
于 2014-07-06T00:13:08.427 回答