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

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

Android_UI 仿QQ側(cè)滑菜單效果的實現(xiàn)

2019-10-23 18:31:48
字體:
供稿:網(wǎng)友

相信大家對QQ側(cè)滑菜單的效果已經(jīng)不陌生了吧,側(cè)滑進入個人頭像一側(cè),進行對頭像的更改,我的收藏,QQ錢包,我的文件等一系列的操作,今天呢,主要是實現(xiàn)進入側(cè)滑菜單的這一效果原理進行分析.

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

主要思路分析

1.首先寫一個SlideMenu 繼承一個幀布局FrameLayout ,因為如果繼承自ViewGroup的話,需要我們自己來實現(xiàn)onMeasure方法,而該方法的實現(xiàn)一般比較麻煩且沒有必要,所以選擇繼承系統(tǒng)的已有的控件FrameLayout,不用其他控件是因為FrameLayout最輕量級

2.在布局文件中給SlideMenu添加2個子布局,分別是菜單的布局和主界面的布局

3.移動View的方法總結(jié)

通過改變View的scroll的坐標來移動:scrollTo(x,y);//滾動到指定位置scrollBy(xOffset,yOffset);//滾動多少距離通過改變View在父View中的布局的位置:offsetLeftAndRight(offset);//同時更改view的left和rightoffsetTopAndBottom(offset);//同時更改view的top和bottomlayout(l,t,r,b);

4.ViewDragHelper 類的介紹

谷歌在2013年I/O開發(fā)者大會上提出;

專門用于在ViewGroup中對子View進行拖拽處理;

在19(Android4.4)以及以上的v4包中;

本質(zhì)是封裝了對觸摸事件的解析,包括觸摸位置,觸摸速度以及Scroller的封裝,只需要我們在回調(diào)方法中指定是否移動,移動多少等等,但是需要注意的是:它只是一個觸摸事件的解析類(如GestureDecetor),所以需要我們傳遞給它觸摸事件,它才能工作;

開始創(chuàng)建ViewDragHelper對象

ViewDragHelper viewDragHelper = ViewDragHelper.create(this, callback);

dragHelper 只是觸摸事件的解析類,需要將觸摸事件傳遞給它才能工作

1)_觸摸事件: 將觸摸事件傳遞給VIewDragHelper 來解析

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

2)_判斷是否需要攔截觸摸事件

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

3)_初始化子view的引用

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

4)_初始化寬高.在onSizeChanged方法中初始化寬高,因為該方法在onMeasure之后執(zhí)行

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

其中這里調(diào)用getMeasureWidth() 方法與分別獲取左側(cè)菜單的寬,主頁面的寬的作用是一樣的.

實現(xiàn)ViewDragHelper.Callback 的監(jiān)聽事件

監(jiān)視view的觸摸事件,這里需要考慮到,當進行滑動的時候,可能會觸碰到listview的滑動事件,所以這里通過了getViewHorizontalDragRange()方法進行強制橫向滑動,當返回值大于0 的時候,即讓它強制橫向滑動,否則在某些情況下不能水平滑動

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

控制垂直方向的移動

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

在onViewPositionChanged()方法中實現(xiàn)一些伴隨移動的效果

此方法可以獲取view移動的距離

如果當前移動的是main ,那么就讓menu 進行伴隨移動

移動main ,并限制main的移動

根據(jù)滑動的百分比的值,去執(zhí)行伴隨的動畫 executeAnim()

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

松開手指進行回調(diào),該方法會處理手指拾起的緩慢移動

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

執(zhí)行動畫

這里考慮到了給整個SlideMenu的背景添加陰影遮罩效果,通過getBackground對是否為空時進行添加陰影遮罩效果

android,仿qq側(cè)滑菜單,qq側(cè)滑菜單

//對main的移動進行限制了 private int fixLeft(int newLeft) {    if (newLeft > maxLeft) {      newLeft = maxLeft;    } else if (newLeft < 0) {      newLeft = 0;    }    return newLeft;

需要定義接口回調(diào),將SlideMenu 打開,讓滑動和關閉的事件方法暴露

//定義接口回調(diào),將SlideMenu 打開,,滑動和關閉的事件暴露給外界  public interface onSwipeListener {    void onOpen();    void onClose();    void onDragging(float fraction); //拖拽過程中的回調(diào)  }

以上所述是小編給大家介紹的Android_UI 仿QQ側(cè)滑菜單效果的實現(xiàn),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普安县| 庆云县| 万山特区| 静宁县| 翁源县| 菏泽市| 平南县| 浦县| 乌拉特前旗| 昌邑市| 穆棱市| 丽水市| 弥勒县| 深泽县| 英山县| 常宁市| 阜平县| 大港区| 文水县| 芜湖市| 务川| 墨玉县| 开阳县| 涞水县| 高安市| 怀宁县| 珲春市| 北宁市| 思南县| 大田县| 韩城市| 桐柏县| 馆陶县| 成武县| 石阡县| 清新县| 宣城市| 额尔古纳市| 高雄市| 获嘉县| 封丘县|