偶然发现这两个控件,用法和TextView、ImageView相似,在XML布局中定义控件
ImageSwitcher
<ImageSwitcher
android:id="@+id/switcher_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageSwitcher>
TextSwitcher
<TextSwitcher
android:id="@+id/switcher_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextSwitcher>
java代码获取控件,并设置内容
textSwitcher = (TextSwitcher) findViewById(R.id.switcher_text);
textSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView v = new TextView(SwitcherActivity.this);
//设置居中,子view大小不一样时可能位置不居中问题
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER;
v.setLayoutParams(lp);
v.setTextSize(32);
return v;
}});
textSwitcher.setText(""+text);
textSwitcher.setInAnimation(this, android.R.anim.slide_in_left);
textSwitcher.setOutAnimation(this, android.R.anim.slide_out_right);
简单来说这两控件里面包含两个子View,
通过setFactory工厂创建子view,里面的makeView()方法就是具体创建子view;
每次重新设置内容时,两个子view进行替换,有动画效果。所以textSwitcher.setInAnimation(this,android.R.anim.slide_in_left);
textSwitcher.setOutAnimation(this,android.R.anim.slide_out_right);
这两句就是设置in和out的动画。
当重新对textSwitcher.setText(""+text);的时候,就可以看到动画效果