欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 使用Path实现涂鸦功能

程序员文章站 2024-02-27 15:15:03
今天实现一个涂鸦效果,会分几步实现,这里有一个重要的知识点就是图层,要理解这个,不然你看这篇博客,很迷茫,迷茫的苍茫的天涯是我的爱,先从简单的需求做起,绘制一条线,代码如下...

今天实现一个涂鸦效果,会分几步实现,这里有一个重要的知识点就是图层,要理解这个,不然你看这篇博客,很迷茫,迷茫的苍茫的天涯是我的爱,先从简单的需求做起,绘制一条线,代码如下:

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;
  }
}

效果:

Android 使用Path实现涂鸦功能

如果你不使用path的quadto()用lineto()方法也行,但是没有使用queadto()绘制出来的路径光滑,这5条路径是怎么绘制到屏幕上去的呢?上面说了图层的概念,如果不懂,可以去看下我之前写的关于canvas博客,也可以去网上看其他的博客,
我们知道每次canvas.draw...()其实都会产生新的图层,只是图层是透明的,最后隐射到画布(canvas)上,画布分析:

Android 使用Path实现涂鸦功能

以上所述是小编给大家介绍的android 使用path实现涂鸦功能,希望对大家有所帮助