android之各种图形绘制

    Android中绘制图片或形状是我们常遇到的事情,通过最近的学习与在网上学习的案例与资料那么我今天就总结一下android中绘制用到的一些类和方法,其中其中主要包括3个类CanvasPaintBitmap,这里我做的不规范,直接在主类中添加代码,如果想规范一点你们可以自定义一个View,覆写onDraw()方法,在onDraw()中进行代码的添加,先看一下效果图:

此类部分解释有借鉴:http://blog.csdn.net/rhljiayou/article/details/7212620

Canvas类常用的方法:

drawRect(RectF rect, Paint paint) //绘制矩形,

drawPath(Path path, Paint paint) //绘制一个路径(多个参数组成)

drawBitmap(Bitmap bitmap, Rect src, Rectdst, Paint paint)  //绘制图片

drawLine(float startX, float startY, floatstopX, float stopY, Paintpaint) //绘制线条drawPoint(floatx, float y, Paint paint) //画点

drawText(String text, float x, floaty,Paint paint)  //渲染文本

drawOval(RectF oval, Paint paint)//绘制椭圆

drawCircle(float cx, float cy, float radius,Paint paint)// 绘制圆,xy坐标为中心点

drawArc(RectF oval, float startAngle, float sweepAngle, booleanuseCenter, Paint paint)//画弧,

参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电弧,参数二是起始角()在电弧的开始,

参数三扫描角()开始顺时针测量的,参数四是如果这是真的话,包括椭圆中心的电弧,并关闭它,如果它是假这将是一个弧线,参数五是Paint对象;

Paint类常用方法:

setARGB(int a, int r, int g, int b) // 设置 Paint对象颜色

setAlpha(int a) // 设置alpha不透明度,范围为0~255

setAntiAlias(boolean aa) // 是否锯齿

setColor(int color)  // 设置颜色

setTextScaleX(float scaleX)  // 设置文本缩放倍数,1.0f为原始

setTextSize(float textSize)  // 设置字体大小

setUnderlineText(booleanunderlineText) // 设置下划线

 

package com.edu;import android.R.color;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Display;
import android.widget.ImageView;public class DrawPictureActivity extends Activity {ImageView imageView = null;Bitmap alter = null;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);imageView = (ImageView) findViewById(R.id.imageView1);Display current = getWindowManager().getDefaultDisplay();// 获取系统设备尺寸// 创建一个画布与屏幕属性一样,如果是在onDraw方法中就不需要创建了alter = Bitmap.createBitmap(current.getWidth(), current.getHeight(),Bitmap.Config.ARGB_8888);// ARGB_8888就是由4(ARGB)个8位组成即32位// 位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真Canvas canvas = new Canvas(alter);Paint paint = new Paint();// 绘制点paint.setStrokeWidth(4.5f);paint.setColor(Color.RED);canvas.drawPoint(60, 500, paint);// 画一个点canvas.drawPoints(new float[] { 60, 520, 70, 520, 80, 520 }, paint);// 画多个点// 设置画笔的粗细paint.setStrokeWidth(15.5f);// paint.setColor(Color.argb(200, 200, 200, 200));// 绘制线paint.setColor(Color.YELLOW);canvas.drawLine(100, 50, 500, 650, paint);// 绘制圆paint.setStyle(Paint.Style.STROKE);// Paint.Style.STROK---轮廓// Paint.Style.FILL_AND_STROKE---填充paint.setColor(Color.BLUE);// 默认有锯齿canvas.drawCircle(200, 200, 160, paint);paint.setAntiAlias(true);// 设置画笔的锯齿效果,true是去除锯齿canvas.drawCircle(500, 600, 80, paint);// 绘制椭圆RectF rf = new RectF(100, 200, 500, 400);paint.setColor(Color.WHITE);canvas.drawOval(rf, paint);// 绘制矩形canvas.drawRect(rf, paint);// 画弧RectF rf1 = new RectF(200, 600, 500, 800);paint.setColor(Color.RED);canvas.drawArc(rf1, 200, 130, false, paint);// 画扇形RectF rf2 = new RectF(200, 800, 500, 1000);paint.setColor(Color.RED);canvas.drawArc(rf2, 200, 130, true, paint);// 画弧,第一个参数是RectF:该类是第二个参数是角度的开始,第三个参数是多少度,// 第四个参数是真的时候画扇形,是假的时候画弧线// 绘制路径paint.setColor(Color.GREEN);Path path = new Path();path.moveTo(400, 100);path.lineTo(200, 350);path.lineTo(200, 850);path.lineTo(400, 1100);path.lineTo(600, 850);path.lineTo(600, 350);path.close();// 封闭或者path.lineTo(400, 100);即开始的位置canvas.drawPath(path, paint);// 绘制文字paint.setColor(Color.GREEN);paint.setStrokeWidth(2.0f);paint.setTypeface(Typeface.SANS_SERIF);// 参数typeface为字体样式Typeface.DEFAULT:默认字体。paint.setTextSize(30); // 设置字体的大小canvas.drawText("hello word!!", 500, 700, paint);// 绘制图片// 画图片,就是贴图Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);canvas.drawBitmap(bitmap, 6, 700, paint);imageView.setImageBitmap(alter);// 当然如果 是在自定义的View的onDraw(Canvas canvas)中就不需要获取系统属性和设置画图了// imageView.setImageBitmap(alter);就可以去掉了/** Typeface.DEFAULT_BOLD:加粗字体。* * Typeface.MONOSPACE:monospace字体。* * Typeface.SANS_SERIF:sans字体。* * Typeface.SERIF:serif字体。*/}
}
代码中的注释最为清楚,如果清楚请仔细看注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59548.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 高级绘图

