您好,登錄后才能下訂單哦!
這篇文章主要講解了Android如何實(shí)現(xiàn)全局右滑返回,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
目前Android手機(jī)的全面屏越來(lái)越盛行,很多應(yīng)用都已經(jīng)支持了右滑返回上一級(jí)頁(yè)面的功能,那么這個(gè)功能如何實(shí)現(xiàn)呢?
首先來(lái)說(shuō)下思路吧,主要是通過(guò) MotionEvent 這個(gè)事件通過(guò)對(duì)這個(gè)事件的不同處理,在通過(guò) PointF 來(lái)監(jiān)聽(tīng)按下去的點(diǎn),處于什么位置。
接下來(lái),通過(guò)代碼給大家講解一下
顯示新建一個(gè)Gesture的這個(gè)樣一個(gè)類(lèi),用來(lái)處理,滑動(dòng)的邏輯。
public class GestureHandler {}
接下來(lái)是定義相關(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 來(lái)監(jiān)聽(tīng)
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,來(lái)進(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)事件,這里你可以自己寫(xiě)一個(gè)ActivityUtil,用來(lái)finish當(dāng)前的activity(這個(gè)網(wǎng)上很多,隨便搜一下就有了) }
這里處理好之后,就要思考一下了,如何能達(dá)到全局的右滑返回了,那么你就需要讓所有的activity繼承一個(gè)BaseActivity,然后再這個(gè)基類(lèi)里面來(lái)處理是否需要右滑返回。
/** 手勢(shì)監(jiān)聽(tīng) */ GestureHandler mGestureHandler; /** 是否需要監(jiān)聽(tīng)手勢(shì)關(guān)閉功能 */ private boolean mNeedBackGesture = false;
然后通過(guò)一個(gè)dispatchTouchEvent 來(lái)進(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)聽(tīng),便于一些特殊的activity設(shè)置不可滑動(dòng)退出,比如首頁(yè)
public final void setNeedBackGesture(boolean mNeedBackGesture){ this.mNeedBackGesture = mNeedBackGesture; }
那么你在使用的時(shí)候只需要再onCreate方法里面 new 一個(gè)Gesture對(duì)象就好了
如果你想在首頁(yè)做不返回,同樣在onCreate方法里面設(shè)置setNeedBackGesrure(false)就還可以了
這樣你就實(shí)現(xiàn)了一個(gè)全局的右滑返回了。
看完上述內(nèi)容,是不是對(duì)Android如何實(shí)現(xiàn)全局右滑返回有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。