最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)全局右滑返回

 更新時間:2020年04月20日 09:05:13   作者:qiaaaaao代碼  
這篇文章主要為大家詳細介紹了Android實現(xiàn)全局右滑返回,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

目前Android手機的全面屏越來越盛行,很多應用都已經(jīng)支持了右滑返回上一級頁面的功能,那么這個功能如何實現(xiàn)呢?

首先來說下思路吧,主要是通過 MotionEvent 這個事件通過對這個事件的不同處理,在通過 PointF 來監(jiān)聽按下去的點,處于什么位置。

接下來,通過代碼給大家講解一下

顯示新建一個Gesture的這個樣一個類,用來處理,滑動的邏輯。

public class GestureHandler {}

接下來是定義相關(guān)的一些屏幕寬高、滑動的區(qū)間的一些表示

//屏幕寬高
int sWidth = 1280;
int sHeight = 720;
//按下的點
PointF down;
//Y軸滑動的區(qū)間
float minY, maxY;
//按下時的時間
long downTime;
//邊緣判定距離,
double margin = sWidth * 0.035;
//Y軸最大區(qū)間范圍,即Y軸滑動超出這個范圍不觸發(fā)事件
double height = sHeight * 0.2;
//X軸最短滑動距離 X軸滑動范圍低于此值不觸發(fā)事件
double width = sWidth * 0.1;
//是否處于此次滑動事件
boolean work = false;

當然了,這里我的屏幕是這樣子,屏幕的寬高是按照自己的實際情況的。

然后是用 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) {
   //起點在左邊
   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;
    //判定是否處于邊緣側(cè)滑
    if (down.x < margin || (sWidth - down.x) < margin) work = true;
    break;
   case MotionEvent.ACTION_MOVE:
    //記錄滑動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;
 }

那這里是左滑退出當前activity

public void left() {
 
  //處理左邊緣滑動事件,這里你可以自己寫一個ActivityUtil,用來finish當前的activity(這個網(wǎng)上很多,隨便搜一下就有了)
   
}

這里處理好之后,就要思考一下了,如何能達到全局的右滑返回了,那么你就需要讓所有的activity繼承一個BaseActivity,然后再這個基類里面來處理是否需要右滑返回。

/** 手勢監(jiān)聽 */
 GestureHandler mGestureHandler;
 /** 是否需要監(jiān)聽手勢關(guān)閉功能 */
 private boolean mNeedBackGesture = false;

然后通過一個dispatchTouchEvent 來進行一個手勢分發(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è)置一個手勢監(jiān)聽,便于一些特殊的activity設(shè)置不可滑動退出,比如首頁

public final void setNeedBackGesture(boolean mNeedBackGesture){
  this.mNeedBackGesture = mNeedBackGesture;
 }

那么你在使用的時候只需要再onCreate方法里面 new 一個Gesture對象就好了

如果你想在首頁做不返回,同樣在onCreate方法里面設(shè)置setNeedBackGesrure(false)就還可以了

這樣你就實現(xiàn)了一個全局的右滑返回了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

丹阳市| 石林| 始兴县| 塘沽区| 娱乐| 庄河市| 武清区| 大荔县| 班戈县| 玛曲县| 凤冈县| 奉节县| 玉环县| 镇坪县| 九龙县| 调兵山市| 瓦房店市| 宾川县| 象山县| 卓资县| 常宁市| 邯郸县| 峡江县| 墨脱县| 多伦县| 济南市| 平凉市| 抚州市| 宜宾市| 和平区| 依兰县| 铅山县| 十堰市| 贵阳市| 察哈| 松滋市| 兴义市| 高雄县| 余干县| 祁东县| 鹿邑县|