高级画布绘图 我们已经介绍了Canvas,在那里,已经学习了如何创建自己的View。在第7章中也使用了Canvas来为MapView标注覆盖。 画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成: Canvas 提供了绘图方法…

Android——(仿微信聊天界面布局实例)

今天看郭霖《第一行代码》书上写了一个聊天窗体的小例子,自己就练习学了一下。加上一些自己的理解整理了一下。 1.第一步首先是制作9.patch图片,这个在android sdk 目录下tools文件,找到draw9patch.bat文件双击打开。这是一个专门用来处理安…

Android MPAndroidChart超漂亮图表框架

Android MPAndroidChart超漂亮图表框架 简介配置示例总结 Blog如有不对,敬请斧正 喜欢Android的可以关注我,日常更新Android干货简介 MPAndroidChart是GitHub中大名鼎鼎的一个开源框架,可以快速制作开发中需要的图表,如:折线图、…

【安卓基础】03 实现简单聊天界面

编写一个简单的聊天界面,例子来自《第一行代码》。 1. 编写主界面 聊天界面使用 RecyclerView,简单来说是谷歌新增的控件,与 ListView 类似,但是功能更加强大。比如 ListView 只能纵向华东,但是 RecyclerView 可以设…

安卓 类微信界面实现

目录 1.引言 2.实现 1.写出顶部和底部的layout 2.主页面 3.写四个fragment用于显示不同的内容 4.写MainActivity中的代码 3.总结 1.引言 这是我第一次接触安卓的开发,因为之前学过c#和java,感觉使用AS开发就像使用java在写winform,同样…

安卓开发之设计微信界面

一、功能需求 完成一个类似微信页面的布局,要求: 页面最上方是标题居中页面中间界面显示内容,内容随下方栏的选择而切换页面最下方有四个按钮点击按钮后,按钮图标会变换颜色,且显示框变换内容 项目大致框架如下&…

干货!几招教你降低论文重复率!!

相信大家已经开始为毕业论文奋战了,甚至有的学校已经答辩结束了。今天,小编就说说史上最奇葩智能系统——知网论文检测系统,并且告诉大家躲避查重的几个大招。 各个学校对所谓论文原创度的标准要求不同,碰到要求重复率在30%或20%以…

