Android - 以编程方式过渡背景渐变?

标签 android android-layout android-activity

我有两个渐变可绘制文件(其中一个示例):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape>
      <gradient
        android:angle="90"
        android:startColor="#DBDBDB"
        android:endColor="#F0F0F0"
        android:type="linear" />
    </shape>
  </item>
</selector>

我有一个可绘制的过渡:

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

我想以编程方式将 Activity 的背景从 gradient_c 淡入淡出到 gradient_e(以及反向等)。我正在使用此代码:
RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlRAM); TransitionDrawable 过渡 = (TransitionDrawable) rl.getBackground(); //TransitionDrawable 过渡 = (TransitionDrawable) getWindow().getDecorView().getBackground(); 过渡.startTransition(500);

但是,当我尝试运行代码时出现错误:
08-02 12:04:32.223:E/AndroidRuntime(12646):java.lang.RuntimeException:无法启动 Activity ComponentInfo {com.blogspot.appsversatile.performancer/com.example.app.RAM}:java。 lang.ClassCastException:android.graphics.drawable.StateListDrawable无法转换为android.graphics.drawable.TransitionDrawable

我只想将 Activity 的背景淡入另一个渐变(来自可绘制文件)。我怎样才能实现这个目标?



我接受了下面的答案,因为他给了我答案,但帖子没有准确解释。 我解决这个问题的方法是将我的RelativeLayout背景应用到过渡可绘制对象: android:background="@drawable/transition.

然后我就使用了:
RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlRAM); TransitionDrawable 过渡 = (TransitionDrawable) rl.getBackground(); 过渡.startTransition(500);

最佳答案

StackTrace 正在解释您正在尝试将 StateListDrawabl 转换为 TransitionDrawable。这是不可能的。

(TransitionDrawable) rl.getBackground();
java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.TransitionDrawable

您正在使用 StateListDrawable,因此您应该使用类似以下内容的内容:

RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlRAM);
StateListDrawable drawable = (StateListDrawable) rl.getBackground();
TransitionDrawable transition = (TransitionDrawable) drawable.getCurrent();
transition.startTransition(500);

关于Android - 以编程方式过渡背景渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094530/

相关文章:

android - singleTask 的多个 Activity

android - Android平台URI的构建原则是什么?

android - SoftReference 为空太早

android - 如何将插图应用于内部有图像的 CollapsingToolbarLayout,以便工具栏中的图像绘制在状态栏后面?

android - 我可以从 string.xml 文件中读取文本颜色的字符串吗?

java - 旋转时 fragment 消失

android - 我可以在另一个 Activity 中更新一个 Activity 中的 ListView 吗?

点击按钮时的 Android Loader vs AsyncTask

Android:打开带有两点方向的 map Intent

java - 如何在 Kotlin 中使用游标加载器