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

Android画板开发之基本画笔功能

程序员文章站 2022-04-30 22:47:02
一、简介 这是画板系列的第一篇,一步步开始,从简单的画板,到功能稍微齐全一点的画板,例如基本画笔、橡皮擦、背景、文字、撤销、反撤销、保存等 这篇带大家实现一个最简单...

一、简介

这是画板系列的第一篇,一步步开始,从简单的画板,到功能稍微齐全一点的画板,例如基本画笔、橡皮擦、背景、文字、撤销、反撤销、保存等

这篇带大家实现一个最简单的画板,前提是需要对自定义view有一定的了解。

用的是kotlin语言

Android画板开发之基本画笔功能

二、实现

分析如何实现: 定义了画笔和path,然后在触摸屏幕的时候,手指一边移动一边进行path的滑动,绘制。这就完成了一个最简单的画笔功能。

下面几十行代码完成这个

 class tpview(context: context,attr:attributeset ) : view(context,attr) {


  private var prex: float = 0.0f //上一次的触摸点x坐标
  private var prey: float = 0.0f //上一次触摸点y坐标

  var mpath = path()  //path路径

  //画笔
  private var mpaint = paint(paint.anti_alias_flag or paint.dither_flag)

  init {
    //画笔为实心
    mpaint.style = paint.style.stroke
    //颜色
    mpaint.color = color.red
    //笔触为圆形
    mpaint.strokecap = paint.cap.round
    //画笔大小
    mpaint.strokewidth = 10f
    //view的背景颜色
    setbackgroundcolor(color.white)
  }

  override fun ondraw(canvas: canvas) {
    super.ondraw(canvas)
    //画线
    canvas.drawpath(mpath,mpaint)
  }

  override fun ontouchevent(event: motionevent): boolean {

    when(event.action){
      motionevent.action_down -> { //手指按下的时候
        //将起始点移动到当前坐标
        mpath.moveto(event.x,event.y)
        //记录上次触摸的坐标,注意action_down方法只会执行一次
        prex = event.x
        prey = event.y
      }
      motionevent.action_move -> { //手指移动的时候

        //绘制圆滑曲线,即贝塞尔曲线,贝塞尔曲线这个知识自行了解
        mpath.quadto(prex,prey,event.x,event.y)

        prex = event.x
        prey = event.y
      }
    }

    //重新绘制,会调用ondraw方法
    invalidate()
    return true
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。