5

我正在开发一个需要多个图像之间的图像交叉淡入淡出的应用程序,

我所拥有的:一个ImageView和 50 个可绘制对象 (.png),我将从云端下载

我想要什么:50个drawable应该在几秒的间隔之间顺序地交叉淡入淡出(淡入淡出)

我尝试过的:根据stackoverflow 上的一些答案,我尝试了TransitionDrawable 技术,但我只能在2 个图像之间交叉淡入淡出,而不能更多,而且只能通过触摸来实现。

我提到的视频:https ://www.youtube.com/watch?v=atH3o2uh_94

4

2 回答 2

10

执行此操作的自定义视图:

public class FadeView extends FrameLayout {
    private long mFadeDelay = 1000;
    private ImageView mFirst;
    private ImageView mSecond;
    private boolean mFirstShowing;

    public FadeView(Context context) {
        super(context);
        init(context);
    }

    public FadeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public FadeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(Context c){
        mFirst = new ImageView(c);
        mSecond = new ImageView(c);

        mFirst.setAlpha(1.0f);
        mSecond.setAlpha(0.0f);

        mFirstShowing = true;

        addView(mFirst);
        addView(mSecond);
    }

    public void setFadeDelay(long fadeDelay) {
        mFadeDelay = fadeDelay;
    }

    public void ShowImage(Drawable d){
        if(mFirstShowing){
            mSecond.setImageDrawable(d);
            mSecond.animate().alpha(1.0f).setDuration(mFadeDelay);
            mFirst.animate().alpha(0.0f).setDuration(mFadeDelay);
        }else {
            mFirst.setImageDrawable(d);
            mSecond.animate().alpha(0.0f).setDuration(mFadeDelay);
            mFirst.animate().alpha(1.0f).setDuration(mFadeDelay);
        }

        mFirstShowing = !mFirstShowing;
    }
}

用法:

public class test extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final FadeView fw = new FadeView(this);
        setContentView(fw);

        fw.setOnClickListener(new View.OnClickListener() {
            Drawable d1 = getResources().getDrawable(android.R.drawable.ic_dialog_alert);
            Drawable d2 = getResources().getDrawable(android.R.drawable.ic_dialog_info);
            boolean flag;

            @Override
            public void onClick(View view) {
                if(flag){
                    fw.ShowImage(d1);
                }else {
                    fw.ShowImage(d2);
                }
                flag = !flag;
            }
        });
    }


}
于 2013-08-15T09:31:23.197 回答
-1

然后创建您的自定义 Drawable,它绘制两个具有变化 alpha 值的 Drawable,当然,当您需要支持多个 Drawable 时,您需要添加对交换 Drawable 的支持

于 2013-08-15T09:14:43.417 回答