【AndroidのViewを制する】 ViewFlipperを使いこなしてViewを一定時間で切り替える

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

今回、紹介するViewFlipperはViewAnimatorを継承しています。
ViewAnimatorとの違いはViewを一定間隔で切り替えることができます。

ViewFlipper#startFlippingとViewFlipper#stopFlippingを使ってフリップを開始停止する

ViewFlipper#startFlippingはフリップを開始するメソッドです。 ViewFlipper#stopFlippingはフリップを停止するメソッドです。
    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    final ViewFlipper viewFlipper = new ViewFlipper(this);

    // フリップするImageViewを追加する
    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(1000,1000);
    ImageView imageView1 = new ImageView(this);
    imageView1.setLayoutParams(layoutParams);
    imageView1.setImageResource(android.R.drawable.ic_menu_add);
    viewFlipper.addView(imageView1);

    ImageView imageView2 = new ImageView(this);
    imageView2.setLayoutParams(layoutParams);
    imageView2.setImageResource(android.R.drawable.ic_menu_agenda);
    viewFlipper.addView(imageView2);

    ImageView imageView3 = new ImageView(this);
    imageView3.setLayoutParams(layoutParams);
    imageView3.setImageResource(android.R.drawable.ic_menu_call);
    viewFlipper.addView(imageView3);

    ImageView imageView4 = new ImageView(this);
    imageView4.setLayoutParams(layoutParams);
    imageView4.setImageResource(android.R.drawable.ic_menu_camera);
    viewFlipper.addView(imageView4);

    // フリップを開始する
    Button startButton = new Button(this);
    startButton.setText("フリップを開始する。");
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            viewFlipper.startFlipping();
        }
    });
    
    // フリップを停止する
    Button stopButton = new Button(this);
    stopButton.setText("フリップを停止する。");
    stopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            viewFlipper.stopFlipping();
        }
    });

    linearLayout.addView(viewFlipper);
    linearLayout.addView(startButton);
    linearLayout.addView(stopButton);
    setContentView(linearLayout);


ViewFlipper#setAutoStartを使ってフリップを自動開始する

ViewFlipper#setAutoStartは自動的にフリップを開始しするメソッドです。

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    final ViewFlipper viewFlipper = new ViewFlipper(this);
    // フリップの自動開始をする
    viewFlipper.setAutoStart(true);

    // フリップするImageViewを追加する
    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(1000,1000);
    ImageView imageView1 = new ImageView(this);
    imageView1.setLayoutParams(layoutParams);
    imageView1.setImageResource(android.R.drawable.ic_menu_add);
    viewFlipper.addView(imageView1);

    ImageView imageView2 = new ImageView(this);
    imageView2.setLayoutParams(layoutParams);
    imageView2.setImageResource(android.R.drawable.ic_menu_agenda);
    viewFlipper.addView(imageView2);

    ImageView imageView3 = new ImageView(this);
    imageView3.setLayoutParams(layoutParams);
    imageView3.setImageResource(android.R.drawable.ic_menu_call);
    viewFlipper.addView(imageView3);

    ImageView imageView4 = new ImageView(this);
    imageView4.setLayoutParams(layoutParams);
    imageView4.setImageResource(android.R.drawable.ic_menu_camera);
    viewFlipper.addView(imageView4);

    linearLayout.addView(viewFlipper);
    setContentView(linearLayout);


ViewFlipper#setFlipIntervalを使ってフリッップの間隔を設定する

