? ? ? 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);
? ? ? }
?
? }
}
三、效果与说明
侧滑菜单在很多应用中都会见到,其实实现起来原理非常简单,只不过是要有一大堆的判断,你要判断手指移动的距离和方向,还要判断手指移动的速度。所以代码写出来可能有点儿多,但是原理了解了就不难了。另外,为了滚动效果肉眼可以看到,加了个showMenuAsyncTask类,它在滚动视图的过程中,每sleep(40)然后再滚动,当然,这里时间还可以改到一此,效果会更加好。
