记录Android中使用ViewDragHelper实现拖动View滑动的方法
16lz
2021-01-25
ViewDragHelper通常是在一个ViewGroup内部使用。使用步骤如下:
1.初始化ViewDragHelper:在一个自定义的ViewGroup里面(暂且命名为TestViewGroup),通过ViewDragHelper静态工厂方法初始化。
ViewDragHelper viewDragHelper = ViewDragHelper.create(TestViewGroup.this,callback);
这里需要一个ViewDragHelper.Callback
private ViewDragHelper.Callback callback = new ViewDragHelper.Callback() { //何时开始检测触摸事件 @Override public boolean tryCaptureView(@NonNull View child, int pointerId) { //这里可以设置一个条件,返回该条件的结果 //当该条件结果为true时,开始检测触摸事件 return true; } //处理水平滑动 @Override public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) { return left; } //处理垂直滑动 @Override public int clampViewPositionVertical(@NonNull View child, int top, int dy) { return top; } //拖动结束手指释放后 @Override public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { super.onViewReleased(releasedChild, xvel, yvel); //这里进行的是让view返回原点的操作 mViewDragHelper.smoothSlideViewTo(mChildView, 0, 0); ViewCompat.postInvalidateOnAnimation(TestViewGroup.this); }};
2.重写事件拦截方法,将事件传递给ViewDragHelper处理。代码如下:
@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) { return mViewDragHelper.shouldInterceptTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent event) { //这里必须将触摸事件传递给ViewDragHelper mViewDragHelper.processTouchEvent(event); return true;}
3.处理computeScroll(),代码模板如下:
@Overridepublic void computeScroll() { super.computeScroll(); if (mViewDragHelper.continueSettling(true)) { ViewCompat.postInvalidateOnAnimation(TestViewGroup.this); }}
4.处理1中callback中对应的方法。详见1中注解
5.获取一下子view以对其进行操作
@Overrideprotected void onFinishInflate() { super.onFinishInflate(); mChildView = getChildAt(0);}
6.相关xml布局
更多相关文章
- 分支和循环(二)(零基础学习C语言)
- android之退出应用程序
- weex和Android的交互
- Android动画点击不运行
- android 保存 用户名和密码 设置等应用信息优化
- 【Dialer】自定义暗码进入测试模式
- Android(安卓)-- 基础
- Android监听UEvent事件log应用程序
- Android(安卓)四大组件 - 进程的 fork 创建过程