Android涂鸦画板原理详解——从初级到高级(一)

准备

前段时间,发布了多功能画板&开源涂鸦框架Doodle,得到了一些小伙伴的关注。但由于框架代码较多,一开始较难理解,有不少人询问了相关的实现细节。我发现不少初学者对基本的涂鸦原理不熟悉,因此我决定写一些简单的例子,用于说明最基本的的涂鸦原理,这也是多功能画板&开源涂鸦框架Doodle最核心的地方。

好的,在讲解之前,我希望小伙伴们对View的绘制流程有一定的了解,还不熟悉的同学可以先看看我之前的文章《View的绘制流程》,因为下面的涂鸦我们用到了自定义View的知识。

初级涂鸦

我们要实现最简单的涂鸦,手指在屏幕上滑动时绘制滑动轨迹。思路如下:

  1. 创建自定义View: SimpleDoodleView
  2. 使用TouchGestureDetector识别滑动手势。(TouchGestureDetector在我另一个项目Androids中,使用时需要导入依赖
  3. 将手势滑动的点记录在系统类Path中。Path可以支持贝塞尔曲线等各种图形的绘制。
  4. 在自定义View的onDraw方法中通过Canvas.drawPath()绘制记录的Path,把涂鸦轨迹绘制出来。

实现效果:

代码如下:

public class SimpleDoodleView extends View {

    private final static String TAG = "SimpleDoodleView";

    private Paint mPaint = new Paint();
    private List<Path> mPathList = new ArrayList<>(); // 保存涂鸦轨迹的集合
    private TouchGestureDetector mTouchGestureDetector; // 触摸手势监听
    private float mLastX, mLastY;
    private Path mCurrentPath; // 当前的涂鸦轨迹

    public SimpleDoodleView(Context context) {
        super(context);
        // 设置画笔
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(20);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeCap(Paint.Cap.ROUND);

        // 由手势识别器处理手势
        mTouchGestureDetector = new TouchGestureDetector(getContext(), new TouchGestureDetector.OnTouchGestureListener() {

            @Override
            public void onScrollBegin(MotionEvent e) { // 滑动开始
                Log.d(TAG, "onScrollBegin: ");
                mCurrentPath = new Path(); // 新的涂鸦
                mPathList.add(mCurrentPath); // 添加的集合中
                mCurrentPath.moveTo(e
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值