【AndroidのViewを制する】 ViewSwitcherとViewSwitcher.ViewFactoryを使いこなして2つのViewを切り替える
今回、紹介するViewSwitcherはViewAnimatorを継承しています。
ViewAnimatorとの違いは2つの子Viewを切り替えることに特化していることです。
ViewSwitcher#setFactoryとViewSwitcher.ViewFactoryを使ってViewを2つ追加する
ViewSwitcherは子Viewを2つしか持つことができません。2つ以上追加しようとすると例外が発生します。ViewSwitcherには、スーパークラスから継承したaddViewを使ってViewを追加する方法とViewSwitcher#setFactoryを追加ってViewを追加する方法があります。
ViewSwitcher.ViewFactoryにはViewを作成するファクトリメソッドViewSwitcher.ViewFactory#makeViewが定義されています。
このメソッドを実装し、ViewSwitcher#setFactoryに渡すことで自動的に子Viewを2つViewSwitcherに追加されます。
// ViewSwitcherをインスタンス化
final ViewSwitcher viewSwitcher = new ViewSwitcher(this);
// ViewSwitcher.ViewFactoryを設定する
viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
// 子Viewを作成
TextView textView = new TextView(ViewSwitcherActivity.this);
textView.setText( (viewSwitcher.getChildCount() + 1)+ "個目のView" ) ;
return textView;
}
});
// ViewSwitcherを設定したViewを表示する。
setContentView(viewSwitcher);
ViewSwitcher#getNextViewを使って次に表示される子Viewを取得する
ViewSwitcher#getNextViewは次に表示される子Viewを返却するメソッドです。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
// ViewSwitcherをインスタンス化
final ViewSwitcher viewSwitcher = new ViewSwitcher(this);
viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView textView = new TextView(ViewSwitcherActivity.this);
textView.setText( (viewSwitcher.getChildCount() + 1)+ "個目のView" ) ;
return textView;
}
});
Button showNextView = new Button(this);
showNextView.setText("次のViewのテキストを表示する");
showNextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 次のViewのテキストをToast表示する
Toast.makeText(ViewSwitcherActivity.this, (( TextView )viewSwitcher.getNextView()).getText(), Toast.LENGTH_SHORT).show();
}
});
linearLayout.addView(viewSwitcher);
linearLayout.addView(showNextView);
// ViewSwitcherを設定したViewを表示する。
setContentView(linearLayout);
ViewSwitcher#resetですべてを非表示にする
ViewSwitcher#resetは子Viewを非表示にするメソッドです。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
// ViewSwitcherをインスタンス化
final ViewSwitcher viewSwitcher = new ViewSwitcher(this);
viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView textView = new TextView(ViewSwitcherActivity.this);
textView.setText( (viewSwitcher.getChildCount() + 1)+ "個目のView" ) ;
return textView;
}
});
Button reset = new Button(this);
reset.setText("リセット");
reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ViewSwitcher内のViewをすべて非表示にする
viewSwitcher.reset();
}
});
linearLayout.addView(viewSwitcher);
linearLayout.addView(reset);
// ViewSwitcherを設定したViewを表示する。
setContentView(linearLayout);