/*我寫(xiě)的代碼沒(méi)錯(cuò)誤吧,為什么this.smoothScrollTo(mMenuWidth,?0);不執(zhí)行呢?只能使用this.scrollTo(mMenuWidth,?0);*/ package?com.example.qqslidingmenu.view; import?android.app.Notification.Action; import?android.content.Context; import?android.provider.ContactsContract.CommonDataKinds.Event; import?android.util.AttributeSet; import?android.util.DisplayMetrics; import?android.util.Log; import?android.util.TypedValue; import?android.view.MotionEvent; import?android.view.ViewGroup; import?android.view.WindowManager; import?android.widget.HorizontalScrollView; import?android.widget.LinearLayout; public?class?SlidingMenu?extends?HorizontalScrollView?{??//這是一個(gè)自定義的viewgroup private?LinearLayout?mWapper; private?ViewGroup?mContent; private?ViewGroup?mMenu; private?int?mMenuWidth; private?boolean?once=false; private?int?mMenuRightPadding=50;//單位dp private?int?mScreenWidth; //private?int?mScreenHeigth; /*需要繼承實(shí)現(xiàn)地方法 ?*?1?onMeasure??決定其子view的寬和高?以及自己的寬和高 ?*?2?onLayout???決定子view的放置的位置 ?*?3?onTouchEvent??決定內(nèi)部view的移動(dòng)效果(如果沒(méi)有移動(dòng)效果則不需要)?? ?*/ /* ?*? ?*? 未使用自定義控件是調(diào)用 ?*/ public?SlidingMenu(Context?context,?AttributeSet?attrs)?{ super(context,?attrs); WindowManager?wm=(WindowManager)?context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics?outMetrics=new?DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics);; mScreenWidth=outMetrics.widthPixels; //把dp轉(zhuǎn)化為px???????????????????????????????????????????????????//如果這里是px的話?就是把50px轉(zhuǎn)化為dp mMenuRightPadding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,50,context.getResources().getDisplayMetrics()); } /* ?*?設(shè)置子view的寬和高和自己的寬和高 ?*/ @Override protected?void?onMeasure(int?widthMeasureSpec,?int?heightMeasureSpec)?{ if(!once) { mWapper=(LinearLayout)?getChildAt(0); mMenu=(ViewGroup)mWapper.getChildAt(0); mContent=(ViewGroup)mWapper.getChildAt(1); mMenuWidth=mMenu.getLayoutParams().width=mScreenWidth-mMenuRightPadding; mContent.getLayoutParams().width=mScreenWidth; once=true; } super.onMeasure(widthMeasureSpec,?heightMeasureSpec); } /* ?*?通過(guò)設(shè)置偏移量將menu隱藏 ?*/ @Override protected?void?onLayout(boolean?changed,?int?l,?int?t,?int?r,?int?b)?{ ????? super.onLayout(changed,?l,?t,?r,?b); ????? //判斷布局是否改變 ????? if(changed){ ????? Log.d("22222",?"進(jìn)入onLayout的Changeed"); ????? this.scrollTo(mMenuWidth,0);??//x如果為正值?滾動(dòng)條向右移動(dòng)?內(nèi)容區(qū)向左移動(dòng)? ????? ????? } } @Override public?boolean?onTouchEvent(MotionEvent?ev)?{ Log.d("22222",?"進(jìn)入onTouchEvent"); int?action=ev.getAction(); switch(action) { case?MotionEvent.ACTION_UP:? //隱藏在左邊的寬度 Log.d("22222",?"進(jìn)入MotionEvent.ACTION_UP"); int?scrollx=getScrollX(); if(scrollx?>=?mMenuWidth/2) { this.scrollTo(mMenuWidth,?0); //this.smoothScrollTo(mMenuWidth,?0); Log.d("22222",?"smoothScrollTo(mMenuWidth,?0)"); }else{ this.scrollTo(0,?0); //this.smoothScrollTo(0,?0); Log.d("22222",?"smoothScrollTo(0,?0)"); } break; default:break; } return?super.onTouchEvent(ev); } }
我寫(xiě)的代碼沒(méi)錯(cuò)誤吧,為什么this.smoothScrollTo(mMenuWidth, 0);不執(zhí)行呢?只能使用this.scrollTo(mMenuWidth, 0);
2014-10-26
你好,應(yīng)該是 return true ;請(qǐng)和視頻做下對(duì)比~