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. Windows 2008 卸载 IIS7 批处理

    @echo offcolor 0aecho 正在卸载IIS功能,这可能需要几分钟时间...start /w pkgmgr /uu:IIS-WebServerRole;WAS-WindowsActiva ...

  2. phpmyadmin常见错误

    phpmyadmin用root无法登录(username和password都正确) 解决: 看mysqlclient能否够登录(我遇到的是不能登录),若无法登录就更改rootpassword,改好后就 ...

  3. 1711 Number Sequence(kmp)

    Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...

  4. Asp.Net超时问题汇总

    在数据库或者请求操作时,如果选择的时间段过短或操作数据量过大,就会遇到"请求超时"的的问题,网络上提供很多解决方案,但普遍不完善,根据个人经验及参考网络解决方案,先将其汇总如下: ...

  5. C#操作Xml:通过XmlDocument读写Xml文档

    什么是Xml? Xml是扩展标记语言的简写,是一种开发的文本格式.关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210.如果你不知道 ...

  6. No bean named &#39;sessionFactory&#39; is defined

    1.错误叙述性说明 严重:Servlet service() for servlet default threw exception . org.springframework.beans.facto ...

  7. 【百度地图API】如何制作多途经点的线路导航——驾车篇

    原文:[百度地图API]如何制作多途经点的线路导航--驾车篇 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ----- ...

  8. iOS_22自定义键盘工具栏

    最后效果图: Main.storyboard KeyboardTool.xib watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ ...

  9. JS中5秒中跳转到其他页面

    原文:JS中5秒中跳转到其他页面 <head> <meta http-equiv="Content-Type" content="text/html; ...

  10. angularJS之站在jQuery的肩膀上

    jQuery:用更少的代码,实现更强悍的功能 托互联网日新月异发展的福,浏览器变成了人们接入互联网的入口,而JavaScript 这个曾经的小语种,终于成功地站到了舞台的中央,唤起了开发者的兴趣. 浏 ...