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

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

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

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

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

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

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進(jìn)行滾動 } // 結(jié)束加載的回調(diào) @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); } // 默認(rèn)ViewGroup只測量自身,并不測量自身的孩子 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);  // 將onMeasure中的兩個參數(shù)直接傳給兩個孩子  menu.measure(widthMeasureSpec, heightMeasureSpec);  main.measure(widthMeasureSpec, heightMeasureSpec); } // 布局 // 參數(shù)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);//相對移動   // 獲取滾動的坐標(biāo)   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();  //調(diào)用這個方法來獲取期望的滾動點,如果返回true,表示動畫還沒有執(zhí)行完成  if(mScroller.computeScrollOffset()){   //用Scroller滾動,獲取下一個期望的滾動點,滾動過去   //獲取期望點的滾動坐標(biāo)   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

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


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安康市| 临沧市| 西乌珠穆沁旗| 环江| 满洲里市| 清涧县| 诏安县| 汾阳市| 四会市| 甘德县| 大姚县| 元朗区| 东乡族自治县| 郴州市| 泽州县| 鄂伦春自治旗| 十堰市| 兰西县| 米林县| 武城县| 南康市| 清苑县| 汉源县| 施甸县| 中超| 漯河市| 通州市| 邵阳市| 富民县| 左贡县| 蒙山县| 玉林市| 连江县| 抚松县| 惠东县| 策勒县| 常州市| 汾阳市| 榆社县| 图木舒克市| 兰考县|