• Android绘图学习(一)


    1.使用Canvas画布

    在绘制图形图像的时候,需要先准备一张画布,也就是一张白纸,我们的图像将在这张白纸上绘制出来。在Android绘制二维图形应用中,类Canvas起了这张白纸的作用,也就是画布。在绘制过程中,所有产生的界面类都需要继承于该类。可以将画布类Canvas看作是一种处理过程,能够使用各种方法来管理Bitmap、GL或者Path路径。

    Canvas():功能是创建一个空的画布,可以使用setBitmap()方法来设置绘制的具体画布。
    Canvas画布比较重要,特别是在游戏开发应用中。例如可能需要对某个精灵执行旋转、缩放等操作时,需要通过旋转画布的方式实现。但是在旋转画布时会旋转画布上的所有对象,而我们只是需要旋转其中的一个,这时就需要用到save方法来锁定需要操作的对象,在操作之后通过restore方法来解除锁定。

    2.使用paint类

    有了画布之后,还需要用一支画笔来绘制图形图像。在Android系统中,绘制二维图形图像的画笔是类Paint。类Paint的完整写法是Android.Graphics.Paint,在里面定义了画笔和画刷的属性。在类Paint中的常用方法如下所示。
    (1)void reset():实现重置功能。
    (2)void setARGB(int a, int r, int g, int b)或void setColor(int color):功能是设置Paint对象的颜色。
    (3)void setAntiAlias(boolean aa):功能是设置是否抗锯齿,此方法需要配合void setFlags (Paint.ANTI_ALIAS_FLAG)方法一起使用,来帮助消除锯齿使其边缘更平滑。
    (4)Shader setShader(Shader shader):功能是设置阴影效果,Shader类是一个矩阵对象,如果为null则清除阴影。
    (5)void setStyle(Paint.Style style):功能是设置样式,一般为Fill填充,或者STROKE凹陷效果。
    (6)void setTextSize(float textSize):功能是设置字体的大小。
    (7)void setTextAlign(Paint.Align align):功能是设置文本的对齐方式。
    (8)Typeface setTypeface(Typeface typeface):功能是设置具体的字体,通过Typeface可以加载Android内部的字体,对于中文来说一般为宋体,我们可以根据需要来自己添加部分字体,例如雅黑等。
    (9)void setUnderlineText(boolean underlineText):功能是设置是否需要下划线。

    1. package com.example.game4shape;
    2. import android.content.Context;
    3. import android.graphics.Canvas;
    4. import android.graphics.Color;
    5. import android.graphics.Paint;
    6. import android.graphics.Rect;
    7. import android.util.AttributeSet;
    8. import android.view.View;
    9. public class MyView extends View {
    10. private float x=200;
    11. private float y=200;
    12. String a="hello world,用编程治愈生活,用技术影响世界";
    13. Paint paint=new Paint();
    14. public MyView(Context context) {
    15. super(context);
    16. }
    17. public MyView(Context context, AttributeSet attrs) {
    18. super(context, attrs);
    19. }
    20. public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    21. super(context, attrs, defStyleAttr);
    22. }
    23. public void onDraw(Canvas canvas) {
    24. super.onDraw(canvas);
    25. paint.setAntiAlias(true);
    26. paint.setColor(Color.BLUE);
    27. paint.setTextSize(100);
    28. canvas.drawCircle(x,y,150, paint);
    29. canvas.drawText( a,x+200,y+400,paint);
    30. paint.setColor(Color.RED);
    31. canvas.drawRect(new Rect(15,15,150,70),paint);
    32. }
    33. }
    1. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:app="http://schemas.android.com/apk/res-auto"
    3. xmlns:tools="http://schemas.android.com/tools"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent"
    6. tools:context=".MainActivity">
    7. <com.example.game4shape.MyView
    8. android:layout_width="match_parent"
    9. android:layout_height="match_parent" />
    10. androidx.constraintlayout.widget.ConstraintLayout>

    写在最后,手机坏了,截不了图。没坏之前复习了之前的40个单词。

  • 相关阅读:
    动态代理,XML,Dom4j
    计算机视觉驾驶行为识别应用简述
    【语音识别-说话人识别】基于MFCC结合Mel频率倒谱系数实现垃圾分类附matlab代码
    react代码编译+部署完成,运行前:如何修改配置文件以改变代码中对应变量的值?
    谷粒商城14——订单支付(AliPay)
    测试开发如何设计测试用例
    CMAKE学习
    【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船
    kubernetes之资源限制及QOS服务质量
    克隆他人制定分支代码命令、提交并且提交到本地库命令
  • 原文地址:https://blog.csdn.net/qq_58259539/article/details/126092719