博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android graphic:canvas
阅读量:6570 次
发布时间:2019-06-24

本文共 2474 字,大约阅读时间需要 8 分钟。

 

canvas中包含了作图的方法。 完成作图过程,最基本的四大组件是,canvas, bitmap, drawing prmitive, paint. 其中canvas是画布,包含了作图的方法。作图方法最终需要保存在bitmap当中。 作图的图元,如矩形,轨迹,字,bitmap(是一个图形),paint相当于颜料,它指定了作图的颜色和作图的风格。
 
利用canvas作图,有几种方法,一般而言,用户使用view布局作图,这种方法适合对性能不敏感,并且控件不需要动态改变的情况。
 
如果用户需要自己作图,如video game。则有两种方法。
1)可以直接利用view,重载onDraw方法,调用canvas的drawing calls来作图;这种作图过程占用的是UI thread.
 
2) 或者利用surfaceview作图。这种作图方法会创建单独的thread,作图更快速。
 
 
以上的总结来自于这篇文章,它介绍了如何使用canvas作图的基本方法。
 
 
 
 
下面两篇文章给出了实例,如何在canvas上,利用custom view作图
 
 
 
下面的代码实例中,显示了如何利用canvas 往surfaceview作图。
 
 
 
package org.example.sudoku;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;import android.view.animation.Animation;public class MySurfaceView extends SurfaceView implements Callback, Runnable {// 备注1	private SurfaceHolder sfh;	private Thread th;	private Canvas canvas;	private Paint paint;	private int ScreenW, ScreenH;	public MySurfaceView(Context context) {		super(context);		th = new Thread(this);		sfh = this.getHolder();		sfh.addCallback(this); // 备注1		paint = new Paint();		paint.setAntiAlias(true);		paint.setColor(Color.RED);		this.setKeepScreenOn(true);// 保持屏幕常亮	}	@Override	public void startAnimation(Animation animation) {		super.startAnimation(animation);	}	public void surfaceCreated(SurfaceHolder holder) {		ScreenW = this.getWidth();// 备注2		ScreenH = this.getHeight();		th.start();	}	private void draw() {		try {			canvas = sfh.lockCanvas(); // 得到一个canvas实例			canvas.drawColor(Color.WHITE);// 刷屏			canvas.drawText("Himi", 100, 100, paint);// 画文字文本			canvas.drawText("这就是简单的一个游戏框架", 100, 130, paint);		} catch (Exception ex) {		} finally { // 备注3			if (canvas != null)				sfh.unlockCanvasAndPost(canvas); // 将画好的画布提交		}	}	public void run() {		while (true) {			draw();			try {				Thread.sleep(100);			} catch (InterruptedException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		}	}	public void surfaceChanged(SurfaceHolder holder, int format, int width,			int height) {	}	public void surfaceDestroyed(SurfaceHolder holder) {		// TODO Auto-generated method stub	}}

代码解释:

0) surfaceview初始化的时候,创建了一个thread。因为这个surfaceview 继承与runnable接口,所以this指针可以传给这个thread.

当这个thread开始运行时,它会从this.run ()开始运行。

1) surface创建的时候,会调用到surfaceCreated()。这个函数中调用了一个thread.start()。这样这个thread就运行在run()函数当中。

2)run函数调用draw()方法,绘制图形。

 

  

 
 
 
 

转载于:https://www.cnblogs.com/geeks/p/3283231.html

你可能感兴趣的文章
mysql-锁表机制分析(转)
查看>>
Zabbix3.0安装与部署(centos7)
查看>>
layerdate一款很好用日期插件
查看>>
Eclipse中Errors occurred during the build最简单的解决方法
查看>>
(转) 为什么选择.NETCore?
查看>>
phpexcel科学计数法
查看>>
python 简单了解namedtuple
查看>>
【转】CSDN离线网页html文件自动跳转
查看>>
Linux I/O优化 磁盘读写参数设置
查看>>
Downloadmanager实现app实现的升级下载使用
查看>>
注解,多线程
查看>>
联合体以及如何调出内存窗口
查看>>
Cstring到string
查看>>
关于对编译原理第二次作业的总结
查看>>
2.python基础——math(转载)
查看>>
web前端知识总结
查看>>
Storm
查看>>
HDU-1058 Humble Numbers 暴力 Or 动态规划
查看>>
Redis4.0支持的新功能说明
查看>>
echo,print(),print_r(),sprintf(),var_dump()的区别
查看>>