亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Android自定義實現(xiàn)側(cè)滑菜單效果

2019-10-21 21:26:16
字體:
供稿:網(wǎng)友

本文實例為大家分享了Android自定義實現(xiàn)側(cè)滑菜單的具體代碼,供大家參考,具體內(nèi)容如下

實現(xiàn)原理:繼承ViewGroup控件要顯示到界面上需要重寫OnMeature() 
OnLayout(),因此在實現(xiàn)OnLayout()的時候,將菜單界面劃出到屏幕左側(cè),動態(tài)改變菜單界面距離scrollXto()左邊界的距離就能實現(xiàn)滑動效果。

1.繼承ViewGroup
2.事件分發(fā)機制
3.狀態(tài)監(jiān)聽

在主界面中添加兩個子控件

<com.oblivion.ui.SlideMenu xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/sliding_menu"  android:layout_width="match_parent"  android:layout_height="match_parent">  <!-- 在SlidingMenu中的索引0 -->  <include layout="@layout/menu" />  <!-- 在SlidingMenu中的索引1 -->  <include layout="@layout/main" /></com.oblivion.ui.SlideMenu>

menu菜單布局

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="240dp"  android:layout_height="match_parent"  android:background="@drawable/menu_bg">  <LinearLayout    android:layout_width="240dp"    android:layout_height="wrap_content"    android:orientation="vertical">    <TextView      android:id="@+id/tv_news"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:background="@drawable/select_menu"      android:clickable="true"      android:drawableLeft="@drawable/tab_news"      android:drawablePadding="10dp"      android:text="新聞" />    <TextView      android:id="@+id/tv_read"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_read"      android:drawablePadding="10dp"      android:text="訂閱" />    <TextView      android:id="@+id/tv_local"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_local"      android:drawablePadding="10dp"      android:text="本地" />    <TextView      android:id="@+id/tv_ties"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_ties"      android:drawablePadding="10dp"      android:text="跟帖" />    <TextView      android:id="@+id/tv_pics"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_pics"      android:drawablePadding="10dp"      android:text="圖片" />    <TextView      android:id="@+id/tv_ugc"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_ugc"      android:drawablePadding="10dp"      android:text="話題" />    <TextView      android:id="@+id/tv_vote"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_vote"      android:drawablePadding="10dp"      android:text="投票" />    <TextView      android:id="@+id/tv_focus"      style="@style/menu_item"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:drawableLeft="@drawable/tab_focus"      android:drawablePadding="10dp"      android:text="焦點" />  </LinearLayout></ScrollView>

顯示界面布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@drawable/top_bar_bg"    android:orientation="horizontal">    <ImageView      android:id="@+id/iv_showmenu"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:src="@drawable/main_back" />    <View      android:layout_width="1dp"      android:layout_height="match_parent"      android:background="@drawable/top_bar_divider"></View>    <TextView      android:layout_width="match_parent"      android:layout_height="match_parent"      android:gravity="center"      android:text="新聞首頁"      android:textColor="#ffffff"      android:textSize="30sp" />  </LinearLayout>  <TextView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center_horizontal"    android:text="我操,這么low"    android:textColor="#000000"    android:textSize="20sp" /></LinearLayout>

實現(xiàn)原理:繼承ViewGroup控件要顯示到界面上需要重寫OnMeature() OnLayout(),因此在實現(xiàn)OnLayout()的時候,將菜單界面劃出到屏幕左側(cè),動態(tài)改變菜單界面距離scrollXto()左邊界的距離就能實現(xiàn)滑動效果。

實現(xiàn)onMeasure()和onLayout()方法,對控件進行布局

