文章目录

  • 一、案例演示——使用自定义视图绘制圆
    • 1、创建安卓应用
    • 2、创建自定义视图
    • 3、主界面类
    • 4、运行程序,查看效果
      • (1)设置画笔样式
      • (2)设置画笔粗细
  • 二、案例演示——绘制文本、图形和图像
    • 1、创建安卓应用
    • 2、创建自定义视图
    • 3、主界面类
    • 4、修改自定义视图
      • (1)初始化
      • (2)设置画布底色
      • (3)绘制直线
      • (4)绘制空心多边形(三角形)
      • (5)绘制实心多边形
      • (6)绘制实心圆和空心圆
      • (7)绘制实心矩形
      • (8)绘制空心椭圆
      • (9)绘制笑脸
      • (10)绘制图像
    • 5、自定义视图完整源代码
  • 三、案例演示——View动画(闪烁满天星)
    • 1、创建安卓应用
    • 2、添加月亮图片
    • 3、创建自定义视图
    • 4、主界面类
    • 5、运行程序,查看效果

一、案例演示——使用自定义视图绘制圆

1、创建安卓应用

  • 选择模板
  • 完善项目信息

2、创建自定义视图

  • 命名为CustomView
  • 源代码
package net.zs.draw_circle;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;public class CustomView extends View {private Paint paint; // 画笔/*** 构造方法 - 初始化画笔*/public CustomView(Context context) {super(context);// 创建画笔对象paint = new Paint();// 设置画笔为红色paint.setColor(Color.RED);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 绘制一个圆canvas.drawCircle(500, 500, 450, paint);}
}

3、主界面类

  • 源代码
package net.zs.draw_circle;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {private CustomView mCustomView; // 声明自定义视图@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 实例化自定义视图mCustomView = new CustomView(this);// 将自定义视图设置为用户界面setContentView(mCustomView);}
}

4、运行程序,查看效果

(1)设置画笔样式

  • 运行结果

(2)设置画笔粗细

  • 运行结果

二、案例演示——绘制文本、图形和图像

1、创建安卓应用

  • 选择模板
  • 完善项目信息

2、创建自定义视图

  • 基础代码
package net.zs.draw_text_graph_image;import android.content.Context;
import android.graphics.Canvas;
import android.view.View;public class CustomView extends View {/*** 构造方法*/public CustomView(Context context) {super(context);}/*** 绘制方法*/@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);}
}

3、主界面类

  • 将自定义视图设置为用户界面

4、修改自定义视图

(1)初始化

(2)设置画布底色

  • 运行效果

(3)绘制直线

  • 运行效果

(4)绘制空心多边形(三角形)

  • 运行效果

(5)绘制实心多边形

  • 运行效果

(6)绘制实心圆和空心圆

  • 运行效果

(7)绘制实心矩形

  • 运行效果

(8)绘制空心椭圆

  • 运行结果

(9)绘制笑脸

  • 运行效果

(10)绘制图像

  • 添加图片到drawable目录下
  • 编写代码
  • 运行效果

5、自定义视图完整源代码

