[ android ] 隨機更換圖片 , 更換圖片不重複

1.宣告
private ViewFlipper flipper02;
    private ViewFlipper flipper03;
    private ViewFlipper flipper04;
    private ImageButton btn_leader_login;
    //ViewFlipper 集合
    private ArrayList<ViewFlipper> flippers;
    //ViewFlipper 圖片
    private int[] resId01 = { R.drawable.area01, R.drawable.area05 };
    private int[] resId02 = { R.drawable.area02, R.drawable.area06 };
    private int[] resId03 = { R.drawable.area03, R.drawable.area07 };
    private int[] resId04 = { R.drawable.area04, R.drawable.area08 };

2.初始化
 flippers = new ArrayList<>();

        flipper01 = (ViewFlipper) findViewById(R.id.vf_area01);
        flipper02 = (ViewFlipper) findViewById(R.id.vf_area02);
        flipper03 = (ViewFlipper) findViewById(R.id.vf_area03);
        flipper04 = (ViewFlipper) findViewById(R.id.vf_area04);

3. 使用方法

/**
     * 自動輪播圖片
     */
    private void setFilpper() {
        flippers.add(flipper01);
        flippers.add(flipper02);
        flippers.add(flipper03);
        flippers.add(flipper04);

        for (int i = 0; i < resId01.length; i++) {
            flipper01.addView(getImageView(resId01[i]));
        }

        for (int i = 0; i < resId02.length; i++) {
            flipper02.addView(getImageView(resId02[i]));
        }

        for (int i = 0; i < resId03.length; i++) {
            flipper03.addView(getImageView(resId03[i]));
        }

        for (int i = 0; i < resId04.length; i++) {
            flipper04.addView(getImageView(resId04[i]));
        }

        Animation inAnimation = new AlphaAnimation(0.5f, 1.0f);
        inAnimation.setDuration(500);

        Animation outAnimation = new AlphaAnimation(1.0f, 0.5f);
        inAnimation.setDuration(500);

        /**
         * 每一個ViewFlipper都加上動畫效果
         */
        for (int i = 0; i < flippers.size(); i++) {
            flippers.get(i).setInAnimation(inAnimation);
            flippers.get(i).setOutAnimation(outAnimation);
        }

        //隨機輪播一次一張
        autoChangeFlipper();

    }

    /**
     * 每三秒隨機更換一組圖
     */
    private void autoChangeFlipper() {
        //目前設置不重複上一次播放的
        final ArrayList<ViewFlipper> temp = new ArrayList<>();
        for (int i = 0; i < flippers.size(); i++) {
            temp.add(flippers.get(i));
        }
        //上次選中
        final ViewFlipper[] temp1 = new ViewFlipper[1];
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (!repeat) {
                    return;
                }
                int count = temp.size();
                //本次選中
                ViewFlipper vf = temp.get(new Random().nextInt(count));

                if (vf != null) {
                    vf.showNext();
                    //移除本次選中
                    temp.remove(vf);
                    //不是第一次進來, 把上次選中的加回來
                    if (count < 4) {
                        temp.add(temp1[0]);
                    }
                    //本次選中的保留,下次要加回來

                    temp1[0] = vf;

                    handler.postDelayed(this, 3000);
                    //TODO : 目前會離開頁面繼續加入列隊等回來時再一次變更
                    //                    if (repeat){
                    //                        handler.postDelayed(this,3000);
                    //                    }
                }
            }
        }, 3000);
    }
WeakRefHandler class
public class WeakRefHandler extends Handler {
    private WeakReference<Callback> mWeakReference;

    public WeakRefHandler(Callback callback) {
        mWeakReference = new WeakReference<Callback>(callback);
    }

    public WeakRefHandler(Callback callback, Looper looper) {
        super(looper);
        mWeakReference = new WeakReference<Callback>(callback);
    }

    @Override
    public void handleMessage(Message msg) {
        if (mWeakReference != null && mWeakReference.get() != null) {
            Callback callback = mWeakReference.get();
            callback.handleMessage(msg);
        }
    }

}

留言