当前位置: 首页 > 编程日记 > 正文

android 绘画,Android绘图基础

绘图三要素

一支画笔 Paint。

一张画布 Canvas。

一个 Bitmap 或者一个 View 来承载这个图形。

Paint常用属性

setAntiAlias() 设置画笔锯齿效果。

setColor() 设置画笔颜色。

setTextSize() 设置字体尺寸。

setStrokeWidth() 设置空心边框的宽度。

setStyle() 设置画笔的风格。

Canvas常用draw方法

drawPoint() 画点。

drawLine() 画线。

drawRect() 画矩形。

drawRoundRext() 画圆角矩形。

drawArc() 画弧形.扇形。

drawOval() 画椭圆。

drawPath() 画路径。

drawText() 画文本。

说明

对于drawRect(left,tob,rigth,bottom,paint)接收的四个参数,当Paint.Style为Fill的时候,是指该矩形各条边到画布坐标轴的距离(一般是画布的左顶点水平方向为X轴,垂直方向为Y轴,Y轴向下为正)。当Paint.Style为Stroke的时候,是指该矩形边框各条边的中心的到画布坐标轴的距离。

drawPath()方法绘制的是路径。比如我要绘制一个三角形,并显示在ImageView上:

Bitmap bm = Bitmap.createBitmap(1000,1000, Bitmap.Config.ARGB_8888);

canvas = new Canvas(bm);

paint = new Paint();

paint.setColor(Color.RED);

paint.setStyle(Paint.Style.STROKE); //必须设置,否则默认为Fill,会填充。

paint.setStrokeWidth(3.0f);

Path path = new Path();

path.moveTo(100,100);

path.lineTo(500,300);

path.lineTo(300,600);

path.close(); // 闭合曲线。

canvas.drawPath(path,paint);

imageView.setImageBitmap(bm);

其中moveTo(),方法是把起始点移动到指定位置。lineTo()是从起始点画一条道指定点的直线。更多关于Path的知识,请参考android绘图之Path总结。

drawArc(),drawArc(left,top,righ,bottom,startAngle,sweepAngle,useCenter,paint)是先按照给定的上下左右的距离确定一个矩形(长宽不一定要相等),然后把这个矩形的上边为旋转到startAngel角度,把矩形的左边旋转到和上边所成的夹角为sweepAngle角度,然后用弧线连接这两条边的端点。其中和X轴平行的方向为0度,正数表示顺时针旋转。当useCenter为true时,会显示左右两条边,为false时,只显示一段弧线。如绘制了一个扇形:

canvas.drawArc(100,100,300,300,30,60,true,paint);

Canvas的其他方法

Canvas.sava()

Canvas.restore()

Canvas.translate()

Canvas.rotate()

Canvas.scale()

Canvas.saveLayer()

Canvas.saveLayerAlpha()

Canvas.restoreToCount()

Canvas.clipPath()

说明

Canvas.sava()是把之前在画布上的操作保存起来,使之后的操作在另外一个图层上。Canvas.restore()则是把图层合并起来。通常我们可以先调用Canvas.sava()启用一个新的图层,然后我们可以通过Canvas.translate()或Canvas.rotate()移动或旋转这个新图层,这时的坐标都是以这个新的图层为基准,此时能大大简化我们的坐标计算。完成绘制之后,再调用Canvas.restore()就可以了。

Canvas.saveLayer()。 public int saveLayer(RectF bounds,Paint paint,int saveFlags),可以看到这个方法可以接受一个bounds参数。和save()方法不同的地方是,save()方法不能改变新图层的形状,而saveLayer()方法不仅可以创建一个或多个不同形状的图层,还可以指定合并图层的样式。saveLayerAlpha()则是开启一个带透明度的图层。

Canvas.clipPath()支持通过路径来剪贴一块区域。通常我们可用此方法剪贴一个区域,然后调用该Drawable的draw(canvas),来绘制一个图形。如下代码绘制了一个圆形的图片。

Drawable drawable = getResources().getDrawable(R.drawable.image,null);

// 必须调用setBounds方法,因为系统要确定该Drawable的大小。

drawable.setBounds(0,0,1000,1000);

Path path = new Path();

path.addCircle(500,500,500,Path.Direction.CW);

canvas.clipPath(path);

drawable.draw(canvas);

imageView.setImageBitmap(bm);

注意

必须调用setBounds()。设置的bounds想当于设定了该Drawable各条边距离画布坐标轴的距离。

相关文章:

源码0306-手势解锁

现搭建页面 // VCView.h // 06-手势解锁#import <UIKit/UIKit.h>interface VCView : UIViewend// VCView.m // 06-手势解锁#import "VCView.h"implementation VCView - (void)drawRect:(CGRect)rect {// 绘图图像UIImage *image [UIImage imageNamed:&quo…