package net.zs.draw_text_graph_image;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.Toast;public class CustomView extends View {private Paint paint; // 画笔private int screenWidth; // 屏幕宽度private int screenHeight; // 屏幕高度/*** 构造方法*/public CustomView(Context context) {super(context);// 实例化画笔paint = new Paint();// 设置画笔放锯齿形paint.setAntiAlias(true);// 获取屏幕宽度screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();// 获取屏幕高度screenHeight = ((Activity) context).getWindowManager().getDefaultDisplay().getHeight();}/*** 绘制方法*/@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);/* 任务1.设置画布底色 */// 设置画笔颜色paint.setColor(Color.rgb(200, 200, 240));// 绘制实心矩形填充整个手机屏幕canvas.drawRect(0, 0, screenWidth, screenHeight, paint);/* 任务2.绘制直线 */// 设置画笔颜色为红色paint.setColor(Color.RED);// 绘制横向、纵向、倾斜的直线canvas.drawLine(50, 50, 1000, 50, paint);canvas.drawLine(50, 200, 1000, 200, paint);canvas.drawLine(100, 0, 100, 250, paint);canvas.drawLine(950, 0, 950, 250, paint);canvas.drawLine(100, 50, 950, 200, paint);canvas.drawLine(100, 200, 950, 50, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("直线", 480, 35, paint);/* 任务3.绘制空心多边形(三角形) */// 设置画笔颜色为蓝色paint.setColor(Color.BLUE);// 绘制多条线段、首尾相连canvas.drawLine(50, 350, 370, 320, paint);canvas.drawLine(370, 320, 550, 500, paint);canvas.drawLine(550, 500, 50, 350, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("空心三角形", 250, 400, paint);/* 任务4.绘制实心多边形 */// 设置画笔颜色paint.setColor(Color.YELLOW);// 定义路径Path path = new Path();path.moveTo(600, 300); // 路径的起点path.lineTo(750, 250);path.lineTo(950, 400);path.lineTo(600, 600);path.lineTo(600, 370);path.close(); // 封闭路径// 按路径绘制图像canvas.drawPath(path, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("实心多边形", 650, 400, paint);/* 任务5.绘制实心圆和空心圆 */paint.setColor(Color.RED);canvas.drawCircle(300, 600, 100, paint);paint.setStyle(Paint.Style.STROKE);canvas.drawCircle(300, 800, 100, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("实心圆", 100, 610, paint);canvas.drawText("空心圆", 100, 810, paint);/* 任务6.绘制实心矩形 */paint.setColor(Color.GREEN);paint.setStyle(Paint.Style.FILL);canvas.drawRect(new Rect(460, 650, 960, 860), paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("实心矩形", 650, 750, paint);/* 任务7.绘制空心椭圆 */paint.setColor(Color.BLUE);paint.setStyle(Paint.Style.STROKE);canvas.drawArc(new RectF(50, 920, 500, 1050), 0, 360, true, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("空心椭圆", 240, 1000, paint);/* 任务8.绘制笑脸 */paint.setColor(Color.RED);paint.setStyle(Paint.Style.FILL);canvas.drawArc(new RectF(550, 920, 650, 1020), 30, 300, true, paint);paint.setColor(Color.BLUE);canvas.drawArc(new RectF(700, 920, 800, 1020), 210, 300, true, paint);// 绘制说明文本paint.setColor(Color.BLACK);paint.setTextSize(30);canvas.drawText("笑脸相迎", 820, 970, paint);/* 任务9.绘制图像 */// 方法一、绘制位图Bitmap bitmap = BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.img1));canvas.drawBitmap(bitmap, 50, 1100, paint);// 方法二、利用可绘制对象Drawable drawable = getResources().getDrawable(R.drawable.img1);drawable.setBounds(new Rect(870, 1200, 1160, 1400));drawable.draw(canvas);}
}

三、案例演示——View动画(闪烁满天星)

1、创建安卓应用

  • 选择模板
  • 完善项目信息

2、添加月亮图片

3、创建自定义视图

  • 源代码
package net.zs.twinkling_stars;import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.view.View;public class CustomView extends View {private Paint paint; // 画笔private int screenWidth; // 屏幕宽度private int screenHeight; // 屏幕高度private int count; // 刷屏次数/*** 构造方法*/public CustomView(Context context) {super(context);// 实例化画笔paint = new Paint();// 获取屏幕宽度screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();// 获取屏幕高度screenHeight = ((Activity) context).getWindowManager().getDefaultDisplay().getHeight();}/*** 绘制方法*/@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);/* 将画布底色设置为黑色 —— 夜空 */paint.setColor(Color.BLACK);canvas.drawRect(0, 0, screenWidth, screenHeight, paint);// 确保count只能取0、1、2count = ++count % 3;// 根据刷屏次数来设置画笔颜色switch (count) {case 0:paint.setColor(Color.GREEN); // 设置为绿色画笔break;case 1:paint.setColor(Color.WHITE); // 设置为白色画笔break;case 2:paint.setColor(Color.YELLOW); // 设置为黄色画笔break;}// 绘制月亮位图Drawable drawable = getResources().getDrawable(R.drawable.moon);drawable.setBounds(220, 90, 380, 250);drawable.draw(canvas);// 绘制星星paint.setTextSize(20);for (int i = 0; i < 100; i++) {canvas.drawText("★", (int)(Math.random() * screenWidth),(int) (Math.random() * screenHeight), paint);}}
}

4、主界面类

  • 源代码
package net.zs.twinkling_stars;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import java.util.Timer;
import java.util.TimerTask;public class MainActivity extends AppCompatActivity {private CustomView mCustomView; // 自定义视图private Timer timer; // 定时器private TimerTask task; // 定时器任务@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 实例化自定义视图mCustomView = new CustomView(this);// 将自定义视图设置为用户界面setContentView(mCustomView);// 创建定时器timer = new Timer();// 创建定时器任务task = new TimerTask() {@Overridepublic void run() {// 刷新自定义视图mCustomView.postInvalidate();}};// 对定时器任务进行调度timer.schedule(task, 0, 100);}@Overrideprotected void onDestroy() {super.onDestroy();// 取消定时器任务timer.cancel();}
}

