- ViewDragHelper是用来干什么的
- 我们看一下官网介绍
- 1.他是自定义ViewGroup的工具类
- 2.提供了操作和状态常量
- 3.拖放和恢复
- Callback
- Callback是ViewDragHelper的内部类
- 1.是子类父类沟通的桥梁
- 2.管理拖放的范围
- 3.为ViewDragHelper提供了事件和方法
- 具体使用
- 1.实现Callback的方法
- 2.通过ViewDragHelper.create创建对象,并传入callback
- 3.在onInterceptTouchEvent中shouldInterceptTouchEvnet
- 4.在onTouchEvent中接受 processTouchEvent(event)
- CallBack方法介绍
- 1.onViewDragStateChanged 状态改变的时候调用
- 2.onViewPositionChanged 位置改变
- 3.onViewCaptured ziView捕获
- 4.onViewReleased 释放View
- 5.onEdgeToched 边界触摸
- 6.onEdgeLock 边界锁
- 7.tryCaptureView 是否捕获是关键
- 8.clampViewPostionHorzontal/Vertical 限制水平或者垂直的距离
- 具体代码
public class DragView extends FrameLayout { private View mCurrent; private boolean b; private ViewDragHelper.Callback callback = new ViewDragHelper.Callback() { //这里是捕获的关键 @Override public boolean tryCaptureView(View child, int pointerId) { return true; } //捕获view @Override public void onViewCaptured(View capturedChild, int activePointerId) { String tag = (String) capturedChild.getTag(); switch (tag) { case "1": break; case "2": break; } } //限制水平方向 @Override public int clampViewPositionHorizontal(View child, int left, int dx) { return left; } // 限制垂直方向 @Override public int clampViewPositionVertical(View child, int top, int dy) { return top; } @Override public void onViewReleased(View releasedChild, float xvel, float yvel) { super.onViewReleased(releasedChild, xvel, yvel); // 这里是回到原来的位置 helper.settleCapturedViewAt(px / 2, py / 2); invalidate(); } }; private final int px; private final int py; @Override public void computeScroll() { // 配合回到原来的位置 if (helper.continueSettling(true)) { invalidate(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int mode = MeasureSpec.getMode(widthMeasureSpec); int sizeW = MeasureSpec.getSize(widthMeasureSpec); int sizeH = MeasureSpec.getSize(heightMeasureSpec); System.out.println(sizeH); } private final ViewDragHelper helper; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public DragView(Context context, AttributeSet attrs) { super(context, attrs); helper = ViewDragHelper.create(this, 1f, callback); Configuration configuration = context.getResources().getConfiguration(); // px = dip * density/160 int screenWidthDp = configuration.screenWidthDp; int screenHeightDp = configuration.screenHeightDp; px = screenWidthDp * configuration.densityDpi / 160; // 得到当前屏幕的密度 py = screenHeightDp * configuration.densityDpi / 160; } @Override public boolean onTouchEvent(MotionEvent event) { // 处理时间 helper.processTouchEvent(event); return true; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // helper拦截事件 return helper.shouldInterceptTouchEvent(ev); } }
ViewDragHelper使用介绍
最新推荐文章于 2024-04-08 12:02:53 发布