TextSwitcher类(TextView改变文本动画切换)
由继承图可以知道它是一个容器。
它的父类有个方法 public void setFactory(ViewFactory factory)这个方法是设置两个视图切换的工厂类
下面是源码:
public void setFactory(ViewFactory factory) {
mFactory = factory;
obtainView();
obtainView();
}
private View obtainView() {
View child = mFactory.makeView();
LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (lp == null) {
lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
addView(child, lp);
return child;
}
里面连续调用了两次obtainView,添加了两个子View而这两个view都来自ViewFactory 的makeView();
ViewFactory 是一个接口需要我们去实现,这里我们是TextSwitcher类,它所需要的也是TextView
那么
private ViewFactory mFactory = new ViewFactory() {
@Override
public View makeView()
{
TextView t = new TextView(MainActivity.this);
t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
t.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);
return t;
}
};
然后在这两个子view上分别设置进出动画
Animation in = AnimationUtils.loadAnimation(this,
android.R.anim.fade_in);
Animation out = AnimationUtils.loadAnimation(this,
android.R.anim.fade_out);
mSwitcher.setInAnimation(in);
mSwitcher.setOutAnimation(out);
下面这两个方法的差异:
这个方法是首次进去没有动画设置默认显示的数据
mSwitcher.setCurrentText();
当后面控件发生改变的时候并且启动动画切换时调用
mSwitcher.setText();