最简单的 6 种防止数据重复提交的方法!(干货)

有位朋友,某天突然问磊哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交;第二:最简单。 于是磊哥问他,是单机环境还是分布…

如何降重计算机SCI论文的重复率? - 易智编译EaseEditing

介绍几种降重方法: 1“中英中”互换法 用翻译软件先翻译成英文, 再翻译回中文,之后手工修改润色一下, 这样换了一种表达句式,但愿文意思没有改变。 值得一提的是,现在中英文互译软件已经非常强大了&…

对文本文件中出现的词进行次数统计

主要涉及读取文本文件、统计词出现的数目、排序、隐藏函数lambda。 随便从网页复制一篇文章保存成“train.txt”,采用以下代码读取txt文件: def load_stop_words(file "stopwords.txt"):with open(file,"r",encoding"utf-8&…

最简单的6种防止数据重复提交的方法!(干货)

有位朋友,某天突然问磊哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交;第二:最简单。 于是磊哥问他,是单机环境还是分布…

马斯克成立人工智能公司X.AI:对抗ChatGPT 已买1万个GPU

雷递网 雷建平 4月15日 根据内华达州的一份文件,特斯拉CEO埃隆马斯克 (Elon Musk) 已经成立了一家名为X.AI Corp的新人工智能公司。马斯克为X.AI Corp的唯一董事,而贾里德伯查尔,马斯克家族办公室的董事则是其秘书。 X.AI已允许出售这家私人持…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件,网络安全服务等板块,总体来看,十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5,这个能为我们所有人创造更安全的数字世界的企业,在应用及API交…

基于blinker的 microPython 小爱同学

官方没有基于esp8266 esp32的microPython 的SDK 翻了 c源码 照葫芦画瓢画出了 这个 100行左右 里面有个设置设备类型的链接 需要手动设置一次 然后就可以进米家绑定其他设备同步到小爱同学啦 比官方的几百K缩小了很多 不过在官方源码翻协议倒是翻了一晚上。 https://download…

集美大学及集美大学诚毅学院的课表导入小爱同学

引言 由于学校教务系统在使用上存在一定的不便,无法在手机上简单地查看课程表,往往都需要通过截图的形式在手机上保存以供上课过程中查阅。本教程将介绍一种将集美大学及集美大学诚毅学院的课程表导入到小爱同学中的方法。 选择小爱课程表的理由是觉得市…

基于微信小程序的网上订餐系统 报告+任务书+开题报告+文献综述+中期PPT+外文翻译及原文+PPT+项目源码及数据库文件

摘要 随着微信小程序的飞速发展,很多系统随之兴起,微信已经是我们生活中的一部分,可不单单是人们用于沟通聊天的工具。还有很多公告平台、小程序也随之发展。大部分公众平台都只起到了一个信息消息的推送或者浏览的作用,而小程序的…

蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表使用说明

文章目录 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表详细教学视频演示一、自我介绍二、使用说明1.使用条件2.读入数据 总结and已知问题 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小…

基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT)

毕业设计(论文) ( 20 届) 论文(设计)题目 基于Javamail的邮件收发系统 作 者 二级学院、专业 班 级 指导教师(职称) 论 文 字 数 论文完成时间 20年月日 基于JavaMail的邮件…

电脑打不开网页,能ping通,能上QQ,解决办法。

方法一 修改网络配置 因为网络配置不正确无法访问外网的情况。 解决办法: WINR —>在运行里面输入cmd 输入 ipconfig 查看网络配置是否正确 如果不正确,右击网络–>属性–>更改适配器设置–>右击你现在连接的外网的–>属性–>双击…

计算机微信接收excel打不开怎么回事,电脑端微信打不开怎么解决

电脑端微信大家相信大家都用过了,但是有时候出现打不开情况怎么解决呢。下面由学习啦小编为你整理了电脑端微信网页版打不开怎么办的相关方法,希望对你有帮助! 电脑端微信网页版打不开解决方法如下 打开浏览器,点“工具”→“管理加载项”那里…