Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >绘图[上](四)

绘图[上](四)

作者头像
李小白是一只喵
发布于 2020-04-24 00:46:10
发布于 2020-04-24 00:46:10
78600
代码可运行
举报
文章被收录于专栏:算法微时光算法微时光
运行总次数:0
代码可运行

image.png

目录

绘图工具

Android下绘图需要使用view.使用自定义的view完成绘制. 其中需要使用的有三个工具:Paint,Canvas,Path.

Paint

绘图需要两个工具,笔和纸。

这里的 Paint相当于笔,而 Canvas相当于纸,不过需要注意的是 Canvas(画布)无限大,没有边界,切记理解成只有屏幕大小。

API

含义

setAntiAlias();

设置画笔的锯齿效果

setColor();

设置画笔的颜色

setARGB();

设置画笔的A、R、G、B值

setAlpha();

设置画笔的Alpha值

setTextSize();

设置字体的尺寸

setStyle();

设置画笔的风格(空心或实心)

setStrokeWidth();

设置空心边框的宽度

getColor();

获取画笔的颜色

Canvas

Canvass是画布.

API

含义

canvas.drawPoint(x,y,paint);

绘制点

canvas.drawLine(startX,startY,endX,endY,paint);

绘制直线

canvas.drawRect(left,top,right,button,paint);

绘制矩形

canvas.drawRect(left,top,right,button,radiusX,radiusY,paint);

绘制圆角矩形

canvas.drawCircle(圆心X坐标,Y坐标,半径,paint1);

绘制圆

canvas.drawArc(left,top,right,button, startAngle, sweepAngle, useCenter, paint2);

绘制弧形/扇形

Path

顾名思义,就是路径的意思.

使用Path不仅可以绘制简单的图形(如圆形,矩形,直线等),也可以绘制复杂一些的图形(如正多边形,五角星等),还有绘制裁剪和绘制文本都会用到Path。

API

含义

moveTo

移动起点

lineTo

连接直线

setLastPoint

设置终点

close

闭合路劲

addRect

添加矩形

addRoundRect

添加圆角矩形

addOval

添加椭圆

addCircle

添加圆

addPah

添加路劲

addArc

添加圆弧

arcTo

圆弧

isEmpty

是否为空

isRect

是否为矩形

set

替换路劲

offset

偏移路劲

quadTo

贝塞尔曲线 二次贝塞尔曲线的方法

cubicTo

贝塞尔曲线 三次贝塞尔曲线的方法

setFillType

填充模式

getFillType

填充模式

isInverseFillType

是否逆填充

toggleInverseFillType

相反模式

getFillType

填充模式

incReserve

提示方法

computeBounds

计算边界

reset,rewind

重置路劲

transform

矩阵操作

好了,理论结束,下面开始实战.

使用Canvas和Paint画圆

首先创建一个新的类,集成于view类: HelloView.java文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.user.test11;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class HelloView extends View{

    public HelloView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        // 设置画笔
        Paint mPaint = new Paint();
        // 设定画笔颜色
        mPaint.setColor(Color.BLACK);
        //抗锯齿
        mPaint.setAntiAlias(true);

        //获取控件的宽高
        int width = getWidth();
        int height = getHeight();
        //设置半径
        int raius = width/4;
        //画圆
        canvas.drawCircle(width/2,height/2, raius, mPaint);
    }

}

然后再activity_main.xml中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.user.test11.HelloView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

这样就可以了,代码里有注释,不再过多解释.

编译后的效果:

image.png

运行的效果:

image.png

好丑,下面让我们来画个太极图吧.O(∩_∩)O

小练习(太极图源码)

HelloView.java文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.user.test11;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class HelloView extends View{

    public HelloView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        // 设置画笔
        Paint mPaint = new Paint();
        // 设定画笔颜色
        mPaint.setColor(Color.BLACK);
        //抗锯齿
        mPaint.setAntiAlias(true);

        //获取控件的宽高
        int width = getWidth();
        int height = getHeight();

        //设置半径
        int raius = width/4;

        // 设定画笔填充类型(不填充)
        mPaint.setStyle(Paint.Style.STROKE);

        //绘制圆
        canvas.drawCircle(width/2, height/2, raius, mPaint);
        // 设定画弧区域
        float left = width/2 - raius;
        float top = height/2 - raius;
        float right = width/2 + raius;
        float bottom = height/2 + raius;


        // 设定画笔填充类型(填充)
        mPaint.setStyle(Paint.Style.FILL);

        //绘制一个黑色的半圆(下半圆)
        canvas.drawArc(left, top, right, bottom, 0, 180, true, mPaint);

        //绘制圆(黑色区域的头)
        canvas.drawCircle(width/2 - raius/2, height/2, raius/2, mPaint);

        // 设定画笔颜色
        mPaint.setColor(Color.WHITE);

        //绘制圆(白色区域的头)
        canvas.drawCircle(width/2 + raius/2, height/2, raius/2, mPaint);

        //绘制圆(白色眼睛)
        canvas.drawCircle(width/2 - raius/2, height/2, raius/10, mPaint);

        // 设定画笔颜色
        mPaint.setColor(Color.BLACK);

        //绘制圆(黑色眼睛)
        canvas.drawCircle(width/2 + raius/2, height/2, raius/10, mPaint);
    }

}

