【AndroidのViewを制する】 ViewFlipperを使いこなしてViewを一定時間で切り替える
今回、紹介する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);