日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

绘制基础知识-canvas paint

發(fā)布時間:2023/11/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 绘制基础知识-canvas paint 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來看一下Canvas

Canvas 用來提供draw方法的調(diào)用。繪制東西需要4個基本的組建:一個bitmap用來存放像素,一個canvas用來提供draw方法的調(diào)用(往bitmap里寫入),原始繪制元素(e.g.Rect, Path, text,Bitmap), 一個paint。
看一下canvas的主要方法:

  • canvas.save()保存canvas的狀態(tài),保存之后,可以調(diào)用canvas的平移、縮放、旋轉(zhuǎn)、錯切、裁剪等操作。
  • canvas.restore();恢復canvas之前保存的狀態(tài)。
  • canvas.translate(x,y);移動坐標原點到指定位置。
  • canvas.drawArc();繪制圓弧。
  • canvas.drawText();繪制文本。
  • canvas.drawLine();繪制線段。
  • canvas.drawRect();繪制矩形。

    Paint類

    Paint 類提供繪制幾何圖形,文本,和位圖 所需要的樣式和顏色信息。
    paint的主要方法:

  • paint.setAntiAlias()抗鋸齒。

  • paint.setStrokeWidth() 設置畫筆的寬度。
  • paint.setStyle()設置空心。
  • paint.setDither()設置防抖動。
    ### HappinessView.java
public class HappinessView extends View {private static final float CIRCLE_RADIUS = 100f;private static final float faceRadiusToEyeRadiusRadio = 10f;private static final float faceRadiusToEyeOffsetRadio = 3f;private static final float faceRadiusToEyeSeparationRadio = 1.5f;private static final float faceRadiusToMouthWidthRadio = 1;private static final float faceRadiusToMouthHeightRadio = 3;private static final float faceRadiusToMouthOffsetRatio = 3;private enum Eye{ Left, Right}public HappinessView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);paint.setColor(Color.BLUE);canvas.drawCircle(100, 100, CIRCLE_RADIUS, paint);circlePathForEye(canvas, paint, Eye.Left);circlePathForEye(canvas, paint, Eye.Right);bezierPathForSmile(canvas, paint);}private void bezierPathForSmile(Canvas canvas, Paint paint) {float fractionOfMaxSmile = -1f;float mouthWidth = CIRCLE_RADIUS / faceRadiusToMouthWidthRadio;float mouthHeight = CIRCLE_RADIUS / faceRadiusToMouthHeightRadio;float mouthVerticalOffset = CIRCLE_RADIUS / faceRadiusToMouthOffsetRatio;float smileHeight = Math.max(Math.min(fractionOfMaxSmile, 1), -1) * mouthHeight;float startPointX = 100 - mouthWidth / 2;float startPointY = 100 + mouthVerticalOffset;float endPointX = startPointX + mouthWidth;float endPointY = startPointY;float point1X = startPointX + mouthWidth / 3;float point1Y = startPointY + smileHeight;float point2X = endPointX - mouthWidth / 3;float point2Y = point1Y;Path path = new Path();path.moveTo(startPointX, startPointY);path.cubicTo( point1X, point1Y, point2X, point2Y, endPointX, endPointY);canvas.drawPath(path, paint);}private void circlePathForEye(Canvas canvas, Paint paint, Eye eye){float eyeRadius = 100 / faceRadiusToEyeRadiusRadio;float eyeVerticalOffset = 100 / faceRadiusToEyeOffsetRadio;float eyeHorizontalSeparation = 100 / faceRadiusToEyeSeparationRadio;float eyeY = 100 - eyeVerticalOffset;float eyeX = 100;switch (eye) {case Left:eyeX = eyeX - eyeHorizontalSeparation / 2;break;case Right:eyeX = eyeX + eyeHorizontalSeparation / 2;break;}canvas.drawCircle(eyeX, eyeY, eyeRadius, paint);} }

一個簡單的笑臉圖形。

總結

以上是生活随笔為你收集整理的绘制基础知识-canvas paint的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。