activity_main.xml文件没有变化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.user.test11.HelloView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

配置效果:

image.png

运行结果:

image.png

参考

Android开发中三个绘图工具(Paint,Canvas,Path)的基本用法(总结) Android绘图(2D绘图、3D绘图) Android 自定义View之绘图 Android开发--图形图像与动画(一)--Paint和Canvas类

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
绘图[下](四)
使用Path不仅能够绘制简单图形,也可以绘制这些比较复杂的图形。 如绘制一个心形 正多边形 五角星等.
李小白是一只喵
2020/04/24
4780
绘图(四)小练习[画心]
动态的绘制图形,需要使用到invalidate和postInvalidate函数,本次我们使用的是:
李小白是一只喵
2020/04/24
4590
android 电平信号状态识别View平局
级信号状态View在今天的Android系统是常见。状态的图标就很的经典,有几种状态,到了快没电的时候有些还会闪烁提示用户充电;还有的就是一些地图App的GPS信号强度的提示。Wifi信号强度的也有一些,反正应用场景大概就是这样。
全栈程序员站长
2022/07/06
2220
android 电平信号状态识别View平局
自定义View学习——仿QQ消息气泡拖拽黏连删除
该篇主要是对MessageBubbleView仿QQ消息控件的修改。因为我发现这个QQ消息气泡开源控件是规则的圆,所以稍加修改,对onDraw()绘画图形做了变动,更加接近于QQ气泡了。毕竟前人栽树后人乘凉,该控件又是通过手指触摸调用事件分发处理又是贝塞尔曲线的应用,多少目前能力有限,只有借鉴了。需要的文件图片请从文中提供的MessageBubbleView仿QQ消息控件下载。 参考博客:仿 QQ 未读消息气泡,可拖拽删除,粘连效果
木溪bo
2018/12/27
1.5K0
Android自定义View之Canvas一文搞定
作用是将之前的所有已经绘制的图像保存起来,让后续的操作就好像在一个新的图层上操作一样
AntDream
2024/07/10
1370
Android自定义View之Canvas一文搞定
Android高手进阶教程(三)之----Android 中自定义View的应用.
大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码:
用户9227784
2021/12/07
2140
Android绘图Canvas十八般武器之Shader详解及实战篇(上)
Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Framework。Canvas有许多的知识内容,构建了一个武器库一般,所谓十八般武艺是也,Paint是Canvas的一个重要的合作伙伴,但今天要讲的不是Canvas也不是Paint,而是与Paint相关的知识点Shader.
Frank909
2019/01/14
3.2K0
自定义控件_绘制太极(拖动)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136189.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
3710
Android自定义View【实战教程】5⃣️---Canvas详解及代码绘制安卓机器人
Android自定义View【实战教程】3⃣️—-Paint类、Path类以及PathEffect类详解
先知先觉
2019/01/21
1.4K0
Android查缺补漏(View篇)--自定义 View 的基本流程
View是Android很重要的一部分,常用的View有Button、TextView、EditView、ListView、GridView、各种layout等等,开发者通过对这些View的各种组合以形成丰富多彩的交互界面,一个应用中界面交互的体验往往在应用的受欢迎程度上起了很关键得作用,所以开发者们大多会想方设法的做出一个更加精美的界面,例如:通过自定义View、深入学习View的原理以便更好的对其优化使其在操作起来更加流畅等等,也正因为如此,在面试中View也常常作为面试官重点考察的对象之一。 View
codingblock
2018/03/30
8940
Android中的绘图
界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。Android系统能够在诸多的移动平台中脱颖而出,漂亮的界面带来的良好的用户体验无疑是其中一个很重要的因素。在我们平时的软件开发中,仅靠系统提供的那些组件来实现界面是远远不够的,在很多情况下我们都需要自己来绘制软件界面。在本章中我们就将学习Android中和绘制图形及位图显示和效果有关的知识。
张哥编程
2024/12/17
1050
Android中的绘图
相关推荐
绘图[下](四)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验