/*我写的代码没错误吧,为什么this.smoothScrollTo(mMenuWidth, 0);不执行呢?只能使用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 { //这是一个自定义的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; /*需要继承实现地方法 * 1 onMeasure 决定其子view的宽和高 以及自己的宽和高 * 2 onLayout 决定子view的放置的位置 * 3 onTouchEvent 决定内部view的移动效果(如果没有移动效果则不需要) */ /* * * 未使用自定义控件是调用 */ 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转化为px //如果这里是px的话 就是把50px转化为dp mMenuRightPadding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,50,context.getResources().getDisplayMetrics()); } /* * 设置子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); } /* * 通过设置偏移量将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", "进入onLayout的Changeed"); this.scrollTo(mMenuWidth,0); //x如果为正值 滚动条向右移动 内容区向左移动 } } @Override public boolean onTouchEvent(MotionEvent ev) { Log.d("22222", "进入onTouchEvent"); int action=ev.getAction(); switch(action) { case MotionEvent.ACTION_UP: //隐藏在左边的宽度 Log.d("22222", "进入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); } }
我写的代码没错误吧,为什么this.smoothScrollTo(mMenuWidth, 0);不执行呢?只能使用this.scrollTo(mMenuWidth, 0);