aseVelocityTracker() {?
? ? ? if(null != mVelocityTracker) {?
? ? ? ? ? mVelocityTracker.clear();?
? ? ? ? ? mVelocityTracker.recycle();?
? ? ? ? ? mVelocityTracker = null;?
? ? ? }?
? }?
? /**
? *
? *:模拟动画过程,让肉眼能看到滚动的效果
? *
? */
? class showMenuAsyncTask extends AsyncTask
? {
?
? ? ? @Override
? ? ? protected Integer doInBackground(Integer... params)
? ? ? {
? ? ? ? ? int leftMargin = menuParams.leftMargin;
? ? ? ? ? while (true)
? ? ? ? ? {// 根据传入的速度来滚动界面,当滚动到达左边界或右边界时,跳出循环。
? ? ? ? ? ? ? leftMargin += params[0];
? ? ? ? ? ? ? if (params[0] > 0 && leftMargin > 0)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? leftMargin= 0;
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? } else if (params[0] < 0 && leftMargin <-menuParams.width)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? leftMargin=-menuParams.width;
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? publishProgress(leftMargin);
? ? ? ? ? ? ? try
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? Thread.sleep(40);//休眠一下,肉眼才能看到滚动效果
? ? ? ? ? ? ? } catch (InterruptedException e)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? ? return leftMargin;
? ? ? }
? ? ? @Override
? ? ? protected void onProgressUpdate(Integer... value)
? ? ? {
? ? ? ? ? menuParams.leftMargin = value[0];
? ? ? ? ? menuLayout.setLayoutParams(menuParams);
? ? ? }
?
? ? ? @Override
? ? ? protected void onPostExecute(Integer result)
? ? ? {
? ? ? ? ? menuParams.leftMargin = result;
? ? ? ? ? menuLayout.setLayoutParams(menuParams);
? ? ? }
?
? }
}
三、原理与说明
原理 :
1、将ScrollView的触摸事件注册到LinearLayout中去。(LinearLayout中包含了ScrollView,不懂看布局)
2、首先判断手势是想要左右运动还是上下运动,如果是左右运动,那么LinearLayout得到触摸事件,即函数OnTouch返回true;如果想上下运动,即函数OnTouch返回false;
这里要注意的是,手势判断只一次,什么意思呢?就是说你第1次按下,到你一直按着,这中间只判断一次你的手势想要做的运动。
3、手指离开屏幕后,再来恢复所有的参数。
?