【问题标题】:Transition Drawable with more than 2 layers具有超过 2 层的过渡 Drawable
【发布时间】:2013-03-06 08:06:40
【问题描述】:

transition drawable 中可以有超过 2 个项目吗?我需要更改背景,以便第二帧淡入,而不是第三帧,依此类推到第四帧...

现在我有这个:

<?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/voting_button_not1"/>
    <item android:drawable="@drawable/voting_button_not2"/>
    <item android:drawable="@drawable/voting_button_not3"/>
    <item android:drawable="@drawable/voting_button_not4"/>
    <item android:drawable="@drawable/voting_button_not5"/>
    <item android:drawable="@drawable/voting_button_not1"/>
</transition>

我得到了按钮:

<ImageButton android:id="@+id/skipButton"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/coldf1f2"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"/>

附:没关系,它是一个 ImageButton,这没有任何区别。

在我的代码中,我得到了这样的东西:

TransitionDrawable vote_not = (TransitionDrawable)skip.getBackground();
vote_not.startTransition(1000);

它播放从第一项到第二项的过渡。但我需要播放完整列表。

【问题讨论】:

标签: android transition android-drawable transitiondrawable


【解决方案1】:

似乎TransitionDrawable 仅用于两层。取自班级的Android documentation

LayerDrawables 的扩展,旨在交叉淡入淡出 第一层和第二层。

我认为您可以指定两个以上的层,因为这是分层可绘制对象的扩展,但在TransitionDrawable 的情况下实际上只使用了前两个。

【讨论】:

    【解决方案2】:

    您可以使用处理程序尝试此选项

    mAnimateImage 是一个 imageView 而 DrawableImage 是一个带有可绘制对象的数组

    int DrawableImage[] = {R.drawable.back_red , R.drawable.back_green, R.drawable.back_purple};
    
    final Handler handler = new Handler();
    final int[] i = {0};
    final int[] j = {1};
    handler.postDelayed(new Runnable() {
        @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Resources res = getApplicationContext().getResources();
                        TransitionDrawable out = new TransitionDrawable(new Drawable[]{res.getDrawable(DrawableImage[i[0]]), res.getDrawable(DrawableImage[j[0]])});
                        out.setCrossFadeEnabled(true);
                        mAnimateImage.setImageDrawable(out);
                        out.startTransition(4000);
                        i[0]++;
                        j[0]++;
                        if (j[0] == DrawableImage.length) {
                            j[0] = 0;
                        }
                        if (i[0] == DrawableImage.length) {
                            i[0] = 0;
                        }
                        handler.postDelayed(this, 8000);
                    }
                });
            }
        }, 0);
    

    【讨论】:

      【解决方案3】:

      您可以结合使用 Handler 和为数组元素重新应用 TransitionDrawable 来做到这一点。

      https://stackoverflow.com/a/54584103/114549查看我的回答

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-19
          • 1970-01-01
          • 2013-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          相关资源
          最近更新 更多