原创:http://byandby.javaeye.com/blog/825330

当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了。在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西。除了在画布上绘制之外,还需要设置一些关于画布的属性,比如,画布的颜色、尺寸等。下面来分析Android中Canvas有哪些功能,Canvas提供了如下一些方法:
Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。
Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,则将内容都绘制在bitmap上,因此bitmap不得为null。
Canvas(GL gl): 在绘制3D效果时使用,与OpenGL相关。
drawColor: 设置Canvas的背景颜色。
setBitmap: 设置具体画布。
clipRect: 设置显示区域,即设置裁剪区。
isOpaque:检测是否支持透明。
rotate: 旋转画布
setViewport: 设置画布中显示窗口。
skew: 设置偏移量。

GameView的代码:

package cn.edu.wtu.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
//
public class GameView extends View implements Runnable{

private Paint mPaint;
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mPaint=new Paint();
new Thread(this).start();
Log.e("debug","GameView constructor");
}

public void onDraw(Canvas canvas){

super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
mPaint.setAntiAlias(true);
//left top right bottom
canvas.clipRect(0,0,280,260);
//先锁定画布
canvas.save();
//旋转画布
//顺时针旋转
canvas.rotate(45.0f);
//设置颜色及绘制矩形
mPaint.setColor(Color.RED);
canvas.drawRect(new Rect(15,15,140,70),mPaint);
//解除画布锁定
canvas.restore();
//设置颜色及绘制另一个矩形
mPaint.setColor(Color.GREEN);
//left top rigth bottom
canvas.drawRect(new Rect(150,75,260,120),mPaint);
Log.e("debug","draw.....");
}

@Override
public void run() {
// TODO Auto-generated method stub
while(!Thread.currentThread().isInterrupted()){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
Thread.currentThread().interrupt();
}
//使用该函数可以直接在线程中更新界面
postInvalidate();
}
}
//触笔事件
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return super.onTouchEvent(event);
}

//按键弹起事件
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyUp(keyCode, event);
}
//按健按下事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyMultiple(keyCode, repeatCount, event);
}

}

测试用的Activity

package cn.edu.wtu;

import android.app.Activity;
import android.os.Bundle;
import cn.edu.wtu.view.GameView;

public class TestView extends Activity {

private GameView mGameView=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mGameView=new GameView(this);
setContentView(mGameView);
}
}

结果就不贴图了,调试信息:

03-10 09:05:24.390: ERROR/debug(627): GameView constructor
03-10 09:05:24.680: ERROR/debug(627): draw.....
03-10 09:05:24.918: ERROR/debug(627): draw.....
03-10 09:05:25.429: ERROR/debug(627): draw.....

解说:

newRect(150,75,260,120)

left top right bottom

不是左 上 右 下

left : 矩形左边的X坐标 150 ---->图片中的A点
top: 矩形顶部的Y坐标 75 ---->图片中的B点
right : 矩形右边的X坐标 260 ----->图片中的C点
bottom: 矩形底部的Y坐标 120 ------->图片中的D点

更多相关文章

  1. Android电子白板
  2. Android(安卓)的提示接口-Toast
  3. Android之基础复习2D图形一
  4. Android(安卓)地图 —— 百度地图
  5. Android基于开源项目的WheelView的时间、地址联动选择对话框
  6. android开发-使用Dialog AlertDialog
  7. ExpandableListView用法和实例
  8. android图形系统详解:View layer
  9. android view类分析

随机推荐

  1. Android布局之LinearLayout weight属性的
  2. Android学习系列(29)--App调试的几个命令
  3. Android Zipalign工具优化Android APK应
  4. Android实现宫格图片连续滑动效果
  5. Android(安卓)Geofence的学习(三)总结、Dem
  6. 移动Android开发-规范文档
  7. android 关于appcompat v7出错问题与解决
  8. Android中的AIDL
  9. Android自动解除系统锁屏
  10. android进程间服务通信示例