about ajax,About 4nf.org - Arvind Gupta | Ajaxify | The Ajax Plugin

Hi Tony,That page shows various example calls and example websites, that use this plugin.Also, 4nf.org serves as an example, that is a fairly complex WordPress site.By default “previewoff” is true, so that swaps of the content div(s) are performed on cli…

numpy.random.seed()

numpy.random.seed()&#xff1a;用于指定随机数生成时使用算法的开始值&#xff0c;如果没有指定每次生成的值都不一样 如果不指定seed的值&#xff0c;那么每次随机生成的数字都不一样&#xff1a; In [17]: import numpy as npIn [18]: i 0In [19]: while i < 5:...: …

ios .framework动态库重签名

真机上运行.framework时&#xff0c;如果报 dylddyld_fatal_error:dyld: Library not loaded: rpath/XX.framework/XXReferenced from: /var/containers/Bundle/Application/DF33E1CB-0A69-4303-A22A-686E643DE922/iDoctors.app/iDoctors Reason: no suitable image found. Did…

canvars 画花

index.html<!DOCTYPE html><html><head> <title>旋转的花</title> <meta charset "utf-8"> <!--width - 可视区域的宽度&#xff0c;值可为数字或关键词device-width --> <!--height - viewport的高度--&…

android google 下拉刷新 csdn,android SwipeRefreshLayout google官方下拉刷新控件

下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单今天就来使用下SwipeRefreshLayout 以后再需要时可以参考.首先在布局里面加入SwipeRefreshLayout 布局:Activity文件中的代码mSwipeRefresh…

服务器操作系统安全更新,服务器操作系统安全更新

服务器操作系统安全更新 内容精选换一换使用弹性云服务器或者外部镜像文件创建私有镜像时&#xff0c;必须确保操作系统中已安装UVP VMTools&#xff0c;使新发放的云服务器支持KVM虚拟化&#xff0c;同时也可以提升云服务器的网络性能。如果不安装UVP VMTools&#xff0c;云服…

流程控制if、while、for

if判断 if判断想执行第一个条件&#xff0c;if后的判断必须是True 1 什么是if判断   判断一个条件如果成立则做...不成立则做....2 为何要有if判断   让计算机能够像人一样具有判断的能力3 如何用if判断 语法1: if 条件1:code1code2code3...... 语法2:if-else if 条件:code…

抄写例题作业1

截图 1.例9.1 &#xff08;1&#xff09;代码实现 1 #include<stdio.h>2 int main()3 {4 struct stu5 {6 long int num;7 char name[20];8 char sex[3];9 char addr[20]; 10 }a{1010,"董诗原","男",&qu…

android button imagebutton 区别,Android 开发入门篇

Button 与 ImageButton本节学习Android基本控件按钮控件&#xff0c;Button和ImageButton用法基本类似&#xff0c;所以本节重点讲解Button控件。在布局中添加Button控件&#xff1a;android:id"id/btn"android:text"普通按钮"android:layout_width"w…

iOS autolayout 约束冲突添加symbol breakpoint

UIViewAlertForUnsatisfiableConstraints

Win7安装ant

下载ant&#xff0c;当前版本是1.9.4。下载地址点击打开链接。 解压到你喜欢的路径下面&#xff0c;我喜欢D:\Program Files\apache-ant-1.9.4 配置环境变量ANT_HOME。右击计算机→选择属性→高级系统设置→“高级”标签→环境变量。 新建系统变量。变量名必须是“ANT_HOME…

af eeee

e 转载于:https://www.cnblogs.com/xiaobaiv/p/9661043.html

ios bug 分析

ios中线上或者内部测试bug统计收集有两种方法&#xff1a; 1)使用第三方bug收集 1.bugHD 来源http://bughd.com/doc/ios-customize 2.bugtags 来源http://help.bugtags.com/hc/kb/article/124400/ http://help.bugtags.com/hc/kb/article/68482/ 3.KSCrash https://github.com/…

我理解的接口测试(一)

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 接口 应用&#xff08;模块&#xff09;提供对…

android jni语法,Android NDK中的JNIEXPORT和JNICALL

基本上是一个Windows问题,如果你看看oracle Java jdk附带的文件jni_md_win32.h这是宏定义&#xff1a;/** (#)jni_md.h 1.14 03/12/19** Copyright 2004 Sun Microsystems, Inc. All rights reserved.* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/#ifnd…

Win7编译volley成jar包

首先安装git和ant&#xff0c;当然jdk也是必须的。 git clone搞到volley的源码。 git clone https://android.googlesource.com/platform/frameworks/volley 此时volley的目录里面应该是这样的&#xff0c;没有AndroidManifest.xml文件。 cd进volley目录&#xff0c;敲下一…

c语言的求素数算法,C语言求素数的算法

