Android 使用Path实现涂鸦功能
程序员文章站
2024-02-24 23:11:52
今天实现一个涂鸦效果,会分几步实现,这里有一个重要的知识点就是图层,要理解这个,不然你看这篇博客,很迷茫,迷茫的苍茫的天涯是我的爱,先从简单的需求做起,绘制一条线,代码如下...
今天实现一个涂鸦效果,会分几步实现,这里有一个重要的知识点就是图层,要理解这个,不然你看这篇博客,很迷茫,迷茫的苍茫的天涯是我的爱,先从简单的需求做起,绘制一条线,代码如下:
package com.tuya; import android.content.context; import android.graphics.canvas; import android.graphics.paint; import android.graphics.path; import android.util.attributeset; import android.view.motionevent; import android.view.view; /** * created by admin on 2016/12/16. */ public class graffitiview extends view{ private paint paint; private path path; private float downx,downy; private float tempx,tempy; public graffitiview(context context) { this(context,null); } public graffitiview(context context, attributeset attrs) { this(context, attrs,0); } public graffitiview(context context, attributeset attrs, int defstyleattr) { super(context, attrs, defstyleattr); init(); } private void init() { paint = new paint(); paint.setantialias(true); paint.setstrokewidth(10); paint.setstyle(paint.style.stroke); path = new path(); } @override protected void ondraw(canvas canvas) { super.ondraw(canvas); if(path!=null){ canvas.drawpath(path,paint); } } @override public boolean ontouchevent(motionevent event) { switch (event.getaction()){ case motionevent.action_down: downx = event.getx(); downy = event.gety(); path.moveto(downx,downy); invalidate(); tempx = downx; tempy = downy; break; case motionevent.action_move: float movex = event.getx(); float movey = event.gety(); path.quadto(tempx,tempy,movex,movey); invalidate(); tempx = movex; tempy = movey; break; } return true; } }
效果:
如果你不使用path的quadto()用lineto()方法也行,但是没有使用queadto()绘制出来的路径光滑,这5条路径是怎么绘制到屏幕上去的呢?上面说了图层的概念,如果不懂,可以去看下我之前写的关于canvas博客,也可以去网上看其他的博客,
我们知道每次canvas.draw...()其实都会产生新的图层,只是图层是透明的,最后隐射到画布(canvas)上,画布分析:
以上所述是小编给大家介绍的android 使用path实现涂鸦功能,希望对大家有所帮助