二十多行代码画太极(Android中的Canvas)

Android 自定义View 太极图 Android 自定义View 太极图。 阅读详情

作者微博: @攻城师sloop

先上效果图

taiji

说明

本内容主要讲解安卓中2D绘图相关内容,安卓中2D绘图主要用的是Canvas(翻译过来好像叫画布吧)

先简单介绍一下Canvas的常用功能:

Canvas可以绘制的对象:
弧线(arcs)
填充颜色(argb 和 color)
位图(Bitmap)
圆(circle 和 oval)
点(point)
线(line)
矩形(Rect)
图片(Picture)
圆角矩形(RoundRect)
文本(text)
定点(Vertices)
路径(path)
PS:Canvas中可以的绘制方法一般均为draw开头,例如绘制圆形就是drawCircle

Canvas位置操作方法
旋转(rotate)
缩放(scale)
位移(translate)
扭曲(skew)

Canvas提供的其他方法
获得转换矩阵(Matrix)
保存(save)
回滚(restore)

以上内容仅供参考,本篇文章重点不是这些,想要了解Canvas基本用法可以参考这篇文章 Android Canvas绘图详解(图文)

下面讲解本文的核心内容,将会分步骤讲解如何用正确的姿势绘制一个太极。

绘制太极

1.定义画笔

由于太极图像由黑白两色构成,为了方便就定义了两个画笔,分别绘制黑色和白色。

        private Paint whitePaint;   //白色画笔
        private Paint blackPaing;   //黑色画笔

        //初始化画笔函数
        private void initPaints() {
            whitePaint = new Paint();
            whitePaint.setAntiAlias(true);
            whitePaint.setColor(Color.WHITE);

            blackPaing = new Paint();
            blackPaing.setAntiAlias(true);
            blackPaing.setColor(Color.BLACK);
        }

2.在构造函数中初始化画笔

        //用户直接new一个View时会被调用
        public TaiJi(Context context) {
            super(context);
            initPaints();       //初始化画笔
        }

        //用户在Layout文件中使用这个View时会被调用
        public TaiJi(Context context, AttributeSet attrs) {
            super(context, attrs);
            initPaints();       //初始化画笔
        }

3.在onDraw中使用Canvas绘制内容

3.1 确定视图的中心
int width = canvas.getWidth();                          //画布宽度
int height = canvas.getHeight();                        //画布高度
Point centerPoint = new Point(width / 2, height / 2);   //画布中心点
3.2 将Canvas坐标原点移动到视图中心
canvas.translate(centerPoint.x, centerPoint.y);         //将画布移动到中心
3.3 绘制背景色
canvas.drawColor(Color.GRAY);                           //绘制背景色
3.4 确定太极的半径大小并绘制两个半圆
//绘制两个半圆
int radius = Math.min(width, height) / 2 - 100;             //太极半径
RectF rect = new RectF(-radius, -radius, radius, radius);   //绘制区域
canvas.drawArc(rect, 90, 180, true, blackPaing);            //绘制黑色半圆
canvas.drawArc(rect, -90, 180, true, whitePaint);           //绘制白色半圆

在这里稍微解释一下drawArc绘制圆弧方法几个参数的意义。

RectF oval          //绘制的区域(是一个矩形)
float startAngle    //开始角度
float sweepAngle    //扫过角度
boolean useCenter   //是否使用中心
Paint paint         //画笔

另外,由于移动设备屏幕的坐标系和我们在数学中常用的坐标系稍微有点区别,需要注意一下。
在移动设备中一般定义左上角为坐标零点,x轴坐标向右增大,y轴坐标向下增大。而在数学坐标系中一般定义y轴坐标向上为增大方向,所以两者y轴刚好是反向的。

3.5 绘制两个小圆
//绘制两个小圆
int smallRadius = radius / 2;   //小圆半径为大圆的一般
canvas.drawCircle(0, -smallRadius, smallRadius, blackPaing);
canvas.drawCircle(0, smallRadius, smallRadius, whitePaint);