/**   * 測量布局中的控件   *   * @param widthMeasureSpec   * @param heightMeasureSpec   */  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    super.onMeasure(widthMeasureSpec, heightMeasureSpec);//測量自身寬高    //得到menu界面    menuView = getChildAt(0);    menuViewWidth = menuView.getLayoutParams().width;    //得到main界面    mainView = getChildAt(1);    //設(shè)定menuView的寬------不用setMeasure...    menuView.measure(MeasureSpec.makeMeasureSpec(menuViewWidth, MeasureSpec.EXACTLY), heightMeasureSpec);    //設(shè)定mainView的寬    mainView.measure(widthMeasureSpec, heightMeasureSpec);  }  @Override  protected void onLayout(boolean changed, int l, int t, int r, int b) {    int menuleft = -menuViewWidth;//menu設(shè)定的left    int menuright = 0;//menu設(shè)定的right    int menutop = 0;//menu設(shè)定的top    int menubottom = b - t;//menu設(shè)定的bottom    //布局menuView 控件xx2    menuView.layout(menuleft, menutop, menuright, menubottom);    int mainleft = 0;//main設(shè)定的left    int mainright = r - l;//main設(shè)定的right    int maintop = 0;//main設(shè)定的top    int mainbottom = b - t;//main設(shè)定的bottom    //布局mainView ---------------控件.....你媽逼方向---------方向是left,top,right,bottom    mainView.layout(mainleft, maintop, mainright, mainbottom);    System.out.println(menuViewWidth--);//原來這這里減減了;  }

通過onTouch()方法,以及scrollX()和getScrollX()方法獲取邊界值,動態(tài)改變?nèi)崿F(xiàn)滑動。 
這里需要注意的是scrollX(),getScrollX()得到的值是相對于布局起始點的,所以需要重新封裝; 
平滑動畫,需要在構(gòu)造函數(shù)中創(chuàng)建一個Scroll 類,然后通過ComplentScroll..方法,判斷設(shè)定的平滑動畫是否結(jié)束。

