這篇文章主要講解了Android如何實現全局右滑返回,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
目前Android手機的全面屏越來越盛行,很多應用都已經支持了右滑返回上一級頁面的功能,那么這個功能如何實現呢?
首先來說下思路吧,主要是通過 MotionEvent 這個事件通過對這個事件的不同處理,在通過 PointF 來監聽按下去的點,處于什么位置。
接下來,通過代碼給大家講解一下
顯示新建一個Gesture的這個樣一個類,用來處理,滑動的邏輯。
public class GestureHandler {}接下來是定義相關的一些屏幕寬高、滑動的區間的一些表示
//屏幕寬高 int sWidth = 1280; int sHeight = 720; //按下的點 PointF down; //Y軸滑動的區間 float minY, maxY; //按下時的時間 long downTime; //邊緣判定距離, double margin = sWidth * 0.035; //Y軸最大區間范圍,即Y軸滑動超出這個范圍不觸發事件 double height = sHeight * 0.2; //X軸最短滑動距離 X軸滑動范圍低于此值不觸發事件 double width = sWidth * 0.1; //是否處于此次滑動事件 boolean work = false;
當然了,這里我的屏幕是這樣子,屏幕的寬高是按照自己的實際情況的。
然后是用 PointF 來監聽
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) {
//起點在左邊
if (down.x < margin) {
left();//左滑需要處理的邏輯的方法
return true;
}
}
return false;
}在定義好之后就可以使用MontionEvent,來進行一個處理了
public boolean doEventF(MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
//記錄下按下的點
downTime = System.currentTimeMillis();
down = new PointF(event.getX(), event.getY());
minY = maxY = down.y;
//判定是否處于邊緣側滑
if (down.x < margin || (sWidth - down.x) < margin) work = true;
break;
case MotionEvent.ACTION_MOVE:
//記錄滑動Y軸區間
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;
}那這里是左滑退出當前activity
public void left() {
//處理左邊緣滑動事件,這里你可以自己寫一個ActivityUtil,用來finish當前的activity(這個網上很多,隨便搜一下就有了)
}這里處理好之后,就要思考一下了,如何能達到全局的右滑返回了,那么你就需要讓所有的activity繼承一個BaseActivity,然后再這個基類里面來處理是否需要右滑返回。
/** 手勢監聽 */ GestureHandler mGestureHandler; /** 是否需要監聽手勢關閉功能 */ private boolean mNeedBackGesture = false;
然后通過一個dispatchTouchEvent 來進行一個手勢分發
@Override
public boolean dispatchTouchEvent(MotionEvent event){
//TODO Auto-generated method stub
if (mNeedBackGesture){
return mGestureHandler.doEventF(event) || super.dispatchTouchEvent(event);
}
return super.dispatchTouchEvent(event);
}設置一個手勢監聽,便于一些特殊的activity設置不可滑動退出,比如首頁
public final void setNeedBackGesture(boolean mNeedBackGesture){
this.mNeedBackGesture = mNeedBackGesture;
}那么你在使用的時候只需要再onCreate方法里面 new 一個Gesture對象就好了
如果你想在首頁做不返回,同樣在onCreate方法里面設置setNeedBackGesrure(false)就還可以了
這樣你就實現了一個全局的右滑返回了。
看完上述內容,是不是對Android如何實現全局右滑返回有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。