1. 程式人生 > >[安卓開發基礎] 手勢檢測GestureDetector

[安卓開發基礎] 手勢檢測GestureDetector

參考部落格地址:https://blog.csdn.net/yuliyige/article/details/12655895

 

程式碼:

相對佈局管理器,裡面新增動畫ViewFlipper。建立動畫檔案。

單擊紅色燈泡  實現 方法:

  1. 第一步,讓MainActivity 實現Gesturedector.OnGestureListener介面動畫ViewFlipper  flipper  ,Ainmation[]   animation =new  Animation[4];
  2. 定義全域性的手勢檢測器GestureDetector   .

        Detector  =new GestureDetector(MainActivity.this,this);

  1. 將要顯示的圖片載入到 ViewFlipper  中。並且初始化動畫。

      定義圖片資源ID 陣列:images[]

      ImageView   imageview

       Flipper.addView(imageview);

      //初始化動畫:

       animation[0]=AnimationUtils.loadAnimation();//第一個引數  this第二個引數 動畫資源。

4. onFling中通過 觸控事件的橫座標判斷向左滑動,向右滑動。

5.boolean onTouchEvent(MotionEvent event)  返回  : detector.onTouchEvent(event);

Activity 的觸控檢測 交給   detector 處理。

----------------------------------------------------------------------------------

package com.zengjx.androidbaseproject;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;

import java.security.acl.LastOwnerException;

/**
 * Created by zengjx on 2018/12/21.
 */
/**
 * 1.  第一步,讓MainActivity 實現Gesturedector.OnGestureListener介面動畫ViewFlipper  flipper  ,
 * Ainmation[]   animation =new  Animation[4];
 */
public class TouchChoosePictureActivity   extends AppCompatActivity   implements   GestureDetector.OnGestureListener {
    private    final    String    TAG="TouchChoose";

    ViewFlipper   viewFlipper;//迴圈滾動控制元件
    GestureDetector  detector;//手勢檢測
    float   distances=20;
    Animation[]  animation =  new Animation[4];
    private   int  images[]={
            R.drawable.img01,R.drawable.img02,
            R.drawable.img03,R.drawable.img04,
            R.drawable.img05,R.drawable.img06,
            R.drawable.img07,R.drawable.img08,
            R.drawable.img09,
    };



    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("TouchChoosePictureActivity");
        setContentView(R.layout.touchchoosepicture);
        setTitle("照片檢視器");
        initView();
    }
     public   void  initView(){
        //2.定義手勢檢測器
         detector =new GestureDetector(TouchChoosePictureActivity.this,this);
         viewFlipper=findViewById(R.id.viewfliper);
         //3.將要顯示的圖片顯示在viewFlipper
           for(int i=0;i<8;i++){
               ImageView   imageView  =new ImageView(this);
               imageView.setImageResource(images[i]);
               viewFlipper.addView(imageView);
           }
           //4.
            //設定動畫方式
         animation[0]= AnimationUtils.loadAnimation(this,R.anim.slide_in_left);
         animation[1]= AnimationUtils.loadAnimation(this,R.anim.slide_out_left);
         animation[2]= AnimationUtils.loadAnimation(this,R.anim.slide_in_right);
         animation[3]= AnimationUtils.loadAnimation(this,R.anim.slide_out_right);

     }
    //// 使用者輕觸觸控式螢幕,由1個MotionEvent ACTION_DOWN觸發
    @Override
    public boolean onDown(MotionEvent motionEvent) {
        Log.i(TAG,"onDown");
        return false;
    }
   //// 使用者輕觸觸控式螢幕,尚未鬆開或拖動,由一個1個MotionEvent ACTION_DOWN觸發
  // 注意和onDown()的區別,強調的是沒有鬆開或者拖動的狀態
    @Override
    public void onShowPress(MotionEvent motionEvent) {
        Log.i(TAG,"onShowPress");
    }
 //// 使用者(輕觸觸控式螢幕後)鬆開,由一個1個MotionEvent ACTION_UP觸發
    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        Log.i(TAG,"onSingleTapUp");
        return false;
    }
     //// 使用者按下觸控式螢幕,並拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發
    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        Log.i(TAG,"onScroll");
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {
        Log.i(TAG,"onLongPress");

    }
     //// 使用者按下觸控式螢幕、快速移動後鬆開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發
    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {

        Log.i(TAG,"onFling  motionEvent x:"+motionEvent.getX()+"motionEvent X"+motionEvent1.getX());
        // 右-----左
        if((motionEvent.getX()-motionEvent1.getX())>=distances){
            viewFlipper.setInAnimation(animation[2]);//right  --in   設定切換View的進入動畫
            viewFlipper.setOutAnimation(animation[3]);//  設定切換View的退出動畫
            //顯示前一張  圖片
            viewFlipper.showPrevious();//顯示ViewFlipper裡的上一個View

        }else{

            viewFlipper.setInAnimation(animation[0]);//left  --in
            viewFlipper.setOutAnimation(animation[1]);//  left  out
            //顯示一張  圖片
            viewFlipper.showNext();// 顯示ViewFlipper裡的下一個View
        }
        return false;
    }
    //第5步   Activity  手勢交給 GestureDetector   處理


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return     detector.onTouchEvent(event);
    }
}

-------------------------------

ViewFlipper