多点触控
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()
示例代码