最后通過,動畫結(jié)束后的邊界值,判斷是否打開,關(guān)閉狀態(tài)。

 

 /**   * 由于系統(tǒng)scrollTo是取反操作,所以需要封裝一下   *   * @param distance   */  private void scrollTo(int distance) {    super.scrollTo(-distance, 0);  }  public int getMyScrollX() {    return -getScrollX();  }  /**   * 控件觸莫狀態(tài)   *   * @param event   * @return   */  @Override  public boolean onTouchEvent(MotionEvent event) {    switch (event.getAction()) {      case MotionEvent.ACTION_DOWN:        //記錄按下點        down_dot = (int) event.getX();        System.out.println(down_dot);        break;      case MotionEvent.ACTION_MOVE:        int move_dot = (int) event.getX();        //動態(tài)的移動點和按下點的間距絕對值        move2down_distance = move_dot - down_dot;        //移動間距與上次抬起的點        int lastUp_dot = move2down_distance + up_dot;        // 控制邊界        if (lastUp_dot >= menuViewWidth) {          lastUp_dot = menuViewWidth;        } else if (lastUp_dot <= 0) {          lastUp_dot = 0;        }        //設(shè)定移動后的距離        scrollTo(lastUp_dot);        break;      case MotionEvent.ACTION_UP:        //當前抬起手指點        up_dot = (int) event.getX();        //設(shè)定最終的狀態(tài)        setFinalScroll();        break;    }    return true;//將事件消費掉  }  /**   * 當手指抬起后,記錄最終的狀態(tài);   */  private void setFinalScroll() {    //得到當前距離左邊界的距離    currrentScroll = getMyScrollX();    if (currrentScroll >= menuViewWidth / 2) {      //scrollTo(menuViewWidth);      rightAnimation();    } else {      leftAnimation();    }  }  /**   * 平滑向左的移動動畫   */  private void leftAnimation() {    //scrollTo(0);    int dx = 0 - currrentScroll;//要移動的距離    //設(shè)定平滑動畫    msScroller.startScroll(currrentScroll, 0, dx, 0, 300);    invalidate();    //設(shè)定一下抬起點    up_dot = 0;    //調(diào)用接口的關(guān)閉狀態(tài)    mOnDragStateListener.onDragClose();  }  /**   * 平滑向右移動的動畫   */  private void rightAnimation() {    int dx = menuViewWidth - currrentScroll;//要移動的距離    //設(shè)定平滑動畫    msScroller.startScroll(currrentScroll, 0, dx, 0, 300);    invalidate();    //設(shè)定一下抬起點    up_dot = menuViewWidth;    //調(diào)用接口的開啟狀態(tài)    mOnDragStateListener.onDragOpen();  }  /**   * 平滑移動動畫是否結(jié)束   */  @Override  public void computeScroll() {    super.computeScroll();    if (msScroller.computeScrollOffset()) {      int currX = msScroller.getCurrX();//模擬出來的數(shù)值      scrollTo(currX);      invalidate();    }  }

創(chuàng)建監(jiān)聽,以及回調(diào)接口

 /**   * 拖拽的監(jiān)聽   */  public void setOnDragStateListener(onDragStateListener listener) {    mOnDragStateListener = listener;  }  /**   * 回調(diào)修改狀態(tài)   *   * @param dragState   */  public void setStateChange(boolean dragState) {    if (dragState) {      currrentScroll = 0;      rightAnimation();    } else {      currrentScroll = menuViewWidth;      leftAnimation();    }  }  /**   * 創(chuàng)建拖拽的回調(diào)接口   */  public interface onDragStateListener {    /**     * 被拖拽開     */    void onDragOpen();    /**     * 被關(guān)閉     */    void onDragClose();  }

主Activity中實現(xiàn)監(jiān)聽效果

iv_showmenu.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        //圖片點擊后觸發(fā)改變狀態(tài)        sliding_menu.setStateChange(dragState);      }    });    sliding_menu.setOnDragStateListener(new SlideMenu.onDragStateListener() {      @Override      public void onDragOpen() {        ToastUtils.setToast(getApplicationContext(), "open");        dragState = false;        tv_news.setSelected(true);        tv_news.setTextColor(Color.BLUE);      }      @Override      public void onDragClose() {        ToastUtils.setToast(getApplicationContext(), "close");        dragState = true;        tv_news.setSelected(false);        tv_news.setTextColor(Color.WHITE);      }    });    tv_news.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        ToastUtils.setToast(getApplicationContext(), tv_news.getText().toString());      }    });  }

github源碼地址

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
综合av第一页| 日韩欧美视频一区二区三区| 在线观看免费成人| 免费av片在线观看一道本| 99在线精品一区二区三区| www国产成人免费观看视频 深夜成人网| 亚洲看片一区| 久久色免费在线视频| 在线视频福利一区| 一级做a爰片久久毛片美女图片| 免费看美女隐私的视频| 男人捅女人免费视频| 欧美日韩在线视频免费| 欧美在线观看视频在线| chinese麻豆新拍video| 米奇777在线影院线| 99色精品视频| 欧美午夜精品久久久久久蜜| 久久国产色av| 3d性欧美动漫精品xxxx软件| 亚洲成人黄色av| 国产主播福利在线| 国产av一区二区三区精品| 欧美做受高潮1| 狠狠干夜夜草| 巨乳女教师的诱惑| 尤物影院在线播放| 欧美三级午夜理伦三级老人| 国产亚洲欧美日韩日本| 国产一区二区三区视频免费| 欧美日韩中文字幕一区二区| 国产精品福利网站| 国产系列第一页| 全国精品久久少妇| 久久99伊人| а天堂中文最新一区二区三区| 波多野结衣家庭教师视频| 影音先锋久久久| 日韩av在线天堂网| 日韩精品一区二区三区中文不卡| 国产无遮挡呻吟娇喘视频| 狠狠色丁香九九婷婷综合五月| av在线电影播放| 午夜精品久久久久久久男人的天堂| 国产精品一二三四区| xxxxx性| 日韩特级毛片| 今天免费高清在线观看国语| 天堂免费视频| 国产无套精品一区二区| 久久久久国产免费免费| 免费日韩电影| 欧美一卡二卡| 久久久久久久久久久一区| 在线丨暗呦小u女国产精品| 国产精品99久久99久久久| 毛片免费视频| 亚洲欧洲成人精品av97| 亚洲综合在线视频| 中文字幕亚洲欧美日韩| 国产成人在线一区| 亚洲视频电影图片偷拍一区| 丰满人妻老熟妇伦人精品| eeuss鲁片一区二区三区在线观看| 中文天堂资源在线| 欧美伊人久久大香线蕉综合69| 手机看片福利在线| 久久天天躁狠狠躁夜夜爽蜜月| www.蜜桃av.com| 四季av一区二区三区免费观看| 国产欧美一区二区三区另类精品| 99久久激情视频| 亚洲伊人一本大道中文字幕| 婷婷丁香综合| 欧美a在线看| 亚洲精品.www| 免费观看的黄色网址| 亚洲精品美女久久久| 国产日韩欧美电影在线观看| 久久久久久久高清| 日本在线成人一区二区| 国产精品久久久久久av福利软件| 久久99精品久久久久久欧洲站| 久热中文字幕在线精品免费| 国产精品免费久久| 欧美日本成人| 色综合久久中文字幕| 亚洲婷婷在线视频| 韩曰欧美视频免费观看| 久久久久中文字幕| 精品国产乱码久久久久久蜜柚| 中文在线资源观看视频网站免费不卡| 免费在线视频一级不卡| 国产精品老熟女一区二区| 免费一级全黄少妇性色生活片| 日韩欧美一级精品久久| 77导航福利在线| 久久一卡二卡| 欧美图片自拍偷拍| 孩娇小videos精品| 亚洲天堂一区二区三区四区| 中文字幕区一区二区三| 日韩精品免费一区二区在线观看| 免费看a级黄色片| 人成在线免费网站| 国产精品h在线观看| 国产高清自产拍av在线| 国产人成精品一区二区三| 欧美二区三区的天堂| jizzjizz亚洲| 久久久久久久久久码影片| 日韩影片在线观看| 国产成人精品一区二区三区视频| 在线观看精品国产| 在线观看日产精品| 国产丝袜视频在线播放| 毛茸茸free性熟hd| 日本二区视频| 亚洲做受高潮无遮挡| 午夜免费在线| 视频在线观看一区| 色呦呦在线观看视频| 国产精品国产三级国产专区52| 欧美做爰性生交视频| 久久久成人av| 亚洲精品无码久久久久久久| 欧美成a人片免费观看久久五月天| 风韵丰满熟妇啪啪区老熟熟女| 一级在线免费观看| 亚洲免费黄色| 天天综合久久综合| 精品无码国产一区二区三区av| 色婷婷久久综合| 久久成人av| 一个人免费观看视频www在线播放| 欧美r级电影在线观看| 美女胸又www又黄的网站| 无码aⅴ精品一区二区三区| 亚洲欧美日本另类| 久久亚洲资源中文字| 日韩一二三区不卡| 日韩一区二区三区色| 美女免费观看一区二区三区| av大片免费在线观看| 成人精品视频99在线观看免费| 国产欧美久久久精品免费| 成人免费视频一区二区| 精品毛片免费观看| 国产图片一区| 国产精品综合久久久久久| 全亚洲最色的网站在线观看| 91视频免费观看| 久久影院朴妮唛| 精品不卡一区二区| 好看的黄色网址| 欧美交换国产一区内射| 亚洲欧洲久久久| 欧美在线观看一二区| 1234区中文字幕在线观看| 久久偷窥视频| 欧美午夜视频在线观看| 亚洲最大福利网| 国产视频一区二区三| 99精品一区二区| 影音先锋男人的网站| 日韩三级av高清片| 亚洲大片免费观看| 综合在线视频| 91精品啪在线观看国产手机| 北条麻妃在线观看视频| 男人操女人动态图| 国产精品中文字幕一区二区三区| 亚洲最好看的视频| 色狠狠色噜噜噜综合网| 久久夜色精品亚洲噜噜国产mv| 可以在线观看av的网站| 色天天综合色天天久久| 福利二区91精品bt7086| 伊人国产精品| 久久综合入口| 午夜精品影视国产一区在线麻豆| 亚洲视频一区二区在线| 国产精品国产三级国产普通话对白| 日本视频一区二区| 蜜桃精品wwwmitaows| 日干夜干天天干| 国产精品调教| jizzjizz韩国| 国产喷水吹潮视频www| 综合欧美视频一区二区三区| 日韩av新片网| 成人91免费视频| 欧美成人网在线| 亚洲盗摄视频| 欧美中文在线字幕| 久久99久久99精品免视看婷婷| 看**视频a级毛片| 日本在线不卡一区| 国产破处视频在线观看| 欧洲亚洲在线视频| 成视频年人免费看黄网站| 无套内谢丰满少妇中文字幕| 免费vip影院| 久久精品国产色蜜蜜麻豆| 美女扒开内裤让男人桶| 亚洲男人在线天堂| 亚洲欧洲另类国产综合| 国产www免费观看| 免费在线日韩av| 丁香六月激情综合| 日韩欧美一区二区三区免费看| 日韩色视频在线观看| 久久本道综合色狠狠五月| 国内精品写真在线观看| 亚洲靠逼com| 成年人免费视频播放| 国产一级激情| 免费男女羞羞的视频网站中文版| 成人黄色免费观看| 成人毛片在线免费观看| 中文字幕xxx| 伊人夜夜躁av伊人久久| 欧美视频二区| 国产精品久久久久久久久久东京| 亚洲av无码乱码在线观看性色| 一级性生活免费视频| 久久网一区二区| 爱啪啪综合导航| 伊人狠狠色j香婷婷综合| 亚洲最新在线| 亚洲精品国产精品乱码| 国产小视频在线观看| 99久久亚洲一区二区三区青草| 偷拍精品一区二区三区| 欧美性xxxx极品高清hd直播| 色综合久久精品| 日本一区免费观看| 日本成人精品视频| 国产亚洲精品久久久久久移动网络| 日本视频精品一区| 久草在线资源福利| www.男人的天堂.com| 2021亚洲天堂| 在线视频欧美区| 日韩不卡一二三| a4yy在线播放免费观看视频| 国产黄色网址在线观看| 日韩亚洲国产精品| 国产精品久久久久久| 68精品国产免费久久久久久婷婷| 久久精品亚洲一区| 秋霞影院午夜丰满少妇在线视频| 国产美女无遮挡永久免费| 国产精品久久久久毛片软件| 肉色欧美久久久久久久免费看| 日本欧洲一区| 日韩一区二区三区在线免费观看| 91久久久久久久久久久久久| 国产精品无码午夜福利| 亚欧视频在线观看| 麻豆精品在线视频| 久久久久成人网| 五月天国产一区| 国产精品一区二区入口九绯色| 韩国三级hd中文字幕| 亚洲精品一区二区三区在线| 亚洲婷婷在线| 国产精品男人的天堂| 欧美亚洲一级二级| 美女一区二区三区| 97热在线精品视频在线观看| 欧亚洲嫩模精品一区三区| 国产日产精品一区二区三区四区的观看方式| 国产亚洲色婷婷久久99精品91| 手机亚洲手机国产手机日韩| 亚洲一级片免费观看| 国产日韩欧美在线播放不卡| 成人午夜影视| 久久99高清| 欧美激情在线免费观看| 国产aaaaaaaaa| 中文字幕在线播放不卡一区| 欧美军人男男激情gay| 99久久久精品| 久久婷婷综合国产| 亚洲香肠在线观看| 欧美伦理免费在线| 国产精品久久a| 国产大学生自拍视频| 亚洲91精品| 91老司机福利 在线| 久草免费福利视频| 国产剧情演绎av| 欧美 亚洲 视频| 性做久久久久久久久久| 日韩一区二区三区视频在线| 999久久久免费精品国产| 中出视频在线观看| 久久久免费av| 在线国产中文字幕| 色呦呦免费观看| 漂亮人妻被中出中文字幕| 久久精品一级爱片| 日韩免费观看一区二区| 久草在线视频资源| 亚洲最新视频在线播放| 6080yy精品一区二区三区| 国内精品卡一卡二卡三新区| 亚洲人成网站77777在线观看| 中文字幕免费在线看线人动作大片| 国产精品嫩草影院8vv8| 精品国产免费一区二区三区四区| 在线观看成人动漫| 国产片侵犯亲女视频播放| 国产在线观看91一区二区三区| 亚洲黄网在线观看| 亚洲国产精彩中文乱码av| 无码人妻一区二区三区一| 日韩一区国产在线观看| 欧美日韩免费在线视频| 一区二区三区中文在线观看| 亚洲柠檬福利资源导航| 久久网这里都是精品| 国产精品扒开腿爽爽爽视频| 天天色天天操天天射| 亚洲av成人片色在线观看高潮| www.四虎精品| 97碰碰碰免费色视频|