1. 程式人生 > >Android ViewSwitcher、TextSwitcher、ImageSwitcher

Android ViewSwitcher、TextSwitcher、ImageSwitcher

ViewSwither

ViewSwither 繼承 ViewAnimator,用來在兩個View之間來回切換並可以設定不同的切換動畫。ViewSwitcher 只能包含有兩個子View,一次性只能顯示其中一個。

常用的方法有:

mViewSwitcher1.showPrevious(); // 顯示上一個View
mViewSwitcher1.showNext();     // 顯示下一個View
  • 有三種新增子View的方式:

1.通過XML:

    <ViewSwitcher
            android:id="@+id/view_switcher_1"
            android:layout_width
="match_parent" android:layout_height="180dp">
<TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="24dp" android:text="ViewSwitcher1#TextView1"
/>
<TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="24dp" android:text="ViewSwitcher1#TextView2"/> </ViewSwitcher>

2.通過addView新增:

        TextView textView = new TextView(this);
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(24);
        textView.setText("view_switcher_2_" + "textview_" + number);
        mViewSwitcher2.addView(textView);

3.通過實現ViewSwitcher.ViewFactory介面中的makeView方法,然後呼叫ViewSwitcher.setFactory(this)方法:

    @Override
    public View makeView() {
        TextView textView = new TextView(this);
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(24);
        textView.setText("view_switcher_3_" + "textview");
        return textView;
    }
   // ViewSwitcher.setFactory會通過obtainView來回調makeView方法。
    public void setFactory(ViewFactory factory) {
        mFactory = factory;
        obtainView();
        obtainView();
    }
  • 設定兩個View之間的切換動畫
ViewSwitcher.setInAnimation // 設定進入動畫
ViewSwitcher.setOutAnimation // 設定退出動畫

TextSwitcher

TextSwitcher 繼承ViewSwitcher,相當於指定了ViewSwitcher的子View只能是TextView。TextSwitcher 可以給螢幕上的Label加上切換動畫。通過呼叫setText(CharSequence)把當前的text退出,顯示下一個text並帶有動畫效果。
- 新增子View的方式跟ViewSwitcher一樣,區別就是隻能使用TextView。
- 呼叫setText(CharSequence)來切換Text。
- 切換動畫同ViewSwitcher。

public class TextSwitcher1 extends Activity implements ViewSwitcher.ViewFactory {

    private int mCounter = 0;
    private TextSwitcher mSwitcher;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text_switcher_1);

        Animation fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
        Animation fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);

        mSwitcher = (TextSwitcher) findViewById(R.id.text_switcher);
        mSwitcher.setFactory(this);
        mSwitcher.setInAnimation(fadeIn);
        mSwitcher.setOutAnimation(fadeOut);

        updateCounter();

    }

    public void onClick(View view) {
        mCounter++;
        updateCounter();
    }

    private void updateCounter() {
        mSwitcher.setText(String.valueOf(mCounter));
    }


    @Override
    public View makeView() {
        // 通過ViewFactory, makeView會被呼叫兩次
        TextView textView = new TextView(this);
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(36);

        return textView;
    }
}

ImageSwitcher

ImageSwitcher跟TextSwithcer類似,只是用於兩個ImageView之間進行有動畫的切換。新增子view(ImageView)的方式和設定切換動畫都跟ViewSwitcher一樣。當呼叫ImageSwitcher.setImage*方法時會進行兩個ImageView的切換。