[安卓開發基礎] 手勢檢測GestureDetector
阿新 • • 發佈:2019-01-12
參考部落格地址:https://blog.csdn.net/yuliyige/article/details/12655895
程式碼:
相對佈局管理器,裡面新增動畫ViewFlipper。建立動畫檔案。
單擊紅色燈泡 實現 方法:
- 第一步,讓MainActivity 實現Gesturedector.OnGestureListener介面動畫ViewFlipper flipper ,Ainmation[] animation =new Animation[4];
- 定義全域性的手勢檢測器GestureDetector .
Detector =new GestureDetector(MainActivity.this,this);
- 將要顯示的圖片載入到 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