国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android仿微信右滑返回功能的實(shí)例代碼

2019-10-22 18:26:50
字體:
供稿:網(wǎng)友

先上效果圖,如下:

android,微信右滑返回

先分析一下功能的主要技術(shù)點(diǎn),右滑即手勢(shì)判斷,當(dāng)滑到一直距離時(shí)才執(zhí)行返回,并且手指按下的位置是在屏幕的最左邊(這個(gè)也是有一定范圍的),  這些可以實(shí)現(xiàn)onTouchEvent來實(shí)現(xiàn)。 接著就是返回時(shí),有滑動(dòng)效果,很顯然這個(gè)是Acitivty切換動(dòng)畫實(shí)現(xiàn)的。好啦,分析完了就開干。下面上代碼:

@Override public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()){   case MotionEvent.ACTION_DOWN:    x=event.getX();    y=event.getY();//    Log.e("ACTION_DOWN","x="+x);    break;   case MotionEvent.ACTION_MOVE:    float mX = event.getX();    float mY = event.getY();    float dX = Math.abs(mX-x);    float dY = Math.abs(mY-y);    scollX = mX-x;    if (isScroll && scollX>0){     view.scrollTo(-(int) scollX,0);    }    break;   case MotionEvent.ACTION_UP:    if (isScroll && scollX>300){     finish();     overridePendingTransition(R.anim.bga_sbl_activity_backward_enter,R.anim.bga_sbl_activity_backward_exit);    }else {     isScroll = false;     view.scrollTo(0,0);    }    break;  }  return false; }

這段代碼主要是實(shí)現(xiàn)了 手指在屏幕上滑動(dòng)時(shí),判斷方向是否是右滑,是的話就用scrollTo()來實(shí)現(xiàn)Activity的滑動(dòng),當(dāng)滑動(dòng)超過300px時(shí)就執(zhí)行返回,并且加上切換動(dòng)畫。看到這里細(xì)心的朋友應(yīng)該會(huì)發(fā)現(xiàn)scrollTo()方法滑動(dòng)的只是內(nèi)容,并不是View的本身,那是怎么實(shí)現(xiàn)整個(gè)activity的滑動(dòng)的呢?沒錯(cuò),如果只是上面這部分代碼,當(dāng)你滑動(dòng)時(shí),是看不懂上一個(gè)界面的內(nèi)容的,因?yàn)槲覀兊腣iew還在,這里說一下這個(gè)View是我獲取的activity的根布局。好啦,既然是這個(gè)View擋住了我們的的上一層布局,那么是不是只要讓它透明就可以了呢?答案是肯定的,我記得要讓根布局透明只需要改一下主題即可,如下:

<!-- 用于開啟滑動(dòng)返回功能的 Activity --><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowIsTranslucent">true</item>

只需要把上面兩行代碼添加到你的主題中即可。

感覺已經(jīng)大功告成了,其實(shí)不是的,前面我們說了,當(dāng)手指從屏幕的最左邊向右滑時(shí),才實(shí)發(fā)滑動(dòng),這個(gè)就涉及到事件分發(fā)了。比如我們一個(gè)按鈕的寬占滿全屏,那當(dāng)我們手指在按鈕的最左側(cè)按下時(shí),是執(zhí)行點(diǎn)擊事件還是執(zhí)行滑動(dòng)呢?這個(gè)時(shí)候就需要用到dispatchTouchEvent來處理這個(gè)問題。下面看代碼:

@Override public boolean dispatchTouchEvent(MotionEvent ev) {  if (ev.getAction()==MotionEvent.ACTION_DOWN){   float x = ev.getX();//   Log.e("dispatchTouchEvent","x="+x);   if (x<=50&&isCanScroll){    isScroll = true;    return true;   }  }  return super.dispatchTouchEvent(ev); }

上面的代碼是當(dāng)我們的手指在屏幕最左側(cè)按下時(shí),如果小于50(這個(gè)數(shù)值可以根據(jù)需求自己設(shè)置),我們就認(rèn)為用戶需要右滑,于是,我們就消費(fèi)掉,不往下一層傳遞。

當(dāng)沒有小于50時(shí),正常執(zhí)行。

整個(gè)流程已經(jīng)講完了,是不是很簡(jiǎn)單!這些代碼最好放到Activity基類中實(shí)現(xiàn)!這樣方便管理!

總結(jié)

以上所述是小編給大家介紹的Android仿微信右滑返回功能的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 诸城市| 茶陵县| 洛川县| 专栏| 兴安县| 宁德市| 墨脱县| 遂平县| 泾川县| 天长市| 南川市| 曲阳县| 武宁县| 鱼台县| 定襄县| 富阳市| 远安县| 周宁县| 怀来县| 石泉县| 北海市| 宁海县| 山丹县| 南丹县| 锡林浩特市| 长岛县| 新民市| 建始县| 汤原县| 福建省| 开化县| 本溪| 贡嘎县| 吉安县| 修文县| 鄂托克前旗| 儋州市| 原阳县| 儋州市| 昌图县| 中卫市|