过渡可绘制具有2层以上

问题描述 投票:4回答:4

哪有转型绘制超过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
4个回答
2
投票

好像TransitionDrawable意味着只有两层操作。从Android documentation该类措施:

LayerDrawables的扩展,它是为了在第一和第二层之间的交叉衰落。

我想你可以指定不止两层,因为这是分层绘制的扩展,但在TransitionDrawable的情况下,实际上只使用了第2位。


0
投票

你可以使用一个处理程序试试这个选项

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

0
投票

你可以使用一个处理程序,并重新应用TransitionDrawable的数组元素的组合做到这一点。

见我在https://stackoverflow.com/a/54584103/114549答案


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.