5、运行程序,查看效果

安卓学习 Day26:使用自定义视图绘制文本、图像与图形相关推荐

  1. 安卓学习笔记31:使用自定义视图绘制文本、图形与图像

    文章目录 零.学习目标 一.自定义视图 (一)自定义视图概述 (二)使用自定义视图基本步骤 (三)案例演示 - 使用自定义视图绘制圆 1.创建安卓应用[DrawCircle] 2.创建自定义视图 - ...

  2. Flutter学习笔记 —— CustomPainter自定义画布绘制爱心

    Flutter学习笔记 -- CustomPainter自定义画布绘制爱心 前言 效果图 代码示例 温馨提示 结束语 前言 最近在学习Flutter中 Canvas相关内容,今天尝试写了一个爱心Dem ...

  3. 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)

    文章目录 一.图像红变蓝,蓝变红的问题 (1)原因分析 (2)代码及结果展示 1)错误代码 2)错误结果 3)正确代码 二.深度学习数据包plt.imshow绘制图像偏蓝黄色 (1)原因分析 1)原理 ...

  4. 学习...笔记08:Origin绘制常见图像的方法总结

    文章目录 前言 一.获取绘图使用的数据 1.准备磁滞回线的数据 2.准备标量场平面视图的数据 3.准备带箭头矢量图的数据 4.准备矢量场平面视图的数据 5.准备标量场的数据 6.准备拼图的数据 二.O ...

  5. 安卓学习笔记--- Android自定义View(CustomCalendar-定制日历控件)

    最近需要做一个日历的控件,感觉使用系统的不能满足自己需求,发现了一个比较不错的自定义日历控件,博主写的很好,转载支持一下. 转载地址: http://blog.csdn.net/xmxkf/artic ...

  6. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  7. Android自定义视图二:如何绘制内容

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  8. 安卓学习笔记37:利用OpenGL ES绘制平面图形

    文章目录 零.学习目标 一.OpenGL概述 二.了解三维直角坐标系 三.案例演示 - 绘制三角形 (一)运行效果 (二)实现步骤 1.创建安卓应用[DrawTriangle] 2.建模:创建三角形类 ...

  9. 安卓学习笔记21:常用控件 - 列表视图

    文章目录 零.学习目标 一.列表视图概述 (一)继承关系图 (二)列表视图四要素 (三)四种适配器 二.基于数组适配器使用列表视图案例 -- 阅读古诗 (一)数组适配器 (二)运行效果 (三)涉及知识 ...

最新文章

  1. T100-----调试程序,快速定位到错误行
  2. Nature大调查显示 :全球1/4博士生想换导师
  3. HTTP Referer 防外链
  4. linux mysql插入中文乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
  5. 关于font-size对垂直居中影响的问题
  6. docker安装mysql redis_Docker安装Mysql和Redis以及构建部署应用镜像
  7. [Java基础]内部类基础
  8. 字符串数值的比较 java
  9. ios开发 访问mysql_iOS开发实战-时光记账Demo 网络版
  10. 如何从数据框的单元格获取值?
  11. [渝粤教育] 中国地质大学 大学英语(4) 复习题
  12. 解决前端浏览器字体小于12px办法
  13. win7系统补丁安装流程
  14. CompoundButton 选中/未选中状态的按钮
  15. cad快速选择命令快捷键_CAD快捷键命令大全
  16. 华为usg系列防火墙-密码重置
  17. vs2010背景图片配置方法
  18. 国际结算银行:嵌入式监管可大幅简化合规监管
  19. 民办二本计算机专业学生出路何在?
  20. Jetpack Compose——Text(文本)的使用

热门文章

  1. song -用函数画彩虹
  2. OpenCV-PS羽化操作
  3. 乐高JAVA编程_编程和乐高机器人,是一样的吗?学习这些有用吗?
  4. Qt 实现Unicode字符表情包显示到界面 Emoji
  5. 傅立叶变换、Gabor变换与小波变换
  6. 《Harry Potter: Puzzles Spells》开放预注册
  7. java 事务管理 子父线程_java父线程子线程(转)
  8. 阿里云centos7配置php mysql_阿里云centos7安装NGINX+MYSQL+PHP-FPM环境
  9. python画人脸代码_10行代码实现python人脸识别
  10. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)