Android開發之手勢滑動(滑動手勢監聽)詳解

2021-10-05 02:23:17 字數 3868 閱讀 3986

android開發之手勢滑動(滑動手勢監聽)詳解

在android應用中,經常需要手勢滑動操作,比如上下滑動,或左右方向滑動,處理手勢滑動通常有兩種方法:一種是單獨實現setontouchlistener***來,另一種是構建手勢探測器

第一種方法,就是在要實現滑動的view中,實現ontouchlistener監聽事件,然後判斷keydonw和keyup 直接的位置距離來判斷滑動方向,核心實現**如下:

/** 獲取螢幕座標點 **/

point startpoint;// 起始點

point endpoint;// 終點

/** 記錄按下的座標點(起始點)**/

private float mposx = 0;

private float mposy = 0;

/** 記錄移動後抬起座標點(終點)**/

private float mcurposx = 0;

private float mcurposy = 0;

/*** 設定上下滑動作***

* @author jczmdeveloper

*/private void setgesturelistener() else if (mcurposy - mposy < 0

&& (math.abs(mcurposy - mposy) > 25))

break;

}return true;

}});

}

第二種方法:就是構建手勢探測器,如gesturedetector mygesture = new gesturedetector(this);,然後在onfling方法中根據motionevent的兩個引數的 按下和滑動以及放開的位置和距離來判斷滑動方向以及滑動速度等的。要構建gesturedetector,必須要和ontouchlistener一起使用,因為必須設定touch監聽,核心實現例項如下:
import android.content.context;

import android.util.attributeset;

import android.view.gesturedetector;

import android.view.gesturedetector.ongesturelistener;

import android.view.layoutinflater;

import android.view.motionevent;

import android.view.view;

import android.view.view.ontouchlistener;

import android.view.animation.animation;

import android.view.animation.animationutils;

import android.widget.framelayout;

import android.widget.linearlayout;

public class tagscrollview extends framelayout implements ontouchlistener, ongesturelistener

public tagscrollview(context context, attributeset attrs)

public tagscrollview(context context, attributeset attrs, int defstyle)

@override

public boolean ontouch(view v, motionevent event)

@override

public boolean ondown(motionevent e)

@override

public void onshowpress(motionevent e)

@override

public boolean onsingletapup(motionevent e)

@override

public boolean onscroll(motionevent e1, motionevent e2, float distancex,

float distancey)

@override

public void onlongpress(motionevent e)

@override

public boolean onfling(motionevent e1, motionevent e2, float velocityx,

float velocityy)

//向上

if (e2.gety() - e1.gety() > fling_min_distance

&& math.abs(velocityx) > fling_min_velocity)

return false;

} }

應用例項如下:

比如對乙個listview進行手勢滑動監聽的實現如下:

private float mposx, mposy, mcurposx, mcurposy;//記錄mlistviewdevice 滑動的位置

private static final int fling_min_distance = 20;//mlistview 滑動最小距離

private static final int fling_min_velocity = 200;//mlistview 滑動最大速度

/** * @author jczmdeveloper

* @desp mlistview 的手勢監聽

*/private ongesturelistener listviewgesturelistener = new ongesturelistener()

@override

public void onshowpress(motionevent e)

@override

public boolean onscroll(motionevent e1, motionevent e2, float distancex,

float distancey)

@override

public void onlongpress(motionevent e)

@override

public boolean onfling(motionevent e1, motionevent e2, float velocityx,

float velocityy)

}// 向下滑動

if (e2.gety() - e1.gety() > fling_min_distance

&& math.abs(velocityx) > fling_min_velocity)

return false;

}@override

public boolean ondown(motionevent e)

};/**

* @author jczmdeveloper

* @desp mlistview 的手勢探測器

*/gesturedetector listviewgesture = new gesturedetector(listviewgesturelistener);

/*** @author jczmdeveloper

* @desp mlistview 的觸控監聽

*/private ontouchlistener listviewontouchlistener = new ontouchlistener()

};

android 滑動手勢的監聽

之前開發中有滑動監聽的需求,進行了查詢學習,今天專案中有用到,貼出來分享給有需要的小夥伴,廢話不多說直接貼 float mposx 0 float mposy 0 float mcurposx 0 float mcurposy 0 findviewbyid r.id.ll bottom setont...

Android滑動手勢偵測方法介紹

android滑動手勢偵測方法介紹 51cto.com android sdk提供了乙個listener類來偵測各種不同的手勢 ongesturelistener.你只需要實現自己所關心的手勢就可以了.swipe在android裡面是叫fling 首先建立自己的乙個手勢detector類 class...

Android學習筆記(手勢識別器,左右滑動)

目標 手勢左右滑動,實現左右翻頁。步驟 重寫手勢判斷事件 利用手勢識別器 gesturedetector override public boolean ontouchevent motionevent event gesturedetector mdetector new gesturedetec...