package com.example.test;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView; /**
* 继承SurfaceView
* 实现SurfaceHolder.Callback。给SurfaceHolder用的
* 创建SurfaceHolder。并addCallback,SurfaceView的一切都有SurfaceHolder控制
*/
public class MySurfaceView extends SurfaceView
implements Callback, Runnable {
//SurfaceView基本
private SurfaceHolder sfh;//操控SurfaceView
private Paint p;
private Canvas c;
//线程
private Thread t;
private boolean flag;
//数据
private int screenW, screenH;
private int xx = 100, yy = 100; public MySurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);
p = new Paint();
p.setColor(Color.RED);
} @Override
public boolean onTouchEvent(MotionEvent event) {
xx = (int) event.getX();
yy = (int) event.getY();
return true;
} public void myDraw() {
try {
//当SurfaceView不可编辑或尚未创建。会返回null
c = sfh.lockCanvas();
if(c != null) {
c.drawColor(Color.GREEN);//刷屏
c.drawText("me", xx, yy, p);//画
}
} catch(Exception e) { } finally {
if(c != null) {
sfh.unlockCanvasAndPost(c);
}
}
} //游戏逻辑
public void logic() {
} @Override
public void surfaceCreated(SurfaceHolder holder) {
screenW = this.getWidth();
screenH = this.getHeight();
//线程的初始化和启动都写在create里面
flag = true;
t = new Thread(this);
t.start();
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false;
} @Override
public void run() {
while (flag) {
//刷屏时间保持一致
//通常会在10~20帧左右
//每秒20帧:1000ms/20=50ms每帧
long start = System.currentTimeMillis();
myDraw();
logic();
long end = System.currentTimeMillis();
try {
if(end - start < 50) {
Thread.sleep(50 - (end-start));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

SurfaceView的生命周期:

SurfaceView的经典写法的更多相关文章

  1. Tkinter经典写法

    1.继承 tkinter.Frame 类,实现类的基本写法 2.创建主窗口及主窗口大小位置及标题 3.将需要添加的组件放入到类中进行创建, 继承的 Frame 类需要使用 master 参数作为父类的 ...

  2. javascript js表示中文日期的经典写法

    <div id="time"> <script>document.getElementById('time').innerHTML=new Date().t ...

  3. 下拉菜单得经典写法html5

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 操作argc, argv的经典写法

    [问题] 我在看boost源代码的时候看到如下的代码, template<class charT> basic_command_line_parser<charT>:: bas ...

  5. Android SurfaceView实战 带你玩转flabby bird (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...

  6. 中间自适应,左右定宽的两种经典布局 ---- 圣杯布局 VS 双飞翼布局

    一.引子 最近学了些js框架,小有充实感,又深知如此节奏的前提需得基础扎实,于是回头想将原生CSS和Javascript回顾总结一番,先从CSS起,能集中它的就在基础的布局上,便查阅了相关资料,将布局 ...

  7. Checkbutton基本写法

    1.Checkbutton(self 窗口对象,text 按钮显示内容,variable 绑定变量->一起变化, onvalue 用户点击时得到的值,offvalue 没有点击得到的值) sel ...

  8. Label 组件基本写法

    1.width,height 指定区域大小 文本 汉字 2 个字节 2.font 指定字体和字体大小 font(font_name,size) 3.image 显示在 Label 上的图像 支持 gi ...

  9. c#.net单例模式的学习记录!

    一. 单例(Singleton)模式 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其它对象提供这一实例. 单例模式应用: 每台计算机可以有若干个打印机 ...

随机推荐

  1. 架构妄想:AJAX + REST

    William Vambenepe的最新文章,AJAX + REST是最新的架构妄想,让我们回想起了一个具有15年历史的架构,它曾被寄期望对Web产生革命性的影响. 在该架构里,Web服务器将返回包含 ...

  2. “equals”和“==”

    “equals”和“==” 首先对于基本类型来说,当值相同的时候,地址也是相同的,所以可以使用“==”进行比较,但是对于equals来说,equals比较的是栈中引用指向的堆中的对象.所以在比较对象的 ...

  3. Submile text3 安装使用技巧

    第一次用submile text3,发现还是有一些东西需要配置的,而且submile text3是最近发布的,和原来的submile text2还是有一些区别的.这两天自己配置了一下,用起来感觉还是不 ...

  4. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  5. linux程序与进程内存结构

    1.可执行文件结构: 1)代码区:包含操作码和操作对象.常量数据(const声明).立即数,代码区是共享的, 只提供只读. 2)全局/静态数据区:包含被初始化的全局数据和初始化静态数据. 3)未初始化 ...

  6. Xamarin XAML语言教程构建ControlTemplate控件模板 (二)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于ContentView中.代码如下: &l ...

  7. 微信小程序开发教程(八)视图层——.wxml详解

    框架的视图层由WXMKL(WeiXin Markup language)与WXSS(WeiXin Style Sheet)编写,由组件进行展示. 对于微信小程序而言,视图层就是所有.wxml文件与.w ...

  8. [BZOJ1559]密码

    数据范围特别小,考虑状压DP 因为要求给定的字符串在母串中出现,所以可以用AC自动机辅助DP 因为AC自动机不能处理模式串互相包含的情况,所以先把互相包含的串去掉(暴力就行,数据范围太小) 因为要状压 ...

  9. iOS开发——给ImageView添加点击事件

          给ImageView添加点击事件   1: cell.pictureView.userInteractionEnabled = YES; 2: UITapGestureRecognizer ...

  10. 解决Visual Studio 2013 XAML设计器异常

    今天使用Visual Studio 2013打开一个windows 应用商店程序的时候,发现出现如下异常:    at System.Windows.Input.Cursor.LoadFromFile ...