最后一次是出了素数的问题C语言解决题目(面试)&#xff0c;当时用了最粗暴的算法。回来细致參考资料&#xff0c;事实上答案有非常多种&#xff1a;1&#xff0c;小学生版本号&#xff1a;推断 x 是否为质数&#xff0c;就从 2 一直算到 x-1。static rt_uint32_t array1[ARRAY_…

Python全栈Day 15部分知识点

全局变量与局部变量 约定俗成的规则&#xff1a;全局变量名大写&#xff0c;局部变量名小写。 全局变量没有缩进&#xff0c;顶格写。 如果函数的内容无global关键字&#xff0c;优先读取局部变量&#xff0c;能读取全局变量&#xff0c;无法重新赋值&#xff0c;但是对于可变类…

SQL执行并返回执行前/后结果

SQLServer&#xff1a; 1、插入数据&#xff0c;并返回插入的数据&#xff1a;INSERT INTO TestTB(Province,City) output inserted.Province, inserted.City VALUES(广东,深圳)2、同理&#xff0c;删除数据也是一样的&#xff0c;只不过是使用deleted表罢了。delete from Test…

WebStorm 运行Rect Native 项目

今天教大家如何直接使用WebStorm这个IDE直接完成编码运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations.... 2.然后会进入一个配置页面.点击左上方的.在弹出的列表中选中npm.如图. 3.在右边的配置框中,先选择Command为hel…

Win7下用VS2010编译QGIS2.9.0

折腾了两天了&#xff0c;终于吧QGIS2.9.0在VS2010下面编译过了。 参考了许多的博客&#xff0c;在网络环境极为和&#xff08;e&#xff09;谐&#xff08;lie&#xff09;的情况下用Google查了好多资料。 其实原创的东西真的不多&#xff0c;但是毕竟是自己亲身实践得到的成…

软件工程第二次课后作业——Gaoooo

代码量&#xff1a;9行 码云仓库&#xff1a;https://gitee.com/Gaooo/2016035107059.git 实现时间&#xff1a;emmmmm&#xff08;9行代码&#xff0c;自己估计&#xff01;&#xff01;&#xff09; 程序对表达式类型的支持程度&#xff1a;全部支持&#xff01; 能支持两个操…

android检测本地是否安装,在本地测试模块的安装

Play 核心库可让您在本地测试应用是否能够执行以下操作&#xff0c;而无需连接到 Play 商店&#xff1a;请求并监控模块的安装。处理安装错误。本页介绍了如何将应用的拆分 APK 部署到测试设备&#xff0c;以便 Play 核心自动使用这些 APK 模拟从 Play 商店请求、下载和安装模块…

IsPostBack的使用

protected void Page_Load(object sender, EventArgs e){//当前用户通过Index.aspx页面中“添加用户”链接跳转到该页面时&#xff0c;这是一次get请求&#xff0c;所以不会提交表单&#xff0c;拿不到隐藏域的值。当前页面显示完成&#xff0c;用户在表单中输入数据以后单击提…

WebStorm下ReactNative代码提示设置

ReactNative 代码智能提醒 (Webstrom live template) https://github.com/virtoolswebplayer/ReactNative-LiveTemplate ReactNative的代码模板,包括: 1.组件名称 2.Api 名称 3.所有StyleSheets属性 4.React组件 安装 方法一 file -> import settings -> ReactNative.ja…

WinXp安装Oracle 11g Express Edition

由于在虚拟机上学习&#xff08;怕把真机器搞坏了&#xff09;&#xff0c;这次是在Windows XP上安装Oracle 11g Express。 本文安装的是Oracle 11g Express&#xff0c;是Oracle数据库的快速版&#xff08;学习版&#xff09;&#xff0c;安装包大小只有几百MB。 到Oracle的…

html语言书写注意事项,CSS命名规范参考及书写注意事项

CSS书写顺序*{/*显示属性*/displaypositionfloatclearcursor…/*盒模型*/marginpaddingwidthheight/*排版*/vertical-alignwhite-spacetext-decorationtext-align…/*文字*/colorfontcontent/*边框背景 为什么要把 boder和background放在最后的原因是修改的频率会较之前的频繁&…

关于移动端rem适配

var num 1 / window.devicePixelRatio; var fontSize document.documentElement.clientWidth / 10; document.getElementsByTagName(html)[0].style.fontSize fontSize px; 适配移动端rem单位&#xff0c;实际使用的时候用量取到的像素值/75即为计算后的rem值&#xff0c;标…

JavaWeb基础—JSP

一、什么是JSP JSP 全称是 Java Server Pages&#xff0c;是一种开发动态web资源的技术 在原HTML上添加JAVA脚本&#xff08;灵魂工程师&#xff0c;为页面添加灵魂&#xff09;&#xff0c;可以说 jsp html java代码 jsp标签 二、JSP的原理 JSP基本原理&#xff1a; JSP…