Android应用开发学习笔记之绘图
作者:刘昊昱
博客:http://blog.csdn.net/liuhaoyutz
一、绘图常用类介绍
在Android中绘图时,常用到的几个类是Paint、Canvas、Bitmap和BitmaptFactory。其中,Paint类代表画笔,Canvas类代表画布。有了Paint和Canvas类就可以进行绘图操作了。
1、 Paint类
Android官方文档中对Paint类的描述如下:
The Paint class holds the styleand color information about how to draw geometries, text and bitmaps.
Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度、填充效果等值。使用Paint类时,首先需要创建Paint类的对象,然后通过该类的成员函数对画笔的默认设置进行更改,例如改变画笔的颜色、线宽等。
例如,要创建一个画笔,设置画笔的颜色为红色,并且带一个浅灰色的阴影,可以使用下面的代码:
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setShadowLayer(2, 3, 3,Color.rgb(180, 180, 180));
2、 Canvas类
Android官方文档对Canvas类的描述如下:
The Canvas class holds the"draw" calls. To draw something, you need 4 basic components: ABitmap to hold the pixels, a Canvas to host the draw calls (writing into thebitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (todescribe the colors and styles for the drawing).
Canvas代表画布,通过该类提供的方法,可以绘制各种图形(如矩形、图形、线条等等),通常情况下,要在Android绘图,首先要创建一个继承自View类的自定义View,并且在该类中重写onDraw(Canvas canvas)方法,然后在显示绘图的Acticity中添加该自定义View。
3、 Bitmap类
Bitmap类代表一个位图,使用Bitmap类提供了函数,可以获取位图文件的信息,可以对位图进行剪切、旋转、缩放等操作,还可以以指定格式保存图像文件。
4、 BitmapFactory类
BitmapFactory类是一个工具类,用于从不同的数据源来解析、创建Bitmap对象。
例如,要利用图片文件/sdcard/pictures/imag1.jpg创建Bitmap对象,可使用如下代码:
String picture_path = “/sdcard/pictures/imag1.jpg”;
Bitmap bitmap = BitmapFactory.decodeFile(path);
再举一个例子,如果要利用Drawable资源中保存的图片文件image2.jpg创建对应的Bitmap对象,可使用如下代码:
Bitmap bitmap =BitmapFactory.decodeResource(MainActivity.this.getResource(),
R.drawable.image2);
二、绘图实例
下面我们来看一个Android绘图实例,该程序运行效果如下:
先来看主Activity文件,其内容如下:
package com.liuhaoyu; import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
只是简单的导入主布局文件main.xml,下面来看主布局文件的内容:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dp"
android:text="Android绘图示例" /> <com.liuhaoyu.MyView
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
在主布局文件中导入了一个自定义的视图类com.liuhoayu.MyView,我们在这个类中完成绘图操作,其内容如下:
package com.liuhaoyu; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View; public classMyView extendsView { public MyView(Context context,AttributeSet attrs) {
super(context, attrs);
} @Override
protected void onDraw(Canvas canvas) {
Paintpaint=newPaint();
paint.setColor(Color.RED);
paint.setShadowLayer(5,10, 10, Color.rgb(180, 180, 180));
canvas.drawRect(0,0, 60, 60, paint); //绘制弧
paint.setColor(Color.YELLOW);
RectFrectf=newRectF(70, 0, 150, 70);
canvas.drawArc(rectf,0, 60, true,paint); //绘制圆形
paint.setColor(Color.GRAY);
canvas.drawCircle(100,150, 30, paint); //绘制一条线
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
canvas.drawLine(30,250, 150, 250, paint); super.onDraw(canvas);
} }
Android应用开发学习笔记之绘图的更多相关文章
- Android应用开发学习笔记之播放音频
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...
- android移动开发学习笔记(二)神奇的Web API
本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice ...
- Android应用开发学习笔记之事件处理
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...
- Android应用开发学习笔记之AsyncTask
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...
- [Android游戏开发学习笔记]View和SurfaceView
本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...
- Android应用开发学习笔记之Fragment
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Fragment翻译成中文就是“碎片”.“片断”的意思,Fragment通常用来作为一个Activity用户界面的一 ...
- Android应用开发学习笔记之菜单
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android中的菜单分为选项菜单(OptionMenu)和上下文菜单(Context Menu).通常使用菜单资源 ...
- Android应用开发学习笔记之Intent
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Intent是什么呢?来看Android官网上的定义: An intent is an abstractdescri ...
- Android应用开发学习笔记之多线程与Handler消息处理机制
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 和JAVA一样,Android下我们可以通过创建一个Thread对象实现多线程.Thread类有多个构造函数,一般通 ...
随机推荐
- weblogic公布的项目用途myeclipse正常启动,点击startWeblogic.cmd报错解决方案
今天在做项目中遇到的问题.使用weblogic公布的项目,使用myeclipse正常启动,但点击startWeblogic.cmd会报错.我提出了一个class not found.楚是什么问题.后来 ...
- Bmp 解析 (2013-09-09 19:30:41)
bmp 图片结构 位图格式(bmp)是显示图片的基本格式,其文件扩展名为*.BMP. 在Windows下,任何各式的图片文件(包括视频播放)都要转化为位图才能显示出来,其他各种格式的图片文件是在位图格 ...
- VS2010 ,工程文件减肥
写一个bat文件来清理VS2010工程文件. 将其放入到工程文件夹下,双击即可自动将sdf,ipch等占用空间很大的文件删除. 这样的方式较之于转移浏览数据库文件的位置而言更为灵活一些,不用特别的设置 ...
- Steve Yegge:Google面试秘籍
我憋了很长时间想写点关于去Google面试的秘籍.不过我总是推迟,因为写出来的东西会让你抓狂.很可能是这样.如果按统计规律来定义"你"的话,这文章很可能让你不爽. 为啥呢?因为啊- ...
- Hibernate 一对一关联映射
package com.entity; import javax.persistence.Entity; import javax.persistence.OneToOne; @Entity publ ...
- 01-Foundation简介、NSObject、copy、NSString
目录: 一.Foundation常用类 二.Foundation简介 三.NSObject 四.NSString 回到顶部 一.Foundation常用类 1 NSObject.NSString.NS ...
- MySQL中select * for update锁表的问题(转)
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料 ...
- [置顶] 正则表达式应用:匹配email地址
email的组成主要有三部分 1用户名部分 2@ 3域名部分 1用户名部分 用户名一般有数值字母下划线组成,所以正则表达式为:[\da- ...
- PHP - 表单与验证
第11章 表单与验证 学习要点: 1.Header()函数 2.接收及验证数据 我们对Web感兴趣,认为它有用的原因是其主要通过基于HTML的表单发布和收集信息的能力.这些表单用来鼓励网站的反馈.进行 ...
- Windows下用WinSCP传输数据到Linux上
Scenario:最近公司做的一个项目,UI部分我是使用python在编译时做localization的,是linux下运行的,但是开发是在windows下进行的每次编译后都要手动通过WinSCP这个 ...