文档章节

android开发笔记之多媒体—Canvas的相关方法

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 773
阅读 1
收藏 0
点赞 2
评论 0

——Canvas相关方法

   ——画线:canvas.drawLine(20, 20, 200, 200, paint)

   ——画矩形:canvas.drawRect(20, 20, 200, 200, paint)

   ——画圆:canvas.drawCircle(250, 250, 250, paint);

   ——画扇形:canvas.drawArc(rectF, 0, 90, true, paint)

   ——画三角形:Path path = new Path();
               path.moveTo(250, 0);
            path.lineTo(150, 300);
               path.arcTo(new RectF(150, 200, 350, 400), 0, 180);
                path.lineTo(350, 300);
            path.lineTo(250, 0);
               path.close();
               canvas.drawPath(path, paint);

效果图:

这里写图片描述

核心代码:

public class MainActivity extends Activity {

    private ImageView iv;
    private Bitmap bitmap;//画纸
    private Canvas canvas;//画布
    private Paint paint;//画笔
    private float radius = 60;
    private final static float DEGREE = 36; //五角星角度 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
    }
    //画一条线
    public void drawLine(View view){
        init();
        //第一二参数表示直线的起始点坐标
        //第三四参数表示直线的终点坐标
        canvas.drawLine(20, 20, 200, 200, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个矩形
    public void drawRect(View view) {
        init();
        //第一个参数表示矩形左边距离画布左边的距离
        //第二个参数表示矩形上边距离画布上边的距离
        //第三个参数表示矩形右边距离画布左边的距离
        //第四个参数表示矩形下边距离画布上边的距离
        canvas.drawRect(20, 20, 300, 200, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个圆
    public void drawCircle(View view) {
        init();
        //第一二参数表示圆心的坐标
        //第三个参数表示圆的半径
        canvas.drawCircle(250, 250, 250, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个扇形
    public void drawArc(View view) {
        init();
        RectF rectF = new RectF(20, 20, 500, 500);
        //第一个参数表示矩形
        //第二个参数为起始角度
        //第三参数表示扫过的角度
        //第四个参数表示扇形是否含有矩形的中线
        canvas.drawArc(rectF, -90, 180, true, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个多边形
    public void drawPath(View view) {
        init();
        Path path = new Path();
        //先移动到三角形的第一个点
        path.moveTo(250, 10);
        //再连线到第二个点
        path.lineTo(100, 300);
        //在第二、三个点之间画了一个扇形(以二三点之间连线为轴)
        RectF rectF = new RectF(100, 250, 400, 350);
        path.arcTo(rectF, 0, 180);
        //连线到第三个点
        path.lineTo(400, 300);
        //最后连线回第一个点
        path.lineTo(250, 10);

        canvas.drawPath(path, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个五角星
    public void drawStar(View view) {
        init();
        paint.setAntiAlias(true);
        Path path = new Path(); 
        float radian = degree2Radian(DEGREE);
        float radius_in = (float) (radius * Math.sin(radian / 2) / Math.cos(radian)); //中间五边形的半径

        path.moveTo((float) (radius * Math.cos(radian / 2)), 0);
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in * Math.sin(radian)), (float) (radius - radius * Math.sin(radian / 2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) * 2), (float) (radius - radius * Math.sin(radian / 2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in * Math.cos( radian /2)),(float) (radius + radius_in * Math.sin( radian /2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius * Math.sin(radian)), (float) (radius + radius * Math.cos(radian)));
        path.lineTo((float) (radius * Math.cos(radian / 2)), (float) (radius + radius_in));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius * Math.sin(radian)), (float) (radius + radius * Math.cos(radian)));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in * Math.cos( radian /2)), (float) (radius + radius_in * Math.sin(radian / 2)));
        path.lineTo(0, (float) (radius - radius * Math.sin(radian /2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in * Math.sin(radian)) , (float) (radius - radius * Math.sin(radian /2)));

        path.close();
        canvas.drawPath(path, paint); 
        iv.setImageBitmap(bitmap);
    }
    //初始化画布和画布的一些设置
    private void init() {
        bitmap = bitmap.createBitmap(500, 500, Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        //设置画板的颜色
        canvas.drawColor(Color.BLACK);
        paint = new Paint();
// paint.setStyle(Style.STROKE); //设置画笔风格为空心
        paint.setColor(Color.RED); //设置画笔的颜色
        paint.setStrokeWidth(5);    //设置画笔的粗细
        paint.setAntiAlias(true);   //抗锯齿
    }
    /** * 角度转弧度 * @param degree * @return */
    private float degree2Radian(float degree){
        return (float) (Math.PI * degree / 180);
    }
}

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
Android学习笔记09:Paint及Canvas的简单应用

Android学习笔记09:Paint及Canvas的简单应用   在Android中需要通过graphics类来显示2D图形。   graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用...

Carl_
2015/01/07
0
0
10个关于Android开发的实用教程

注:本文转载自iteye 本文为致力于Android应用的开发人员精选了几个不错的实用教程,无论是初学者还是专业开发人员都应该能够从中获益。这些教程中有不少是关于绘图和地址服务运用的,另外一...

随影求是
2012/03/15
0
0
【Android游戏开发之二】剖析游戏开发用view还是surfaceView ?!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/295.html 很多童鞋说我的代码运行后,点击home或者back后会程序异常,...

迷途d书童
2012/03/19
0
0
android自学笔记《四》——应用程序结构分析

昨天在帖子里看到的一个分析方法,很简单,给大家分享下! 呵呵,由于我也是刚开始学习Android,还没有学到下面这些知识,这里就直接截图了。 看完他这个分析之后,我对Android程序有了一个简...

郭子
2012/02/03
0
1
直播,音视频编码器和解码器(EasyDarwin)-Android

使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。 TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进...

shareus
05/18
0
0
Android动画:献上一份详细 & 全面的动画知识学习攻略

前言 动画的使用 是 开发中常用的知识 可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份动画的全面介绍攻略,包括动...

Carson_Ho
06/06
0
0
Android 第一课——Android架构

声明:本文是学习Android时从《Android 4编程入门经典》摘抄!仅仅是作为复习时查看的笔记! 1 Android是一个linux系统 Android 是一个基于 Linux 的开源的手机操作系统。它可以供任何打算使...

learn_more
2014/12/28
0
0
Android绘制View的过程研究——计算View的大小

一、android绘制view的过程简单描述 简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw); 下面看看每一步的动作到底是什么, 第一步:当activity启动的...

Kobe_Gong_5
2013/05/20
0
0
Android开发笔记之【Android API】Android 4.1 API官方文档详解

原文:http://android.eoe.cn/topic/summary Android 4.1 (Jelly Bean)发布了,这次发布包含了一些性能及用户体验上面的优化。也为用户和开发人员添加了一些新的功能。本文主要介绍了一些对于...

sisuad
2013/07/09
0
1
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部