玩转Android组件篇---TextSwitcher


还记得有一次淘宝的电话面试的时候问了我一个关于Android的问题:如何让一个数字在组件上从0到n连续的显示变化,用到了什么方法的问题。今天将这个问题解答一下

这里,用到的是TextSwitcher,它仅仅包含子类型TextView,TextSwitcher用来使得屏幕上的Label产生动画效果,每当setText(CharSequence)被调用时,TextSwitcher使用动画方式将当前的文字内容消失并显示新的内容

下面看看实例中的使用以及效果

MainActivity.java

  1. package org.loulijun.android01;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.view.Gravity;   
  6. import android.view.View;   
  7. import android.view.animation.Animation;   
  8. import android.view.animation.AnimationUtils;   
  9. import android.widget.Button;   
  10. import android.widget.TextSwitcher;   
  11. import android.widget.TextView;   
  12. import android.widget.ViewSwitcher.ViewFactory;   
  13.   
  14. public class MainActivity extends Activity implements ViewFactory {   
  15.     private TextSwitcher mSwitcher;   
  16.     private int mCounter = 0;   
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {   
  19.         super.onCreate(savedInstanceState);   
  20.         setContentView(R.layout.main);   
  21.         mSwitcher = (TextSwitcher)findViewById(R.id.switcher);   
  22.         mSwitcher.setFactory(this);   
  23.            
  24.         Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);   
  25.         Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);   
  26.         mSwitcher.setInAnimation(in);   
  27.         mSwitcher.setOutAnimation(out);   
  28.            
  29.         Button nextButton = (Button)findViewById(R.id.next);   
  30.         nextButton.setOnClickListener(new Button.OnClickListener()   
  31.         {   
  32.   
  33.             @Override  
  34.             public void onClick(View v) {   
  35.                 mCounter++;   
  36.                 updateCounter();   
  37.             }   
  38.                
  39.         });   
  40.         updateCounter();   
  41.            
  42.     }   
  43.        
  44.     private void updateCounter()   
  45.     {   
  46.         mSwitcher.setText(String.valueOf(mCounter));   
  47.     }   
  48.     public View makeView()   
  49.     {   
  50.         TextView t = new TextView(this);   
  51.         t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);   
  52.         t.setTextSize(36);   
  53.         return t;   
  54.     }   
  55.   
  56. }  

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >   
  7. <Button android:id="@+id/next"  
  8.     android:layout_width="wrap_content"  
  9.     android:layout_height="wrap_content"  
  10.     android:text="下一个"  
  11. />   
  12. <TextSwitcher   
  13.     android:id="@+id/switcher"  
  14.     android:background="#00FFFF"  
  15.     android:layout_width="match_parent"  
  16.     android:layout_height="wrap_content"  
  17. />   
  18. </LinearLayout>  

上效果图:

当然,如果要是让其自动的变换的话,可以使用一下hander或者线程,让其变化的主要是TextSwitcher组件中的setText方法。

相关内容