android简单的GDI绘图方法
2012-04-25 19:38
344 查看
参照Android中SurfaceView的使用示例,写了个最简单的绘图应用。
在屏幕上画了个红色的矩形框。
这里使用的View不是普通的类型,因为普通类型都是有UI线程来绘制的。SurfaceView可使用独立线程绘制,比如以前也使用过,用于视频输出,见编写简单自定义VideoView。
此外,还需要使用SurfaceHolder接口,它是用于处理SurfaceView包含的Surface的,Surface可直译为表面,可以看作是一个可绘制的视图部分。需要通过SurfaceHolder来操作它。
Surface可以设置Canvas,即画布,顾名思义,是用来作画的。Canvas涉及到四个基本对象概念:
Bitmap,位图,可以看作是矩形像素点的集合
Canvas,画布,通过Canvas写入Bitmap
基本的作画元素,比如矩形框Rect对象,作画路径Path对象,文本以及位图Bitmap
Paint,描述作画的颜色以及风格(比如是填满,还是只画线条等)
以上是作画需要了解的静态对象和结构,具体动作,需要通过SurfaceHolder的Callback接口来实现。开发者实现该接口,然后由Android回调来绘制所需的内容。
分析一下源代码,Activity代码很简单,这里都没用到layout文件:
主要看MySurfaceView的实现:
主要代码就是加入Callback实现的回调。
只需实现surfaceCreated方法就可以完成红色矩形框的绘制。
在绘制前,需要得到Canvas对象,通过锁住SurfaceHolder得到。这时才可以开始对Canvas编辑。编辑完毕后,想着解锁,调用unlockCanvasAndPost可做到这一点。该方法还会提交编辑,在屏幕上显示刚刚编辑的内容。
如果忘记调用unlockCanvasAndPost方法,将不能写入到屏幕,而且会造成应用失去响应,报错是:
ERROR/ActivityManager(92): Reason: keyDispatchingTimedOut
本例画的内容很简单,创建了Paint,并且声明了颜色。矩形的生成参数和iOS有区别,前者是取左上定点和右下定点的坐标,后者是取左上定点坐标,以及矩形的长和宽。觉得后者比较直观一些。
另外,了解了一下Paint中style的含义,比如设置:
paint.setStyle(Paint.Style.STROKE);
则画出来的矩形是这样的:
在屏幕上画了个红色的矩形框。
这里使用的View不是普通的类型,因为普通类型都是有UI线程来绘制的。SurfaceView可使用独立线程绘制,比如以前也使用过,用于视频输出,见编写简单自定义VideoView。
此外,还需要使用SurfaceHolder接口,它是用于处理SurfaceView包含的Surface的,Surface可直译为表面,可以看作是一个可绘制的视图部分。需要通过SurfaceHolder来操作它。
Surface可以设置Canvas,即画布,顾名思义,是用来作画的。Canvas涉及到四个基本对象概念:
Bitmap,位图,可以看作是矩形像素点的集合
Canvas,画布,通过Canvas写入Bitmap
基本的作画元素,比如矩形框Rect对象,作画路径Path对象,文本以及位图Bitmap
Paint,描述作画的颜色以及风格(比如是填满,还是只画线条等)
以上是作画需要了解的静态对象和结构,具体动作,需要通过SurfaceHolder的Callback接口来实现。开发者实现该接口,然后由Android回调来绘制所需的内容。
分析一下源代码,Activity代码很简单,这里都没用到layout文件:
1 2 3 4 | public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(new MySurfaceView(this)); } |
1 2 3 45 | package com.easymorse.surface; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class MySurfaceView extends SurfaceView { public MySurfaceView(Context context) { super(context); this.getHolder().addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void surfaceCreated(final SurfaceHolder holder) { new Thread() { public void run() { Canvas canvas=holder.lockCanvas(); Paint paint=new Paint(); paint.setColor(Color.RED); canvas.drawRect(new Rect(40, 60, 180, 180), paint); holder.unlockCanvasAndPost(canvas); } }.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } } |
只需实现surfaceCreated方法就可以完成红色矩形框的绘制。
在绘制前,需要得到Canvas对象,通过锁住SurfaceHolder得到。这时才可以开始对Canvas编辑。编辑完毕后,想着解锁,调用unlockCanvasAndPost可做到这一点。该方法还会提交编辑,在屏幕上显示刚刚编辑的内容。
如果忘记调用unlockCanvasAndPost方法,将不能写入到屏幕,而且会造成应用失去响应,报错是:
ERROR/ActivityManager(92): Reason: keyDispatchingTimedOut
本例画的内容很简单,创建了Paint,并且声明了颜色。矩形的生成参数和iOS有区别,前者是取左上定点和右下定点的坐标,后者是取左上定点坐标,以及矩形的长和宽。觉得后者比较直观一些。
另外,了解了一下Paint中style的含义,比如设置:
paint.setStyle(Paint.Style.STROKE);
则画出来的矩形是这样的:
相关文章推荐
- android_最简单方法根据经纬度信息获取到当前的位置信息
- [简单]Android中的事件分发各方法
- android 滑动出现删除按钮 - swipelistview 入口方法以及简单布局说明
- Android Service使用方法--简单音乐播放实例
- Android开发中简单设置启动界面的方法
- android Mediaplayer各种属性和方法简单介绍
- Android_视频播放的简单使用方法
- c# GDI+简单绘图(一)
- Android编程之简单启动画面实现方法
- Android中Canvas绘图方法的实现
- c# GDI+简单绘图
- C# GDI+简单绘图
- Android给RecyclerView添加头(Header)和尾(Footer)和分标题(Title)——最简单的两种方法
- Android开发之背景动画简单实现方法
- Android裁剪图片最简单方法(调用系统的)
- Android排序数组的简单方法
- android绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- 超简单方法搭建Eclipse下的Android NDK
- Android倒计时简单方法实现
- 绘图程序中线段拾取判断的一种简单方法