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

本文共 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

你可能感兴趣的文章
Spring Cloud:多环境配置、eureka 安全认证、容器宿主机IP注册
查看>>
【leetcode】667. Beautiful Arrangement II
查看>>
【leetcode】955. Delete Columns to Make Sorted II
查看>>
JDK源码阅读-Integer
查看>>
Java修行之路
查看>>
接口(工厂模式&代理模式)
查看>>
3月个人随笔
查看>>
netty入门
查看>>
iOS 组件化流程详解(git创建流程)
查看>>
搜索关键字高亮显示,就比微信多个多音字搜索
查看>>
1303: [CQOI2009]中位数图
查看>>
在数组的开头插入键值对
查看>>
LTTng
查看>>
常用模块
查看>>
HTTPS = HTTP + SSL
查看>>
Copy修饰的NSArray
查看>>
eclipse新建web项目
查看>>
gnuplot
查看>>
GraphQL(三):GraphQL集成SpringBoot原理
查看>>
Balloons
查看>>