3.6 绘制鱼眼
//绘制鱼眼(两个更小的圆)
canvas.drawCircle(0, -smallRadius, smallRadius / 4, whitePaint);
canvas.drawCircle(0, smallRadius, smallRadius / 4, blackPaing);

4.让太极旋转起来

4.1 设置旋转角度变量,并提供外部访问接口
private float degrees = 0;          //旋转角度
public void setRotate(float degrees) {
    this.degrees = degrees;
    invalidate();                   //重绘界面
}
4.2 在实际绘制之前调用旋转函数
//在绘制完背景色后调用即可
canvas.rotate(degrees);
4.3 不断改变旋转角度
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final TaiJi taiJi = new TaiJi(this)
    setContentView(taiJi);
    final Handler handler = new Handler() {
        private float degrees = 0;
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
                taiJi.setRotate(degrees += 2);
                this.sendEmptyMessageDelayed(0, 20);
            }
        };

        handler.sendEmptyMessageDelayed(0, 20);
    }

taiji

5.完整代码

获取完整代码请点这里源代码

最后

虽然写了这么长,但核心代码不过二十几行,其实还是挺简单的。
欢迎转载分享,转载请标明作者:攻城师sloop
另外,如果你觉得不错,顺手点个赞呗

画太极图的C++代码实现 绘制太极图的原理简单来说就是画两个半圆一黑一白 拼成一个正圆 再在大圆的左侧和右侧画两个恰好相切的黑圆和白圆作为突出端 最后分别在这两个突出端里面画两个一黑一白的小洞 MFC里利用void CDrawView::OnDraw CDC pDC 这个函数进行绘图 和课堂上绘制正弦曲线相比 如果用一笔一笔循环的方式画圆将会很复杂 因此我就参考网上的 用Pie函数和Ellipse函数画弧和圆 画图用了CBrush画刷和CPen画笔 ">绘制太极图的原理简单来说就是画两个半圆一黑一白 拼成一个正圆 再在大圆的左侧和右侧画两个恰好相切的黑圆和白圆作为突出端 最后分别在这两个突出端里面画两个一黑一白的小洞 MFC里利用void CDrawView::OnDraw CDC pDC 这 [更多] 立即下载

相关推荐

Android学习教程之2D绘图基础及绘制太极图

主要给大家介绍了Android中2D绘图基础的相关资料,文中介绍了绘图的基础内容,以及通过Canvas和Paint实现绘制太极图的详细过程,对各位Android新手开发者们具有一定的参考价值,需要的朋友下面来一起看看吧。

Android画一个太极图

转载地址:http://www.jianshu.com/p/2a9e5ddbeb26 今天练手一下,一起来画个太极图吧~ 最终效果如下: 最终效果 一般都是先讲原理,我就反其道而行,先讲实现吧。 1.继承实现初始化方法 继承View,实现基本的构造函数: public TestView(Context context) {

l_215851356的专栏 788

fMRI原始数据分割的笔记

好记性不如烂笔头_fMRI小白入门笔记

ZY_brain的博客 2897

android 自定义view实现太极图效果

android 自定义view实现太极图效果

zhouguizhi 1991

生物信息学新手必备:5分钟搞定GEO补充数据下载(含西柚云代理配置)

本文为生物信息学新手提供了快速下载GEO数据库补充数据的完整方案。核心在于解析GEO文件存储逻辑,构造正确的FTP下载链接,并利用云端代理服务(如西柚云)解决国内访问NCBI速度慢、易中断的问题。通过分步教程,用户无需命令行即可在5分钟内稳定获取大型测序文件,极大提升数据获取效率。

weixin_28314575的博客 637

Apollo MPC横纵向耦合控制学习笔记

Apollo MPC横纵向控制原理学习笔记

weixin_39199083的博客 1万+

Android自定义view之太极图

