当前位置:   article > 正文

自定义控件扫盲-canvas_public final void rotate(float degrees, float px,

public final void rotate(float degrees, float px, float py)

 

个人公众号: ”安安安安卓“ 欢迎关注

Canvas使用

旋转

围绕指定点旋转

public final void rotate(float degrees, float px, float py) 

围绕坐标原点旋转

public void rotate(float degrees)

平移

 public void translate(float dx, float dy)

dx dy单位是像素

缩放

sx:x轴缩放的大小

sy:y轴缩放的大小

public void scale(float sx, float sy)

px:x轴的缩放点

py:y轴的缩放点

public final void scale(float sx, float sy, float px, float py)

保存和恢复

canvas.svae():保存画布

canvas.restore(): 释放画布

代码示例:

  1.  override fun onDraw(canvas: Canvas?) {
  2.         super.onDraw(canvas)
  3.         canvas?.save()//保存画布
  4.         canvas?.translate(measuredWidth/2f,measuredHeight/2f)
  5.         for (i in 0..360 step 60){
  6.             canvas?.drawCircle(100f,0f,20f,paint)
  7.             canvas?.rotate(60f)
  8.         }
  9.         canvas?.restore()//释放画布
  10.         canvas?.drawCircle(100f,100f,100f,paint)
  11.     }

本例的代码中,save和restore中间的操作将画布移动到了屏幕中央,然后围绕屏幕中央绘制了六个圆。restore后canvas状态复原,再次画圆的参考点变为了左上角,圆绘制在了左上角

代码实现效果:

 

画圆

cx:圆心x坐标

cy:圆心y坐标

radius:圆半径

public void drawCircle(float cx, float cy, float radius, @NonNull Paint paint) 

画线

startX:绘制起点x坐标

startY:绘制起点y坐标

stopX:绘制终点x坐标

stopY:绘制终点y坐标

一次绘制一条线

  1. public void drawLine(float startX, float startY, float stopX, float stopY,
  2.             @NonNull Paint paint) 

一次性绘制多条线

  1. public void drawLines(@Size(multiple = 4@NonNull float[] pts, int offset, int count,
  2.             @NonNull Paint paint)

绘制多个点的代码

  1.  override fun onDraw(canvas: Canvas?) {
  2.         super.onDraw(canvas)
  3.         canvas?.translate(measuredWidth / 2f, measuredHeight / 2f)
  4.         val lines = floatArrayOf(-200f, 200f, 200f, 200f, 200f, -200f, -200f, -200f)
  5.         canvas?.drawLines(lines, paint)
  6.     }

这段代码的效果就是,绘制两条线:

第一条: (-200,200)--(200,200),

第二条线:(200,-200)--(-200,-200)

绘制效果

画椭圆

画椭圆需要构建一个RectF对象

  1. RectF oval = new RectF(150200500400);// 画一个椭圆  
  2. canvas.drawOval(oval, p);

画弧形

api

  1. public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,
  2.             @NonNull Paint paint)

绘制代码

  1.  val oval = RectF(200f, 200f, 500f, 500f)
  2.     override fun onDraw(canvas: Canvas?) {
  3.         super.onDraw(canvas)
  4.         canvas?.drawArc(oval, 0f, 120f, false, paint)
  5.         canvas?.translate(0f,400f)
  6.         canvas?.drawArc(oval, 0f, 120f, true, paint)
  7.     }

绘制效果

画矩形

api

 public void drawRect(float left, float top, float right, float bottom, @NonNull Paint paint) 
 public void drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint)

绘制代码

  1. override fun onDraw(canvas: Canvas?) {
  2.         super.onDraw(canvas)
  3.         canvas?.apply {
  4.             drawRect(rect, paint)
  5.             translate(0f,500f)
  6.             drawRoundRect(rect,60f,80f,paint)
  7.         }
  8.     }

绘制效果

画多边形

通过Path绘制多边行,path篇有过介绍了

画贝塞尔曲线

通过Path绘制贝塞尔曲线,path篇有过介绍了

画点

api

绘制一个点

public void drawPoint(float x, float y, @NonNull Paint paint)

绘制多个点

  1.  public void drawPoints(@Size(multiple = 2) float[] pts, int offset, int count,
  2.             @NonNull Paint paint)

画图片

绘制图片代码

  1. override fun onDraw(canvas: Canvas?) {
  2.         super.onDraw(canvas)
  3.         canvas?.drawBitmap(bitmap, 300f300f, paint)
  4.     }

绘制效果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/711423
推荐阅读
相关标签
  

闽ICP备14008679号