android拾遺04——手勢監聽
阿新 • • 發佈:2018-11-19
android的手勢監聽
android的手勢監聽可以監聽使用者在螢幕上的任何點選、滑動事件,然後通過基於監聽器的事件處理機制來做出響應。
開發的步驟有兩步:
- 建立手勢探測器,並進行例項化
- 為手勢探測器繫結手勢監聽器,實現處理方法
手勢的監聽器監聽且只監聽以下幾種事件:
- onDOwn 觸碰事件
- onFling 拖動事件,這個方法會獲得拖動的速度
- onLongPress 長按事件
- onScroll 滾動事件
- onShowPress 按下還未拖動或者鬆開時呼叫
- 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;
}
}
}
: