ViewDragHelper的使用
Posted 技术丶从积累开始
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ViewDragHelper的使用相关的知识,希望对你有一定的参考价值。
作用:
ViewDragHelper并不是直接作用于要被拖动的View,而是使其控制的视图容器中的子View可以被拖动,如果要指定某个子view的行为,需要在Callback中想办法;
使用步骤(实现侧滑栏):
1、将ViewGroup中的点击事件都交给ViewDragHelper
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mViewDragHelper.shouldInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { mViewDragHelper.processTouchEvent(event); return true; }
2、重写ViewDragHelper.Callback,事件的回调都在Callback处理
private ViewDragHelper.Callback mCallback = new ViewDragHelper.Callback() { @Override //当松手的时候回调该方法 public void onViewReleased(View releasedChild, float xvel, float yvel) { super.onViewReleased(releasedChild, xvel, yvel); //mLinearMain.getLeft()的效果竟然与mLinearMain.getScrollX()一样 if (mLinearMain.getLeft() < 100){ //弹性滑动到0,0点 mViewDragHelper.smoothSlideViewTo(mLinearMain,0,0); } else { //弹性滑动到300,0点 mViewDragHelper.smoothSlideViewTo(mLinearMain,300,0); } Log.d(TAG,mLinearMain.getX()+""); ViewCompat.postInvalidateOnAnimation(SliderFrameLayout.this); } //是否让所点击的View移动 @Override public boolean tryCaptureView(View child, int pointerId) { boolean isMove = false; if (child == mLinearMain) isMove = true; return isMove; } //横向移动 当然还有纵向移动的方法 @Override public int clampViewPositionHorizontal(View child, int left, int dx) { return left; } };
3、因为mViewDragHelper.smoothSlideViewTo(mLinearMain,0,0);方法内部是实现了Scroller.startScroll()
所以需要调用父View的computeScroll()方法
@Override public void computeScroll() { super.computeScroll(); if (mViewDragHelper.continueSettling(true)){ //ViewCompat用于版本兼容的 ViewCompat.postInvalidateOnAnimation(this); } }
4、创建ViewDragHelper
public void initView(){ mViewDragHelper = ViewDragHelper.create(this,mCallback); }
过程中产生的问题:
1、为什么子View的getLeft()能够与getScrollX()得到是一样的
2、RelativeLayout,无法实现子类超出其Width和Height。
3、如何创建左侧滑栏的布局。查到的原理:创建HorizonSliderLayout,然后在onLayout()方法中使用scrollTo()创造的时候让侧滑栏先滑到左边去
详解:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0911/1680.html
以上是关于ViewDragHelper的使用的主要内容,如果未能解决你的问题,请参考以下文章
使用ViewDragHelper打造属于自己的DragLayout(抽屉开关 )
ViewDragHelper完全解析, 自定义ViewGroup神器