SurfaceView的经典写法
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的经典写法的更多相关文章
- Tkinter经典写法
1.继承 tkinter.Frame 类,实现类的基本写法 2.创建主窗口及主窗口大小位置及标题 3.将需要添加的组件放入到类中进行创建, 继承的 Frame 类需要使用 master 参数作为父类的 ...
- javascript js表示中文日期的经典写法
<div id="time"> <script>document.getElementById('time').innerHTML=new Date().t ...
- 下拉菜单得经典写法html5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 操作argc, argv的经典写法
[问题] 我在看boost源代码的时候看到如下的代码, template<class charT> basic_command_line_parser<charT>:: bas ...
- Android SurfaceView实战 带你玩转flabby bird (上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...
- 中间自适应,左右定宽的两种经典布局 ---- 圣杯布局 VS 双飞翼布局
一.引子 最近学了些js框架,小有充实感,又深知如此节奏的前提需得基础扎实,于是回头想将原生CSS和Javascript回顾总结一番,先从CSS起,能集中它的就在基础的布局上,便查阅了相关资料,将布局 ...
- Checkbutton基本写法
1.Checkbutton(self 窗口对象,text 按钮显示内容,variable 绑定变量->一起变化, onvalue 用户点击时得到的值,offvalue 没有点击得到的值) sel ...
- Label 组件基本写法
1.width,height 指定区域大小 文本 汉字 2 个字节 2.font 指定字体和字体大小 font(font_name,size) 3.image 显示在 Label 上的图像 支持 gi ...
- c#.net单例模式的学习记录!
一. 单例(Singleton)模式 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其它对象提供这一实例. 单例模式应用: 每台计算机可以有若干个打印机 ...
随机推荐
- 关于JAVA的守护进程
Java有两种线程:守护线程(Daemon Thread)与 用户线程(User Thread) 任何Java线程都可以是守护线程(Daemon Thread)或者 用户线程(User Thread) ...
- 微信支付报错:统一下单和拉起支付的appid不一致(原创)
微信支付报错:统一下单和拉起支付的appid不一致 错误码:-2 提示参考: 参考统一下单的API (谦信君原创,转载请注明来源) 原因排查: 我们做的是APP微信支付 客户端向我服务端发请求,获取预 ...
- *****git pull总结
当git clone之后,直接git pull它会自动匹配一个正确的remote url 是因为在config文件中配置了以下内容: 1 [branch "master"] 2 r ...
- PHP程序员的简单运维
所谓的简单运维就是保证自己开发的程序能正常运行和使用. 当一个程序员需要兼作运维时候需要掌握以下技能 1.linux系统基础命令和Windows Server操作 是基础中的基础,ls, rm, to ...
- Nmap——主机、端口扫描工具
nmap 其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统 . 这是百度给的介绍:http://baike.baidu.com/lin ...
- android 仿真器联网
1.查看仿真器dns C:\Users\meng\AppData\Local\Android\Sdk\platform-tools>adb shell 再输入 getprop 2.查看仿真器的名 ...
- HDU 1014 Uniform Generator(最大公约数,周期循环)
#include<iostream> #include <cstdio> #include <cstring> using namespace std; int m ...
- DP(悬线法)【P1169】 [ZJOI2007]棋盘制作
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...
- CSS选择符——分门别类
CSS选择符--分门别类 有时候,老是会对一些CSS选择器模模糊糊,傻傻分不清.今天花了点时间整理了一下,感觉世界清静了不少. 用XMIND做出了思维导图: 主要有11中选择器:元素.类ID.后代.子 ...
- [BZOJ 3152] 组合子逻辑
Link: BZOJ 3152 传送门 Solution: 喜闻乐见,gyz出的语文题,题意要看半小时 题意:使用最少的括号将序列分割,对于每个括号中的序列,设最左边的数为$num$,序列中元素个数为 ...