多点触控
Action
通过MotionEvent的getActionMasked()获取支持多点触控的action
动作 | 说明 |
---|---|
MotionEvent.ACTION_DOWN | 手指按下 |
MotionEvent.ACTION_MOVE | 手指移动 |
MotionEvent.ACTION_UP | 手指抬起 |
MotionEvent.ACTION_CANCEL | 事件被拦截 |
MotionEvent.ACTION_OUTSIDE | 超出区域 |
MotionEvent.ACTION_POINTER_DOWN | 有非主要的手指按下(即按下之前已经有手指在屏幕上) |
MotionEvent.ACTION_POINTER_UP | 有非主要的手指抬起(即抬起之前已经有手指在屏幕上) |
触控坐标定位
方法 | 说明 |
---|---|
getActionIndex() | 获取当前手指的Index 在按下到抬起过程有可能会变化 |
getPointerId(int pointerIndex) | 传入手指的Index获取手指的唯一id 在按下到抬起过程不变 |
findPointerIndex(int pointerId) | 传入手指的唯一id 获取手指的index |
getX(int pointerIndex) | 传入手指的Index获取当前触控的x坐标 |
getY(int pointerIndex) | 传入手指的Index获取当前触控的y坐标 |
getPointerCount() | 获取在屏幕上手指的个数 |
多指滑动的处理
第一种 把旧值给活动手指
|
|
第二种 直接叠加多手指平均偏移量
|
|
第三种互不干扰
多指画图例子
拖拽
OnDragListener 拖拽view影子
ClipData 剪切板
系统服务剪切板
在系统剪贴板里只存在一个,当另一个clip对象进来时,前一个clip对象会消失。
简单使用
例子
|
|
ViewDragHelper 拖拽view本身
方法 | 说明 |
---|---|
settleCapturedViewAt(int finalLeft, int finalTop) | onViewReleased上调用 以松手前的滑动速度为初值,让捕获到的子View自动滚动到指定位置 |
flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop) | onViewReleased上调用 以松手前的滑动速度为初值,让捕获到的子View在指定范围内fling惯性运动 |
smoothSlideViewTo(View child, int finalLeft, int finalTop) | View自动滚动到指定的位置 |
abort() | 中断动画 |
continueSettling(boolean) | 判断动画是否介素 |
使用前需要重写onInterceptTouchEvent onTouchEvent computeScroll()
示例代码