欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android中怎么實(shí)現(xiàn)仿iOS側(cè)滑退出當(dāng)前界面功能

小編給大家分享一下Android中怎么實(shí)現(xiàn)仿iOS側(cè)滑退出當(dāng)前界面功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。

首先看下效果圖:

Android中怎么實(shí)現(xiàn)仿iOS側(cè)滑退出當(dāng)前界面功能

分析:

(1)要想模仿ios的這種效果,因?yàn)槲覀兺ㄟ^手指的滑動(dòng),所以這里肯定跟我們的滑動(dòng)事件有關(guān)系(onInterceptTouchEvent,onTouchEvent這兩個(gè)方法的關(guān)系,如果不清楚,請(qǐng)直接查閱事件傳遞機(jī)制原理)

(2)我們要想直接攔截我們的所有觸摸事件,我們可以在上層父級(jí)布局中進(jìn)行攔截和處理,這里我們想到了DecorView。首先我們應(yīng)該知道Activity的頂級(jí)父View是DecorView,獲取我們的DecorView也很簡(jiǎn)單

getWindow().getDecorView()

我們平時(shí)寫的那些xml布局文件都是包裹在這個(gè)DecorView中的,所以這里我們就有了一個(gè)思路:
我們可以在我們的xml布局和DecorView中間添加一個(gè)中間布局(SlidingLayout),然后所有的滑動(dòng)邏輯和滑動(dòng)沖突全部在這里面處理。

(3)比較關(guān)鍵的是:當(dāng)我們需要使用側(cè)滑動(dòng)能的Activity我們需要將它的主題設(shè)置成透明,這樣滑動(dòng)的時(shí)候就不會(huì)遮擋下面的Activity,代碼如下:

<style name="AppTheme.Slide" parent="@style/AppTheme"> 
  <!--Required--> 
  <item name="android:windowBackground">@android:color/transparent</item> 
  <item name="android:windowIsTranslucent">true</item> 
  <item name="android:windowAnimationStyle">@style/AppTheme.Slide.Animation</item> 
 </style>

(4)當(dāng)我們滑動(dòng)超過半屏的時(shí)候,退出當(dāng)前界面,否則則回退到原始位置。這里使用Scroller

下面直接上代碼進(jìn)行分析:

1)、觸摸事件的處理過程,按下的位置大于X軸的十分之一就攔截當(dāng)前事件,交給SlidingLayout的onTouchEvent處理

/** 
 * 根據(jù)手指移動(dòng)的距離判斷是否攔截觸摸事件 
 * 
 * @param ev 
 * @return 
 */ 
 @Override 
 public boolean onInterceptTouchEvent(MotionEvent ev) { 
 
  int x = (int) ev.getX(); 
  int y = (int) ev.getY(); 
  boolean mIntercept = false; 
  switch (ev.getAction()) { 
   case MotionEvent.ACTION_DOWN: 
 
    mInterceptDownX = x; 
    mLastInterceptX = x; 
    mLastInterceptY = y; 
    break; 
   case MotionEvent.ACTION_MOVE: 
 
    int moveX = x - mLastInterceptX; 
    int moveY = y - mLastInterceptY; 
    //按下的位置的X位置小于屏幕的十分之一,并且x移動(dòng)的距離大于y移動(dòng)的距離,就攔截 
    if (mInterceptDownX < (getWidth() / 10) && Math.abs(moveX) > Math.abs(moveY)) { 
     mIntercept = true; 
    } else { 
     mIntercept = false; 
    } 
    mLastInterceptX = x; 
    mLastInterceptY = y; 
 
    break; 
   case MotionEvent.ACTION_UP: //抬起的時(shí)候重置參數(shù) 
    mIntercept = false; 
    mInterceptDownX = mLastInterceptX = mLastInterceptY = 0; 
    break; 
  } 
  return mIntercept; 
 } 
 
 private int mTouchDownX; 
 private int mLastTouchX; 
 private int mLastTouchY; 
 
 @Override 
 public boolean onTouchEvent(MotionEvent event) { 
 
  boolean mConsumed = false; 
  int x = (int) event.getX(); 
  int y = (int) event.getY(); 
  switch (event.getAction()) { 
   case MotionEvent.ACTION_DOWN: 
 
    mTouchDownX = x; 
    mLastTouchX = x; 
    mLastTouchY = y; 
    break; 
   case MotionEvent.ACTION_MOVE: 
 
    int moveX = x - mLastTouchX; 
    int moveY = y - mLastTouchY; 
    if (mTouchDownX < (getWidth() / 10) && Math.abs(moveX) > Math.abs(moveY) && !mConsumed) { 
     mConsumed = true; 
    } 
    if (mConsumed) { 
     int rightMoveX = (int) (mLastTouchX - event.getX()); 
     if ((getScrollX() + rightMoveX) > 0) { //向左滑動(dòng)的時(shí)候,getScrollX()和rightMoveX都大于0,所以禁止滑動(dòng) 
      scrollTo(0, 0); 
     } else { 
      scrollBy(rightMoveX, 0); 
     } 
    } 
    mLastTouchX = x; 
    mLastTouchY = y; 
    break; 
   case MotionEvent.ACTION_UP: 
 
    mConsumed = false; 
    mTouchDownX = mLastTouchX = mLastTouchY = 0; 
    if(-getScrollX()<getWidth()/2){ //偏移量不到屏幕寬度的一般,就回到最初的位置 
     scrollBack(); 
    }else{ 
     scrollFinish(); 
    } 
    break; 
   case MotionEvent.ACTION_CANCEL: 
    mConsumed = false; 
    mTouchDownX = mLastTouchX = mLastTouchY = 0; 
    if(-getScrollX()<getWidth()/2){ //偏移量不到屏幕寬度的一般,就回到最初的位置 
     scrollBack(); 
    }else{ 
     scrollFinish(); 
    } 
    break; 
  } 
  return true; 
 }

