自定义 View:多点触摸画笔的实现
作者:Changing Lin
- 2021 年 11 月 17 日
本文字数:1196 字
阅读完需:约 4 分钟
1.知识点
View.onTouchEvent 方法中的 MotionEvent 参数的事件类型对比
Paint.setStrokeCap 方法是什么意思
Paint.setStrokeJoin 方法是什么意思
2.原理
未完待续,此处会有一个表格,对比各个 ActionMasked 的差异
3.代码
package com.besmart.components;
import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.util.SparseArray;import android.view.MotionEvent;import android.view.View;
import androidx.annotation.Nullable;
public class TestView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
SparseArray<Path> paths = new SparseArray<>();
public TestView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); }
{ paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(Util.dp2px(4)); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeJoin(Paint.Join.ROUND); }
@Override protected void onDraw(Canvas canvas) { for (int i = 0; i < paths.size(); i++) { Path path = paths.valueAt(i); canvas.drawPath(path, paint); } }
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()){ case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: int actionIndex = event.getActionIndex(); int pointerId = event.getPointerId(actionIndex); Path path = new Path(); path.reset(); path.moveTo(event.getX(actionIndex), event.getY(actionIndex)); paths.append(pointerId, path); break; case MotionEvent.ACTION_MOVE: for (int i = 0; i < event.getPointerCount(); i++) { pointerId = event.getPointerId(i); path = paths.get(pointerId); path.lineTo(event.getX(i), event.getY(i)); } invalidate(); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: actionIndex = event.getActionIndex(); pointerId = event.getPointerId(actionIndex); paths.remove(pointerId); invalidate(); break; } return true; }}复制代码
划线
评论
复制
发布于: 2 小时前阅读数: 4
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3ea54b45d04545ff6dcb34f9】。文章转载请联系作者。
Changing Lin
关注
获得机遇的手段远超于固有常规之上~ 2020.04.29 加入
我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。











评论