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)模式 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其它对象提供这一实例. 单例模式应用: 每台计算机可以有若干个打印机 ...
随机推荐
- 网关协议:CGI、FastCGI、WSGI
CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页. CGI CGI即通用网关接口(Common Ga ...
- oracle 11g在大表中添加字段及默认值--加速
今天遇到这个问题了.简单的增加语句,默认SQLPLUS执行,却会超时. 要增加客户端的TIMEOUT时间才可以解决.(感觉超过两三分钟,默认超时30秒) 另外, 也可以用两步操作(1,增加字段,2,修 ...
- IE67下去掉input边框
除了 border:none;之外 需要 border-color:#fff; overflow:hidden;
- a标签实现不跳转点击
<a class="tiao" href="./index.php"></a> JS实现无跳转a标签 <script type=& ...
- AC日记——Collectors Problem uva 10779
UVA - 10779 思路: 最大流: s向所有的贴纸的种类连边,流量为Bob拥有的数量: 然后,Bob的朋友如果没有这种贴纸,则这种贴纸向bob的朋友连边,容量1: 如果bob的朋友的贴纸很多大于 ...
- (八)for语句
(1)语法 (2)批量ping主机 这里有个重点就是把每次ping主机的动作放到后台运行 #!/bin/bash >ip.txt for i in {1..254} do ip=192.168. ...
- 【数形结合】Gym - 100923I - Por Costel and the Pairs
perechi3.in / perechi3.out We don't know how Por Costel the pig arrived at FMI's dance party. All we ...
- 5.4 集合的排序(Java学习笔记)(Collections.sort(),及Arrays.sort()底层分析)
1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...
- 求一个整数个位数之和 Exercise06_02
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求一个整数个位数之和 * */ public class Exercise ...
- httpclient4.3访问https
1.创建一个访问https的工具类 package org.aaa.tool;import java.io.File; import java.io.IOException; import java. ...