伴职创作「banzhi.cc」书客创作[ibooker.cc]Android开发经验谈

【Android】TextSwitcher文本转换器

2017-10-10  本文已影响212人  吾非言

作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc

本文选自书客创作平台第15篇文章。阅读原文

书客创作

TextSwitcher继承ViewSwitcher,是用来实现文本转换的控件,一般用来转换TextView的文本。平时在开发过程中,改变TextView文本,只需要使用TextView.setText("文本")即可,那么TextSwitcher转换TextView有哪些特殊的地方呢?

首先,说说TextSwitcher的这个转换到底指什么?

这里的转换并不只是对同一个TextView进行文本转换,还可以对不同TextView进行文本转换。

拿生活中的例子来说,你平时在支付宝上发布上门寄快件信息,支付宝上快递公司可能派快递员过来取快件,然后寄出去。当你再次在支付宝上发布上门寄快件信息,支付宝上快递公司同样会派快递员过来取快件,然后寄出去。这里的快递员就相当于TextView,可能是同一个快递员,也可以是不同的快递员。快件信息就相当于文本。而支付宝平台就相当于TextSwitcher,用来处理信息转换。

其次,说说TextSwitcher文本转换特点。

TextSwitcher最大的特点就是在处理文本转换的时候,设置转换过程动画。对于多个TextView只需要一次设置即可。

// 设置转换动画,这里引用系统自带动画
Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
textSwitcher.setInAnimation(in);
textSwitcher.setOutAnimation(out);

与TextSwitcher最为密切的是ViewFactory,它是用来给TextSwitcher提供视图的工厂,ViewFactory通过makeView方法制造View视图。

// 提供TextSwitcher切换View
@Override
public View makeView() {
   TextView textView =new TextView(this);
   textView.setTextSize(24);
   return textView;
}

最后,实例分析。

TextSwitcher使用起来很简单,只需两个关键步骤:定义TextSwitcher实体、设置ViewFactory。

TextSwitcher的使用有两种方式,一种是直接在XML布局文件中添加,之后在Java文件中进行相关属性设置。二种是自定义TextSwitcher。

1、XML布局文件添加

<TextSwitcher
   android:id="@+id/textswitcher"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/app_name"/>

这时候要在Java代码中设置ViewFactory,这里可以通过继承ViewSwitcher.ViewFactory接口,实现ViewFactory。

// 自定义文本转换器
textSwitcher= (TextSwitcher) findViewById(R.id.textswitcher);
// 指定TextSwitcher的ViewFactory(视图工厂),ViewFactory会给TextSwitcher提供View
textSwitcher.setFactory(this);

2、自定义TextSwitcher

public class ZTextSwitcher extends TextSwitcher implements TextSwitcher.ViewFactory {
   private Context mContext;
   public ZTextSwitcher(Context context) {
      this(context, null);
   }
   public ZTextSwitcher(Context context, AttributeSet attrs) {
      super(context,attrs);
      this.mContext= context;
      init();
   }
   private void init() {
      // 设置转换动画,这里引用系统自带动画
      Animation in = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in);
      Animation out = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_out);
      this.setInAnimation(in);
      this.setOutAnimation(out);
      // 设置ViewSwitcher.ViewFactory
      this.setFactory(this);
   }
   @Override
   public View makeView() {
      TextView textView =new TextView(mContext);
      textView.setTextSize(24);
      return textView;
   }
}

最后在XML布局文件中引入即可:

<cc.ibooker.ztextswitcher.ZTextSwitcher
   android:id="@+id/ztextswitcher"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/app_name"/>

GitHub地址
阅读原文


微信公众号:书客创作
上一篇下一篇

猜你喜欢

热点阅读