场景

在Android中画笔使用Paint类,画布使用Canvas类来表示。

绘图的基本步骤

首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到actvity中。

效果

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先在要显示的Activity的布局文件中修改为FrameLayout并添加一个id。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RobitActivity"> </FrameLayout>

然后在ACtivity中新建自定义View类,这里是MyView使其继承View类并编写一个带一个参数的构造方法和重写onDraw方法。

在重写的onDraw方法中新建画笔并设置一些属性,然后使用画笔在画布上指定的位置绘制图形。

package com.badao.alarmmanager;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout; public class RobitActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_robit);
FrameLayout frameLayout= (FrameLayout) findViewById(R.id.frameLayout); //获取帧布局管理器
frameLayout.addView(new MyView(this)); //将自定义视图的内部类添加到布局管理器中
} private class MyView extends View {
public MyView(Context context) {
super(context);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint(); //默认设置创建一个画笔
paint.setAntiAlias(true); //使用抗锯齿功能
paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色
//绘制机器人的头
RectF rectf_head=new RectF(, , , );
rectf_head.offset(, );
canvas.drawArc(rectf_head, -, -, false, paint); //绘制弧
//绘制眼睛
paint.setColor(Color.WHITE); //设置画笔的颜色为白色
canvas.drawCircle(, , , paint); //绘制圆
canvas.drawCircle(, , , paint); //绘制圆
paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色
//绘制天线
paint.setStrokeWidth(); //设置笔触的宽度
canvas.drawLine(, , , , paint); //绘制线
canvas.drawLine(, , , , paint); //绘制线
//绘制身体
canvas.drawRect(, , , , paint); //绘制矩形
RectF rectf_body=new RectF(,,,);
canvas.drawRoundRect(rectf_body, , , paint); //绘制圆角矩形
//绘制胳膊
RectF rectf_arm=new RectF(,,,);
canvas.drawRoundRect(rectf_arm, , , paint); //绘制左侧的胳膊
rectf_arm.offset(, ); //设置在X轴上偏移120像素
canvas.drawRoundRect(rectf_arm, , , paint); //绘制右侧的胳膊
//绘制腿
RectF rectf_leg=new RectF(,,,);
canvas.drawRoundRect(rectf_leg, , , paint); //绘制左侧的腿
rectf_leg.offset(, ); //设置在X轴上偏移40像素
canvas.drawRoundRect(rectf_leg, , , paint); //绘制右侧的腿
}
}
}

最新文章

  1. crodova打包apk个人总结
  2. 【Android】Android属性allowBackup安全风险
  3. 在windows上安装scikit-learn开发环境
  4. 初识Windows窗体(包括各种控件,属性,方法)
  5. WPF x名称空间
  6. 如何解决.NET Framework4.0的System.EnterpriseServices could not found 的问题
  7. httpclient发起https请求以及获取https返回内容
  8. 关于真机调试DDMS中的data文件夹打不开的解决方法
  9. 解决vsftpd 530 Permission denied报错
  10. ad nbetmk57
  11. URL和HTTP协议(无图片)
  12. 一不小心把Mysql数据库的root的账号的权限给弄没啦,该怎么办
  13. 测试&amp;标准说明文章
  14. Android Demo---实现从底部弹出窗口
  15. [20190213]测试服务端打开那些端口.txt
  16. OCM_第十九天课程:Section9 &mdash;》Data Guard _ DATA GUARD 原理/DATA GUARD 应用/DATA GUARD 搭建
  17. 断开网络连接的dos命令
  18. PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异
  19. SIT/UAT测试
  20. python3之es+log+date+timezone

热门文章

  1. 事件总线 EventBus
  2. 基于OpenCV的双目视觉匹配测距系统
  3. Ubuntu固定多个静态ip
  4. URL各部分详解
  5. ios---&gt;帧动画
  6. php---&gt;使用callable强制指定回调类型
  7. P4452 [国家集训队]航班安排(最大费用最大流)
  8. 04讲基础篇:经常说的CPU上下文切换是什么意思(下)
  9. php扩展模块的安装
  10. 林大妈的JavaScript进阶知识(二):JS异步行为