ViewFlipper#setFlipIntervalはフリップの実行間隔をミリ秒で設定するメソッドです。
フリップの開始間隔なので設定する時間がインアニメーションとアウトアニメーションの 合計時間より短い場合は前のViewが残った状態で表示されるので注意しましょう。


    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    final ViewFlipper viewFlipper = new ViewFlipper(this);
    // フリップの自動開始をする
    viewFlipper.setAutoStart(true);

    // フリップするImageViewを追加する
    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(1000,1000);
    ImageView imageView1 = new ImageView(this);
    imageView1.setLayoutParams(layoutParams);
    imageView1.setImageResource(android.R.drawable.ic_menu_add);
    viewFlipper.addView(imageView1);

    ImageView imageView2 = new ImageView(this);
    imageView2.setLayoutParams(layoutParams);
    imageView2.setImageResource(android.R.drawable.ic_menu_agenda);
    viewFlipper.addView(imageView2);

    ImageView imageView3 = new ImageView(this);
    imageView3.setLayoutParams(layoutParams);
    imageView3.setImageResource(android.R.drawable.ic_menu_call);
    viewFlipper.addView(imageView3);

    ImageView imageView4 = new ImageView(this);
    imageView4.setLayoutParams(layoutParams);
    imageView4.setImageResource(android.R.drawable.ic_menu_camera);
    viewFlipper.addView(imageView4);

    // インアニメーションを設定する。
    AlphaAnimation inAnimation = new AlphaAnimation(0,1);
    inAnimation.setDuration(300);
    inAnimation.setStartOffset(300);
    viewFlipper.setInAnimation(inAnimation);

    // アウトアニメーションを設定する。
    AlphaAnimation outAnimation = new AlphaAnimation(1,0);
    outAnimation.setDuration(300);
    viewFlipper.setOutAnimation(outAnimation);

    // フリップの間隔を変更する
    Button setFlipIntervalButton = new Button(this);
    setFlipIntervalButton.setText("フリップ間隔を変更する。");
    setFlipIntervalButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random random = new Random();
            int interval = (random.nextInt(10) + 1 ) * 100 + 300;
            viewFlipper.setFlipInterval(interval);
            Toast.makeText(ViewFlipperActivity.this, "interval:" + interval + "ミリ秒", Toast.LENGTH_SHORT).show();
        }
    });

    linearLayout.addView(viewFlipper);
    linearLayout.addView(setFlipIntervalButton);
    setContentView(linearLayout);


ViewFlipper#isFlippingを使ってフリップの状態を取得する。

ViewFlipper#isFlippingを使うことでフリップが開始状態か停止状態かを返却します。


    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    final ViewFlipper viewFlipper = new ViewFlipper(this);

    // フリップするImageViewを追加する
    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(1000,1000);
    ImageView imageView1 = new ImageView(this);
    imageView1.setLayoutParams(layoutParams);
    imageView1.setImageResource(android.R.drawable.ic_menu_add);
    viewFlipper.addView(imageView1);

    ImageView imageView2 = new ImageView(this);
    imageView2.setLayoutParams(layoutParams);
    imageView2.setImageResource(android.R.drawable.ic_menu_agenda);
    viewFlipper.addView(imageView2);

    ImageView imageView3 = new ImageView(this);
    imageView3.setLayoutParams(layoutParams);
    imageView3.setImageResource(android.R.drawable.ic_menu_call);
    viewFlipper.addView(imageView3);

    ImageView imageView4 = new ImageView(this);
    imageView4.setLayoutParams(layoutParams);
    imageView4.setImageResource(android.R.drawable.ic_menu_camera);
    viewFlipper.addView(imageView4);

    // フリップを開始する
    Button startButton = new Button(this);
    startButton.setText("フリップを開始する。");
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            viewFlipper.startFlipping();
        }
    });
    
    // フリップを停止する
    Button stopButton = new Button(this);
    stopButton.setText("フリップを停止する。");
    stopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            viewFlipper.stopFlipping();
        }
    });

    // フリップ状態を確認する
    Button isFlippingButton = new Button(this);
    isFlippingButton.setText("フリップ状態を確認する。");
    isFlippingButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(ViewFlipperActivity.this, "isFlipping:" + viewFlipper.isFlipping(), Toast.LENGTH_SHORT).show();
        }
    });

    linearLayout.addView(viewFlipper);
    linearLayout.addView(startButton);
    linearLayout.addView(stopButton);
    linearLayout.addView(isFlippingButton);
    setContentView(linearLayout);