写点什么

自定义 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
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
自定义View:多点触摸画笔的实现