public class MainActivity extends Activity {

GrameView grameView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

grameView=new GrameView(this);

setContentView(grameView);

}

public boolean onKeyDown(int code,KeyEvent event) {

switch (code) {

case KeyEvent.KEYCODE_DPAD_DOWN:

grameView.y+=3;

break;

case KeyEvent.KEYCODE_DPAD_UP:

grameView.y-=3;

break;

default:

break;

}

return true;

}

}

package com.example.examples_05_02_01;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

public class GrameView extends SurfaceView implements SurfaceHolder.Callback,Runnable {

//控制循环

boolean mbLoop = false;

//定义SurfaceHolder对象

SurfaceHolder mSurfaceHolder = null;

int miCount = 0;

int y = 50;

public GrameView(Context context)

{

super(context);

// 实例化SurfaceHolder

mSurfaceHolder = this.getHolder();

// 添加回调

mSurfaceHolder.addCallback(this);

this.setFocusable(true);

mbLoop = true;

}

// 在surface的大小发生改变时激发

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)

{

}

// 在surface创建时激发

public void surfaceCreated(SurfaceHolder holder)

{

//开启绘图线程

new Thread(this).start();

}

// 在surface销毁时激发

public void surfaceDestroyed(SurfaceHolder holder)

{

// 停止循环

mbLoop = false;

}

// 绘图循环

public void run()

{

while (mbLoop)

{

try

{

Thread.sleep(200);

}

catch (Exception e)

{

}

//加锁

synchronized( mSurfaceHolder )

{

Draw();

}

}

}

// 绘图方法

public void Draw()

{

//锁定画布,得到canvas

Canvas canvas= mSurfaceHolder.lockCanvas();

if (mSurfaceHolder==null || canvas == null )

{

return;

}

if (miCount < 100)

{

miCount++;

}

else

{

miCount = 0;

}

// 绘图

Paint mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setColor(Color.BLACK);

//绘制矩形--清屏作用

canvas.drawRect(0, 0, 320, 480, mPaint);

switch (miCount % 4)

{

case 0:

mPaint.setColor(Color.BLUE);

break;

case 1:

mPaint.setColor(Color.GREEN);

break;

case 2:

mPaint.setColor(Color.RED);

break;

case 3:

mPaint.setColor(Color.YELLOW);

break;

default:

mPaint.setColor(Color.WHITE);

break;

}

// 绘制矩形--后面我们将详细讲解

canvas.drawCircle((320 - 25) / 2, y, 50, mPaint);

// 绘制后解锁,绘制后必须解锁才能显示

mSurfaceHolder.unlockCanvasAndPost(canvas);

}

}

SufaceView(绘图类)的更多相关文章

  1. JavaScript绘图类 (DIV绘图)

    主要的图形算法抄自一个叫w_jsGraphics.js的类库,第一次看到那个库的时候,感觉那是十分神奇的存在.不过估计现在那个库早就已经找不到了. 这是很早之前的一个DIV绘图类,那时候VML+SVG ...

  2. Html5游戏框架createJs组件--EaselJS(二)绘图类graphics

    有端友问我是否有文档,有确实有,但没有中文的,只有英文的,先提供浏览地址供大家参考学习createJs英文文档.                        EaselJS其实主要就是createJ ...

  3. Qt Gui 第五章绘图类

    双缓冲 void Plotter::refreshPixmap() { pixmap = QPixmap(size()); pixmap.fill(, ); QPainter painter(& ...

  4. CanVas类(绘图类)

    知识点: Canvas():创建一个空的画布,可以使用setBitmap()方法来设置具体的画布 Canvas(Bitmap bitmap):以bitmap对象创建一个画布,则将内容都绘制在Bitma ...

  5. Cocos2d-x 3.2学习笔记(三)学习绘图API

    关于cocos2d-x 3.2 版本的绘图方法有两种 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适的 ...

  6. JAVA学习绘图颜色及其笔画属性设置字体显示文字

    package com.graphics; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date; im ...

  7. JAVA学习AWT绘图

    package com.graphics; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel ...

  8. iPhone图形开发绘图小结

    iPhone图形开发绘图教程是本文要介绍的内容,介绍了很多关于绘图类的使用,先来看详细内容讲解. 1.绘图总结: 绘图前设置: CGContextSetRGBFillColor/CGContextSe ...

  9. qt超强精美绘图控件 - QCustomPlot一览 及 安装使用教程

    1.概述 QCustomPlot 是一个超强超小巧的qt绘图类,非常漂亮,非常易用,只需要加入一个qcustomplot.h和qcustomplot.cpp文件即可使用,远比qwt方便和漂亮,可以自己 ...

随机推荐

  1. linux的自动化操作相关使用方法汇总(转)

    linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应.日志分割.数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务.本篇博文介 ...

  2. JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

    . 概要 1.1 JDBC概念 JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口.JDBC中包含了一组由(Java)语言 ...

  3. 省前训练...Orz

    A. 异形卵 Time Limit: 1000ms Memory Limit: 128000KB 64-bit integer IO format:      Java class name: Sub ...

  4. Eclipse扩展安装插件方式

    Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...

  5. ABP领域层——仓储(Repositories)

    ABP领域层——仓储(Repositories) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是 ...

  6. jvm对大对象分配内存的特殊处理(转)

    前段日子在和leader交流技术的时候,偶然听到jvm在分配内存空间给大对象时,如果young区空间不足会直接在old区切一块过去.对于这个结论很好奇,也比较怀疑,所以就上网搜了下,发现还真有这么回事 ...

  7. javascript系列之执行上下文

    原文:javascript系列之执行上下文 写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言.未来想从事前端方面的工作,提前把自己的知识梳理一下.前面写了些 ...

  8. jquery.validate1.13

    jquery.validate新的写法(jquery.validate1.13.js) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  9. httppost body的实现, 和body是gb2312等编码的实现

    使用的是http4.X 版本,里面推荐使用的post是key value的形式 List<NameValuePair> formparams = new ArrayList<Name ...

  10. python_小爬虫

    import urllib.request as request import urllib.parse as parse import string print(""" ...