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

鍍金池/ 教程/ Android/ 百戰(zhàn)經(jīng)典第九戰(zhàn)-ViewFlipper實(shí)現(xiàn)幻燈效果
百戰(zhàn)經(jīng)典第二十戰(zhàn)-ListView中點(diǎn)擊button跳轉(zhuǎn)到撥號(hào)界面實(shí)例
百戰(zhàn)經(jīng)典第十一戰(zhàn)-GridView動(dòng)態(tài)添加Item
百戰(zhàn)經(jīng)典第二戰(zhàn)-好玩的Spinner控件
百戰(zhàn)經(jīng)典第五戰(zhàn)-各種對(duì)話框Dialog精彩薈萃
百戰(zhàn)經(jīng)典第八戰(zhàn)-BitmapFactory.Options對(duì)資源圖片進(jìn)行縮放
百戰(zhàn)經(jīng)典第四戰(zhàn)-玩轉(zhuǎn)ListView
百戰(zhàn)經(jīng)典第十五-竊聽(tīng)風(fēng)云之短信監(jiān)聽(tīng)
前言
百戰(zhàn)經(jīng)典第十四戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas用戶表查詢功能實(shí)現(xiàn)
百戰(zhàn)經(jīng)典第九戰(zhàn)-ViewFlipper實(shí)現(xiàn)幻燈效果
百戰(zhàn)經(jīng)典第三戰(zhàn)-實(shí)現(xiàn)畫(huà)圖板
百戰(zhàn)經(jīng)典第十七戰(zhàn)-基于加速度傳感器的搖一搖功能實(shí)例
百戰(zhàn)經(jīng)典第十戰(zhàn)-LayoutAnimation布局動(dòng)畫(huà)效果
百戰(zhàn)經(jīng)典第七戰(zhàn)-顯示倒計(jì)時(shí)的Button按鈕
百戰(zhàn)經(jīng)典第六戰(zhàn)-Activity啟動(dòng)模式小樣
百戰(zhàn)經(jīng)典第十二戰(zhàn)-GridView動(dòng)態(tài)刪除Item
百戰(zhàn)經(jīng)典第十六戰(zhàn)-圖片或頭像設(shè)置功能
百戰(zhàn)經(jīng)典第十九戰(zhàn)-短信監(jiān)聽(tīng)實(shí)現(xiàn)驗(yàn)證碼自動(dòng)填入
百戰(zhàn)經(jīng)典第一戰(zhàn)—聽(tīng)話的TextView
百戰(zhàn)經(jīng)典第十八戰(zhàn)-自定義控件實(shí)現(xiàn)一鍵清空輸入框
百戰(zhàn)經(jīng)典第十三戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas實(shí)現(xiàn)用戶注冊(cè)功能

百戰(zhàn)經(jīng)典第九戰(zhàn)-ViewFlipper實(shí)現(xiàn)幻燈效果

ViewFlipper 在實(shí)際項(xiàng)目中用到的不是很多了,但是作為初學(xué)者的我們還是有必要了解一下它的主要用法,本實(shí)例結(jié)合手勢(shì)類(GestureDetector),實(shí)現(xiàn)滑動(dòng)瀏覽圖片的功能。

直接看代碼

1.MainActivity.java:

package org.yayun.demo;  
//省略導(dǎo)入包
public class MainActivity extends Activity implements  
        android.view.GestureDetector.OnGestureListener {  
    private int[] imgs = { R.drawable.img1, R.drawable.img2, R.drawable.img3 };  
    private GestureDetector gestureDetector;  
    private ViewFlipper viewFlipper;  
    private Activity mActivity;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        mActivity = this;  
        viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);  
        gestureDetector = new GestureDetector(this);//手勢(shì)監(jiān)聽(tīng)  
        for (int i = 0; i < imgs.length; i++) { // 添加圖片源  
            ImageView iv = new ImageView(this);  
            iv.setImageResource(imgs[i]);  
            iv.setScaleType(ImageView.ScaleType.FIT_XY);  
            viewFlipper.addView(iv, new LayoutParams(LayoutParams.FILL_PARENT,  
                    LayoutParams.FILL_PARENT));  
        }  
        viewFlipper.setAutoStart(true); // 設(shè)置自動(dòng)播放功能(點(diǎn)擊事件,前自動(dòng)播放)  
        viewFlipper.setFlipInterval(3000);//間隔3秒  
        if (viewFlipper.isAutoStart() && !viewFlipper.isFlipping()) {  
            viewFlipper.startFlipping();  
        }  
    }  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        viewFlipper.stopFlipping(); // 點(diǎn)擊事件后,停止自動(dòng)播放  
        viewFlipper.setAutoStart(false);  
        return gestureDetector.onTouchEvent(event); // 注冊(cè)手勢(shì)事件  
    }  
    public boolean onDown(MotionEvent arg0) {  
        return false;  
    }  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float arg2,  
            float arg3) {  
        if (e2.getX() - e1.getX() > 120) { // 從左向右滑動(dòng)(左進(jìn)右出)  
            Animation rInAnim = AnimationUtils.loadAnimation(mActivity,  
                R.layout.push_right_in); // 向右滑動(dòng)左側(cè)進(jìn)入的漸變效果(alpha 0.1 -> 1.0)  
            Animation rOutAnim = AnimationUtils.loadAnimation(mActivity,  
                    R.layout.push_right_out); // 向右滑動(dòng)右側(cè)滑出的漸變效果(alpha 1.0 -> 0.1)  
            viewFlipper.setInAnimation(rInAnim);  
            viewFlipper.setOutAnimation(rOutAnim);  
            viewFlipper.showPrevious();  
            return true;  
        } else if (e2.getX() - e1.getX() < -120) { // 從右向左滑動(dòng)(右進(jìn)左出)  
            Animation lInAnim = AnimationUtils.loadAnimation(mActivity,  
                    R.layout.push_left_in); // 向左滑動(dòng)左側(cè)進(jìn)入的漸變效果(alpha 0.1 -> 1.0)  
            Animation lOutAnim = AnimationUtils.loadAnimation(mActivity,  
                    R.layout.push_left_out); // 向左滑動(dòng)右側(cè)滑出的漸變效果(alpha 1.0 -> 0.1)  
            viewFlipper.setInAnimation(lInAnim);  
            viewFlipper.setOutAnimation(lOutAnim);  
            viewFlipper.showNext();  
            return true;  
        }  
        return true;  
    }  
    public void onLongPress(MotionEvent arg0) {  
    }  
    public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,  
            float arg3) {  
        return false;  
    }  
    public void onShowPress(MotionEvent arg0) {  
    }  
    public boolean onSingleTapUp(MotionEvent arg0) {  
        return false;  
    }  
} 

