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

首頁 > 系統 > Android > 正文

簡單仿寫Android控件SlidingMenu的實例代碼

2019-12-12 01:17:07
字體:
來源:轉載
供稿:網友

SlidingMenu (側滑菜單形式)在android開發過程中,經常用到,這次我們通過一個簡單案例來仿寫SlidingMenu 的大體功能,下面 是主要實現的代碼:

java代碼:(重寫onTouchEvent方法 處理側滑菜單處的事件分發機制)

public class SlidingMenu extends ViewGroup implements OnClickListener { private View menu; private View main; private int menuWidth; private int downX; private Scroller mScroller; private ImageView iv_back; // 加載階段,先加載自身,然后再加載孩子 public SlidingMenu(Context context, AttributeSet attrs) {  super(context, attrs);  mScroller=new Scroller(context);//聲明Scroller進行滾動 } // 結束加載的回調 @Override protected void onFinishInflate() {  super.onFinishInflate();  menu = getChildAt(0);  main = getChildAt(1);  menuWidth = menu.getLayoutParams().width;  Log.i("test", "menuWidth:" + menuWidth);  iv_back = (ImageView) findViewById(R.id.iv_back);  iv_back.setOnClickListener(this); } // 默認ViewGroup只測量自身,并不測量自身的孩子 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);  // 將onMeasure中的兩個參數直接傳給兩個孩子  menu.measure(widthMeasureSpec, heightMeasureSpec);  main.measure(widthMeasureSpec, heightMeasureSpec); } // 布局 // 參數1,2,3,4:左上右下 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {  menu.layout(-menuWidth, t, 0, b);  main.layout(l, t, r, b); } @Override public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()) {  case MotionEvent.ACTION_DOWN:   downX = (int) event.getX();   break;  case MotionEvent.ACTION_MOVE:   int moveX = (int) event.getX();   int dX = moveX - downX;   // scrollTo(x, y);//絕對移動   // scrollBy(x, y);//相對移動   // 獲取滾動的坐標   int scrollX = getScrollX();   Log.i("test", "scrollX:" + scrollX);   if (scrollX - dX >= -200 && scrollX - dX <= 0) {    scrollBy(-dX, 0);   }   downX = moveX;   break;  case MotionEvent.ACTION_UP:   int upScrollX = getScrollX();   Log.i("test", "upScrollX:"+upScrollX);   int dScrollX;   if(upScrollX>-menuWidth/2){    //收回去    dScrollX=-upScrollX;    isOpen=false;   }else{    //展開    dScrollX=-menuWidth-upScrollX;    isOpen=true;   }   Log.i("test", "dScrollX:"+dScrollX);   mScroller.startScroll(upScrollX, 0, dScrollX, 0,20*dScrollX);   //滾動后,要讓界面重繪   invalidate();   break;  default:   break;  }  return true; } @Override public void computeScroll() {  super.computeScroll();  //調用這個方法來獲取期望的滾動點,如果返回true,表示動畫還沒有執行完成  if(mScroller.computeScrollOffset()){   //用Scroller滾動,獲取下一個期望的滾動點,滾動過去   //獲取期望點的滾動坐標   int currX = mScroller.getCurrX();   scrollTo(currX, 0);   invalidate();  } } private boolean isOpen; @Override public void onClick(View v) {  switch (v.getId()) {  case R.id.iv_back:   int startX;   int dx;   if(!isOpen){    startX=0;    dx=-menuWidth;   }else{    startX=-menuWidth;    dx=menuWidth;   }   isOpen=!isOpen;   mScroller.startScroll(startX, 0, dx, 0, 2000);   invalidate();   break;  default:   break;  } }}

activity布局文件:

<mgzxc.myslidmenu.MySlidMenu  android:layout_width="match_parent"  android:layout_height="match_parent">  <include layout="@layout/menu_layout" />  <include layout="@layout/main_layout" /> </mgzxc.myslidmenu.MySlidMenu>

主界面的布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center" android:background="@android:color/holo_blue_bright" android:layout_width="match_parent" android:layout_height="match_parent">  <Button   android:id="@+id/open"   android:text="打開"   android:textSize="30sp"   android:layout_width="wrap_content"   android:layout_height="wrap_content" /></RelativeLayout>

最終效果如下:

以上這篇簡單仿寫Android控件SlidingMenu的實例代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲沃县| 孟州市| 修水县| 万全县| 合江县| 普格县| 平阴县| 南汇区| 江达县| 望奎县| 五指山市| 萨迦县| 讷河市| 茂名市| 澳门| 彩票| 天门市| 苍山县| 白玉县| 金昌市| 纳雍县| 汉源县| 长垣县| 靖宇县| 河东区| 福贡县| 长汀县| 玉林市| 多伦县| 和硕县| 扬中市| 新密市| 育儿| 公主岭市| 赫章县| 甘洛县| 鹤壁市| 讷河市| 儋州市| 沈阳市| 城步|