2)、滑動(dòng)的偏移量超出屏幕的一辦,就關(guān)閉當(dāng)前界面否則回到初始位置

/** 
 * 滑動(dòng)到最初的位置 
 */ 
 private void scrollBack() { 
  int startX = getScrollX(); 
  int dx = -getScrollX(); 
  mScroller.startScroll(startX, 0, dx, 0, 300); 
  invalidate(); 
 } 
 
 /** 
 * 向右滑動(dòng)關(guān)閉 
 */ 
 private void scrollFinish(){ 
  int dx = -getScrollX() - getWidth(); 
  mScroller.startScroll(getScrollX(),0,dx,0,300); 
  invalidate(); 
 }

3)、我們可以將這些側(cè)滑處理放在我們的BaseActivity當(dāng)中,需要側(cè)滑的Activity只要繼承這個(gè)BaseActivity并且主題設(shè)置成透明就可以了

@Override 
 protected void onCreate(@Nullable Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  if(enableRightSliding()){ 
 
   SlidingLayout slidingLayout = new SlidingLayout(this); 
   slidingLayout.replaceCurrentLayout(this); 
  } 
 
 } 
 
 /** 
  * 子類重寫這個(gè)方法true:允許向右滑動(dòng),false:禁止向右滑動(dòng) 
  * @return 
  */ 
 protected boolean enableRightSliding(){ 
  return false; 
 }

以上是“Android中怎么實(shí)現(xiàn)仿iOS側(cè)滑退出當(dāng)前界面功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章標(biāo)題:Android中怎么實(shí)現(xiàn)仿iOS側(cè)滑退出當(dāng)前界面功能
網(wǎng)頁路徑:http://chinadenli.net/article22/gpdpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)移動(dòng)網(wǎng)站建設(shè)、定制網(wǎng)站用戶體驗(yàn)、微信小程序、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
加勒比东京热拍拍一区二区| 午夜小视频成人免费看| 免费观看日韩一级黄色大片| 国产成人精品99在线观看| 青草草在线视频免费视频| 中文字幕在线五月婷婷| 视频在线观看色一区二区| 少妇福利视频一区二区| 欧美乱码精品一区二区三| 97人摸人人澡人人人超碰| 老司机精品线观看86| 麻豆国产精品一区二区三区| 国产精品成人又粗又长又爽| 熟女高潮一区二区三区| 黑丝国产精品一区二区| 99久久人妻精品免费一区| 国产乱人伦精品一区二区三区四区 | 人妻内射在线二区一区| 欧美国产极品一区二区| 国产欧美日产久久婷婷| 国产一区欧美一区日本道| 亚洲精品一区三区三区| 色婷婷亚洲精品综合网| 熟女少妇一区二区三区蜜桃| 国产一二三区不卡视频| 五月综合激情婷婷丁香| 日本办公室三级在线观看| 91偷拍与自偷拍精品| 亚洲欧美日韩熟女第一页| 亚洲中文字幕高清乱码毛片 | 插进她的身体里在线观看骚| 日本男人女人干逼视频| 欧美六区视频在线观看| 国产又大又硬又粗又黄| 欧美三级大黄片免费看| 91久久精品国产一区蜜臀| 丰满人妻一二三区av| 蜜臀人妻一区二区三区| 国产成人精品国产亚洲欧洲| 午夜资源在线观看免费高清| 精品亚洲香蕉久久综合网|