代碼中進(jìn)行了豐富的注釋,就不再進(jìn)行解釋了,這里覆寫(xiě)了onTouchEvent方法,結(jié)合這個(gè)方法進(jìn)行左劃和右劃的判斷,要注意。

2.activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    android:orientation="vertical" >    
    <ViewFlipper    
        android:id="@+id/viewflipper"    
        android:layout_width="fill_parent"    
        android:layout_height="fill_parent"/>    
</LinearLayout>  

下面是四個(gè)動(dòng)畫(huà)文件,很簡(jiǎn)單.

1.push_left_in.xml:(實(shí)現(xiàn)位移和漸變動(dòng)畫(huà))

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android" >      
    <translate      
        android:duration="1500"      
        android:fromXDelta="100%p"      
        android:toXDelta="0" />  <!-- 位移   -->  
    <alpha      
        android:duration="1500"      
        android:fromAlpha="0.1"      
        android:toAlpha="1.0" /> <!-- 漸變    -->  
</set>   

2.push_left_out.xml:(位移和漸變動(dòng)畫(huà))

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android" >      
    <translate      
        android:duration="1500"      
        android:fromXDelta="0"      
        android:toXDelta="-100%p" />      
    <alpha      
        android:duration="1500"      
        android:fromAlpha="1.0"      
        android:toAlpha="0.1" />      
</set>  

3.push_right_in.xml:

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android" >      
    <translate      
        android:duration="1500"      
        android:fromXDelta="-100%p"      
        android:toXDelta="0" />      
    <alpha      
        android:duration="1500"      
        android:fromAlpha="0.1"      
        android:toAlpha="1.0" />      
</set> 

4.push_right_out.xml

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android" >      
    <translate      
        android:duration="1500"      
        android:fromXDelta="0"      
        android:toXDelta="100%p" />      
    <alpha      
        android:duration="1500"      
        android:fromAlpha="1.0"      
        android:toAlpha="0.1" />      
</set>

運(yùn)行實(shí)例如下:

這里寫(xiě)圖片描述

總結(jié)

Android sdk提供了GestureDetector(Gesture:手勢(shì)Detector:識(shí)別)類,通過(guò)這個(gè)類可以識(shí)別很多的手勢(shì),主要是通過(guò)他的onTouchEvent(event)方法完成了不同手勢(shì)的識(shí)別。

GestureDetector這個(gè)類對(duì)外提供了兩個(gè)接口:OnGestureListenerOnDoubleTapListener,還有一個(gè)內(nèi)部類SimpleOnGestureListener。

本程序覆寫(xiě)了OnGestureListener的onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)方法,Touch了滑動(dòng)一點(diǎn)距離后,在ACTION_UP時(shí)才會(huì)觸發(fā)。

參數(shù):

  • e1 第1個(gè)ACTION_DOWN MotionEvent 并且只有一個(gè);
  • e2 最后一個(gè)ACTION_MOVE MotionEvent ;
  • velocityX X軸上的移動(dòng)速度,像素/秒 ;
  • velocityY Y軸上的移動(dòng)速度,像素/秒.觸發(fā)條件:X軸的坐標(biāo)位移大于FLING_MIN_DISTANCE,且移動(dòng)速度大于FLING_MIN_VELOCITY個(gè)像素/秒