1. 程式人生 > >android拾遺04——手勢監聽

android拾遺04——手勢監聽

android的手勢監聽

android的手勢監聽可以監聽使用者在螢幕上的任何點選、滑動事件,然後通過基於監聽器的事件處理機制來做出響應。
開發的步驟有兩步:

  1. 建立手勢探測器,並進行例項化
  2. 為手勢探測器繫結手勢監聽器,實現處理方法

手勢的監聽器監聽且只監聽以下幾種事件:

  1. onDOwn 觸碰事件
  2. onFling 拖動事件,這個方法會獲得拖動的速度
  3. onLongPress 長按事件
  4. onScroll 滾動事件
  5. onShowPress 按下還未拖動或者鬆開時呼叫
  6. onSingleTapUp 輕觸事件

程式碼示例:

package com.exe.feifei.gesture;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    //宣告手勢探測器
    GestureDetector gd;
    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //例項化手勢探測器的同時就是在為手勢探測器繫結監聽器,傳入的第一個引數是當前的activity,第二個就是手勢監聽器 gd=new GestureDetector(this,new MyGestureListener()); } //在這個activity的觸控事件裡面將觸控的處理託管給手勢探測器處理
@Override public boolean onTouchEvent(MotionEvent me) { return gd.onTouchEvent(me); } //自定義手勢監聽器 class MyGestureListener implements GestureDetector.OnGestureListener { //當手指按下去的時候會呼叫,事件裡面會有按下去的座標 @Override public boolean onDown(MotionEvent arg0) { Toast.makeText(MainActivity.this,"按下去了ondown"+arg0.getX()+","+arg0.getY(),Toast.LENGTH_SHORT).show(); return false; } //長按事件處理方法一般按下去三秒才會處理事件 @Override public void onLongPress(MotionEvent e) { Toast.makeText(MainActivity.this,"長按下去了onlongpress"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show(); } //手指在螢幕上快速滑動的時候呼叫,velocityX和VelocityY分別指的是在X和Y方向上的速度 @Override public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY) { Toast.makeText(MainActivity.this,"快速滑動onfling"+e1.getX()+","+e1.getY(),Toast.LENGTH_SHORT).show(); return false; } //當手指在螢幕上拖動的整個過程中都會形成事件,所以這個會呼叫很多次,但是每次的引數值是一樣的,因為是在滑動的動作做完之後才會觸發 @Override public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) { Toast.makeText(MainActivity.this,"滾動onscroll"+e1.getX()+","+e1.getY(),Toast.LENGTH_SHORT).show(); return false; } //每次按下去但是沒有馬上擡起來就會呼叫,和輕觸相區別,測試估計每次兩秒才相應 @Override public void onShowPress(MotionEvent e) { Toast.makeText(MainActivity.this,"點選onshowpress"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show(); } //輕觸事件,按下去在一秒甚至更短的時間內擡起就會觸發 @Override public boolean onSingleTapUp(MotionEvent e) { Toast.makeText(MainActivity.this,"singleTapUP"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show(); return false; } } }