在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第六章-切換類TextSwitcher和ImageSwitcher
第十八章-ViewPager+FragmentStatePagerAdapter實現仿微信Tab
第十五章-GridView實現動態(tài)添加和刪除子項
第九章-進度條ProgressBar
第十二章-經典的ListView
第十四章-GridView控件
第八章-時間相關控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開關按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動態(tài)添加、刪除及點擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴展(多選、全選、反選)
第四章-玩轉單選和多選按鈕
第十章-可以拖動的ProgressBar-SeekBar
第十九章-Android菜單之選項菜單

第六章-切換類TextSwitcher和ImageSwitcher

顧名思義,Switcher是“切換者”的意思,那么TextSwitcher就是文本切換器,ImageSwitcher就是圖片切換器,在某些需要頻繁切換文本或圖片的場景可以考慮使用這兩個類,同時可以在切換過程中加上動畫效果,使界面更為美觀。其繼承結構如下:

public class
ViewSwitcher
extends ViewAnimator
java.lang.Object
   ?    android.view.View
       ?    android.view.ViewGroup
           ?    android.widget.FrameLayout
               ?    android.widget.ViewAnimator
                   ?    android.widget.ViewSwitcher
Known Direct Subclasses
ImageSwitcher, TextSwitcher

可以看出ImageSwitcher和TextSwitcher同屬于ViewSwitcher的子類,下面通過一個有趣的倒計時實例學習一下TextSwitcher的用法。 主布局文件(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextSwitcher
        android:id="@+id/textSwitcher"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true" />
</RelativeLayout>

TextSwitcher控件由標簽TextSwitcher標簽包裹,整個布局采用相對布局,設置TextSwitcher屬性layout_centerInParent屬性為true,居中顯示控件。

動畫文件(textswitcher_in.xml)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="200"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromXScale="0"
        android:fromYScale="0"
        android:toXScale="1"
        android:toYScale="1"/>
    <rotate android:fromDegrees="0"
        android:toDegrees="360"
        android:duration="500"
        android:pivotX="0.5"
        android:pivotY="0.5"/>
</set>

設置了scale大小動畫(scale大小設置從0到1)和rotate(0-360度)旋轉動畫。

動畫文件(textswitcher_out.xml)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="500"
        android:fromXScale="1"
        android:fromYScale="1"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0"
        android:toYScale="0" />
    <rotate
        android:duration="500"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
</set>

MainActivity.java代碼(MainActivity.java)

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timeCount=new TimeCount(10*1000,1000);//初始化倒計時類
        textSwitcher=(TextSwitcher)findViewById(R.id.textSwitcher);
        textSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.textswitcher_in));//載入動畫
        textSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.textswitcher_out));//載入動畫
        timeCount.start();//倒計時類開始
        textSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                TextView textView = new TextView(MainActivity.this);
                textView.setTextColor(Color.RED);//設置字體顏色
                textView.setTextSize(40);//設置字體大小
                textView.setLayoutParams(new TextSwitcher.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
                        ViewGroup.LayoutParams.MATCH_PARENT));//設置寬高屬性
                return textView;
            }
        });
    }
    class TimeCount extends CountDownTimer{//倒計時類
        public TimeCount(long millisInFuture, long countDownInterval) {//必須重載的構造方法
            super(millisInFuture, countDownInterval);
        }
        @Override
        public void onTick(long millisUntilFinished) {//計時過程中觸發(fā)
           count=(int)millisUntilFinished/1000;
            textSwitcher.setText(count+"");
        }
        @Override
        public void onFinish() {//計時結束時觸發(fā)
            textSwitcher.setText("Dead");
        }
    }
}

看過上一節(jié)的讀者應該對CountDownTimer類不陌生,這是一個倒計時類,它是一個抽象類,這里通過TimeCount類繼承它,并覆寫了它的兩個方法onTick(倒計時過程中觸發(fā))和onFinish(倒計時結束時觸發(fā)),同時重載了其構造方法,包含兩個參數,一個是millisInFuture表示倒計時時長,單位為毫秒;另一個countDownInterval表示倒計時間隔,單位也為毫秒。

TextSwitcher必須實現ViewSwitcher.ViewFactory接口,并覆寫其中的makeView方法。調用setFactory方法為TextSwitcher設置轉換工廠。

運行實例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/6-1.png" alt="這里寫圖片描述" />

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/6-2.png" alt="這里寫圖片描述" />

倒計時是旋轉著并從小到大顯示,倒計時結束后顯示“Dead”。 上面介紹了ImageSwitcher如何進行文字切換的,下面來研究一下ImageSwitcher的用法。

主布局文件代碼(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

圖片切換器用ImageSwitcher標簽包裹。 MainActivity代碼(MainActivity.java)

public class MainActivity extends Activity {
    private ImageSwitcher imageSwitcher;
    private int pics[]={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3};//圖片源
    private int index=0;//圖片標識位
    float startX=0;//手指按下時的x坐標
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);
        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {//設置轉換工廠
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT));//設置寬高
                return imageView;
            }
        });
        imageSwitcher.setImageResource(pics[0]);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {//覆寫此方法用于判斷左劃右劃
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                startX=event.getX();//手指按下時的x坐標作為起始坐標
                break;
            case  MotionEvent.ACTION_UP:
                float endX=event.getX();//手指離開時的x坐標作為結束坐標
                if( endX-startX>100){//上一頁
                    if(index>0) {
                        index--;}else {
                        index=2;
                    }
                    imageSwitcher.setImageResource(pics[index%3]);
                    imageSwitcher.setInAnimation(MainActivity.this, android.R.anim.fade_in);//設置動畫
                    imageSwitcher.setOutAnimation(MainActivity.this, android.R.anim.fade_out);//設置動畫
                }else if(startX-endX>100){//下一頁
                    index++;
                    imageSwitcher.setInAnimation(MainActivity.this, android.R.anim.fade_in);//設置動畫
                    imageSwitcher.setOutAnimation(MainActivity.this,android.R.anim.fade_out);//設置動畫
                    imageSwitcher.setImageResource(pics[index % 3]);
                }
                break;
        }
        return true;
    }
}

可以看出ImageSwitcher同樣也需要設置圖片轉換工廠,在圖片切換操作上覆寫了onTouchEvent方法,根據傳入的event參數調取getAction方法可以得到三個常量:

  • MotionEvent.ACTION_DOWN:手指按下時觸發(fā)
  • MotionEvent.ACTION_UP:手指抬起時觸發(fā)
  • MotionEvent.ACTION_MOVE:手指在屏幕上滑動時觸發(fā)

在手指按下時記錄按下時的X軸坐標,抬起時記錄結束的X軸坐標,根據兩次坐標差值可以得出手指的滑動方向,然后進行圖片的切換。注意圖片切換時index圖片下標的邏輯處理問題。

同時這里用到了ImageSwitcher的setInAnimation方法,引入了系統(tǒng)內置的淡入淡出動畫效果。

運行實例:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/6-3.png" alt="這里寫圖片描述" />

左右滑動切換圖片,可以看出圖片具有的淡入淡出效果。