太极图 周四课余时间比较多,正好前几天为了给小学弟解决问题,回顾了一些Android的知识,(上学还是不能把以前上班学到的东西丢掉)于是写一篇关于自定义view的文章。 文章目录太极图最后完成的样子(可旋转)一、先画一个太极二、让太极旋转三、自定义属性(颜色,动画速度)四、源码总结 最后完成的样子(可旋转) 这篇文章主要内容为使用Canvas画简单图案,自定义属性,以及属性动画ObjectAnimator中的旋转动画 提示:以下是本篇文章正文内容 一、先画一个太极 先介绍一下定义的东西:

计蒙不吃鱼的博客 1万+

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 268

Android自定义view之太极图,Android从入门到精通

/最后测量得到的值//左太极的颜色(黑)//右太极的颜色(白)

2401_87545802的博客 943

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1727

java画太极加图片_Android 画一个太极图实例代码

今天练手一下,一起来画个太极图吧~最终效果如下:最终效果一般都是先讲原理,我就反其道而行,先讲实现吧。1.继承实现初始化方法继承View,实现基本的构造函数:public TestView(Context context) {this(context, null);}public TestView(Context context, AttributeSet attrs) {this(context...

weixin_36296063的博客 263

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

1902

Android绘图之绘制太极图

Android是通过graphics类来显示2D图形的。其中graphics中包括了Canvas、Paint、Color、Bitmap等类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。其中Color和Bitmap是很常用的类,我要讲的是Canvas和Paint。顾名思义就是画布和画笔。接下来我将通过绘制太极图来学习Android绘图机制。   Paint类   和日常绘图

chenkai19920410的专栏 1194

MFC实现图书管理系统(附完整源码)

MFC实现图书管理系统(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 801

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android自定义控件旋转,Android自定义View之旋转的太极

坚持学习每一天爱生活,爱分享如果您喜欢我的文章,可以点击关注,喜欢 先看看最终效果 image.png首先新建一个类TaiJi集成VIew,并设置2个画笔public class TaiJi extends View{private Paint blackPaint;//黑色画笔private Paint whitePaint;//白色画笔public TaiJi(Context contex...

weixin_39665507的博客 266

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

canvas绘制四分之一圆_用canvas画太极图(一步步详解附带源代码)

canvas绘图该元素负责在页面中设定一个区域,然后由js动态地在这个区域中绘制图形。这个技术最早是由美国苹果公司推出的,目的是为了取代flash,很快主流浏览器都支持它。绘制路径要绘制路径首先必须调用beginPath()方法,如果想绘制一条连接到起点的线条则调用closePath()方法;如果路径已完成,你想用fillStyle填充它,可以调用fill()方法。另外还可以调用stroke()方...

weixin_30663789的博客 498

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Canvas画太极图

int width=360; private Paint paint; private RectF rectf; public TaijiTu(Context context) { super(context); init(); } public TaijiTu(Context context, @Nullable A

呵呵呵 672

mysql 图标 太极_Android 画布 canvas 太极图

自定义viewpackage cn.mf.cts;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.graphics...

weixin_28879085的博客 136

Android4太极,Android 绘制太极图实例详解

Android 绘制太极图绘制一个太极图实现代码:package com.jackie.taijicircle;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphic...

weixin_29613721的博客 203

画太极

前几天看到http://www.gcssloop.com/customview/taiji这个copor写的太极蛮好玩的。自己也写了一个玩玩。package com.zhou.zonghe.utils;import java.util.Set;import android.R.integer; import android.content.Context; import android.graphi

zhou4781182的博客 559

canvas 太极

canvas 太极闲着无事,想起来使用canvas画个太极玩玩,直接上代码var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); //绘制左侧的白色半圆直径都是150 cxt.fillStyle="#FFFFFF"; cxt.beginPath(); cxt.arc(300,

LygTom的博客 494
上一篇: 安卓统一添加activity切换动画
下一篇: Retrofit2实现App自动更新
Ray534
博客等级 码龄12年 2粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值