Android實(shí)現(xiàn)全局右滑返回
目前Android手機(jī)的全面屏越來越盛行,很多應(yīng)用都已經(jīng)支持了右滑返回上一級(jí)頁面的功能,那么這個(gè)功能如何實(shí)現(xiàn)呢?
首先來說下思路吧,主要是通過 MotionEvent 這個(gè)事件通過對(duì)這個(gè)事件的不同處理,在通過 PointF 來監(jiān)聽按下去的點(diǎn),處于什么位置。
接下來,通過代碼給大家講解一下
顯示新建一個(gè)Gesture的這個(gè)樣一個(gè)類,用來處理,滑動(dòng)的邏輯。
public class GestureHandler {}
接下來是定義相關(guān)的一些屏幕寬高、滑動(dòng)的區(qū)間的一些表示
//屏幕寬高 int sWidth = 1280; int sHeight = 720; //按下的點(diǎn) PointF down; //Y軸滑動(dòng)的區(qū)間 float minY, maxY; //按下時(shí)的時(shí)間 long downTime; //邊緣判定距離, double margin = sWidth * 0.035; //Y軸最大區(qū)間范圍,即Y軸滑動(dòng)超出這個(gè)范圍不觸發(fā)事件 double height = sHeight * 0.2; //X軸最短滑動(dòng)距離 X軸滑動(dòng)范圍低于此值不觸發(fā)事件 double width = sWidth * 0.1; //是否處于此次滑動(dòng)事件 boolean work = false;
當(dāng)然了,這里我的屏幕是這樣子,屏幕的寬高是按照自己的實(shí)際情況的。
然后是用 PointF 來監(jiān)聽
public boolean point(PointF up) {
long upTime = System.currentTimeMillis();
float tWidth = Math.abs(down.x - up.x);
if (maxY - minY < height && tWidth > width && (upTime - downTime) / tWidth < 2.5) {
//起點(diǎn)在左邊
if (down.x < margin) {
left();//左滑需要處理的邏輯的方法
return true;
}
}
return false;
}
在定義好之后就可以使用MontionEvent,來進(jìn)行一個(gè)處理了
public boolean doEventF(MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
//記錄下按下的點(diǎn)
downTime = System.currentTimeMillis();
down = new PointF(event.getX(), event.getY());
minY = maxY = down.y;
//判定是否處于邊緣側(cè)滑
if (down.x < margin || (sWidth - down.x) < margin) work = true;
break;
case MotionEvent.ACTION_MOVE:
//記錄滑動(dòng)Y軸區(qū)間
if (work)
if (event.getY() > down.y) {
maxY = event.getY();
} else {
minY = event.getY();
}
break;
case MotionEvent.ACTION_UP:
if (work) {
handle(new PointF(event.getX(), event.getY()));
work = false;
return true;
}
work = false;
}
return work;
}
那這里是左滑退出當(dāng)前activity
public void left() {
//處理左邊緣滑動(dòng)事件,這里你可以自己寫一個(gè)ActivityUtil,用來finish當(dāng)前的activity(這個(gè)網(wǎng)上很多,隨便搜一下就有了)
}
這里處理好之后,就要思考一下了,如何能達(dá)到全局的右滑返回了,那么你就需要讓所有的activity繼承一個(gè)BaseActivity,然后再這個(gè)基類里面來處理是否需要右滑返回。
/** 手勢(shì)監(jiān)聽 */ GestureHandler mGestureHandler; /** 是否需要監(jiān)聽手勢(shì)關(guān)閉功能 */ private boolean mNeedBackGesture = false;
然后通過一個(gè)dispatchTouchEvent 來進(jìn)行一個(gè)手勢(shì)分發(fā)
@Override
public boolean dispatchTouchEvent(MotionEvent event){
//TODO Auto-generated method stub
if (mNeedBackGesture){
return mGestureHandler.doEventF(event) || super.dispatchTouchEvent(event);
}
return super.dispatchTouchEvent(event);
}
設(shè)置一個(gè)手勢(shì)監(jiān)聽,便于一些特殊的activity設(shè)置不可滑動(dòng)退出,比如首頁
public final void setNeedBackGesture(boolean mNeedBackGesture){
this.mNeedBackGesture = mNeedBackGesture;
}
那么你在使用的時(shí)候只需要再onCreate方法里面 new 一個(gè)Gesture對(duì)象就好了
如果你想在首頁做不返回,同樣在onCreate方法里面設(shè)置setNeedBackGesrure(false)就還可以了
這樣你就實(shí)現(xiàn)了一個(gè)全局的右滑返回了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- android實(shí)現(xiàn)上下左右滑動(dòng)界面布局
- Android仿微信左右滑動(dòng)點(diǎn)擊切換頁面和圖標(biāo)
- Android自定義可左右滑動(dòng)和點(diǎn)擊的折線圖
- Android實(shí)現(xiàn)九宮格橫向左右滑動(dòng)
- Android使用Photoview實(shí)現(xiàn)圖片左右滑動(dòng)及縮放功能
- Android?ViewPager實(shí)現(xiàn)左右滑動(dòng)翻頁效果
- Android手勢(shì)左右滑動(dòng)效果
- Android左右滑出菜單實(shí)例分析
- android中使用Activity實(shí)現(xiàn)監(jiān)聽手指上下左右滑動(dòng)
- 如何在Android中實(shí)現(xiàn)左右滑動(dòng)的指引效果
相關(guān)文章
Android常用三方庫(kù)混淆規(guī)則整理(小結(jié))
這篇文章主要介紹了Android常用三方庫(kù)混淆規(guī)則整理(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
android中圖片翻頁效果簡(jiǎn)單的實(shí)現(xiàn)方法
android中圖片翻頁效果簡(jiǎn)單的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-05-05
Android中WebView圖片實(shí)現(xiàn)自適應(yīng)的方法
這篇文章主要介紹了Android中WebView圖片實(shí)現(xiàn)自適應(yīng)的方法,涉及Android操作圖片顯示的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Android 驅(qū)動(dòng)編寫LED-NDK程序
這篇文章主要介紹了Android 驅(qū)動(dòng)編寫LED-NDK程序的相關(guān)資料,需要的朋友可以參考下2016-09-09
Android開發(fā)實(shí)現(xiàn)根據(jù)字母快速定位側(cè)邊欄
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)實(shí)現(xiàn)根據(jù)字母快速定位側(cè)邊欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

