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;//操控SurfaceViewprivate 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);}@Overridepublic boolean onTouchEvent(MotionEvent event) {xx = (int) event.getX();yy = (int) event.getY();return true;}public void myDraw() {try {//当SurfaceView不可编辑或尚未创建。会返回nullc = 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() {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();//线程的初始化和启动都写在create里面flag = true;t = new Thread(this);t.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {flag = false;}@Overridepublic 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的生命周期:
转载于:https://www.cnblogs.com/mthoutai/p/6795562.html
SurfaceView的经典写法相关推荐
- leetcode79. 单词搜索 网格地图搜索+回溯经典写法啦
给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字 ...
- mysql的sql经典写法收录
1.表关联更新: 1 2 3 select a.`user`,a.`host`,b.db from mysql.`user` as a left join mysql.db as b on (a. ...
- 操作argc, argv的经典写法
[问题] 我在看boost源代码的时候看到如下的代码, template<class charT>basic_command_line_parser<charT>::basic ...
- js插件的经典写法与总结
之前写了一篇关于js插件的方法,可以传入参数,当时不能够拓展方法,而且模式也不是很好,虽然能够满足一定的业务要求.下面是对js插件的完善,可以实现参数传入,方法拓展,链式操作,设计模式更加清晰. &l ...
- 园内ORM讨论的经典文章及评论[转]
转自:http://www.cnblogs.com/robinzhang/archive/2007/01/13/619738.html 考虑整合一个ORM框架,顺手把找到的资料索引一下,供大家参考. ...
- 电商分类模块写法_模块化写作——网络小说创作之典藏秘籍
1.模块化,是一种将复杂事物分解为多个模块,从而获得效率与质量的操作手段.这个概念常出现在与科技相关的领域里.其实,模块化在文学领域里也很重要. 例如,小说的情节被分解为四个模块:开端.发展.高潮.结 ...
- js中foreach有三种写法,你知道吗
JavaScript的foreach 初始化 写法 1.经典写法 2.js的foreach 3.es6的foreach 初始化 先创建一个h5文件,并定义一个数组 <!DOCTYPE html& ...
- 【转载文章】批处理经典入门教程!(从不懂到高手)____附加我的学习笔记
原文地址https://www.jb51.net/article/7131_all.htm 这篇文章好像是51jb上推荐的比较好入门的一篇了,看了全文确实很有收获 文章推测写与2000-2004年之间 ...
- Android SurfaceView实战 带你玩转flabby bird (上)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请标 ...
最新文章
- Spring单实例、多线程安全、事务解析
- 「hadoop」hadoop启动需要相关的命令(仅供本人使用)
- 第四天2017/03/31(下午2:结构体、数组)
- [羊城杯 2020]GMC
- C段 192.168.1.15/28与192.168.1.16/28的区别
- 【ArcGIS风暴】基于ArcGIS空间分析功能研究渭河流域镇驻地空间分布格局
- shell基础——变量定义
- 关于String,StringBuffer和StringBuilder之间的区别和联系
- 【原】 图片预览 Image preview
- 51Nod - 1086 (多重背包+2进制优化)
- “SCSA-S学习导图+”系列:Windows下的WEB系统环境搭建
- 硕思闪客精灵怎么导出flash(gif)动画,flash游戏源文件疑难问题解答(注册码)
- Flutter之以阿里云图标库为例,使用多色图标
- 3种夸克有多少组合?
- python readcsv读取gbk编码文件_python读写csv文件
- 多项式, FTT, NTT小结
- graylog+kafka+zookeeper(单机测试及源码),kafka+zookeeper组件部署(二)
- docker之卷10
- IaaS PaaS SaaS云服务三种应用模式
- 如何在pycharm中安装PIL模块
热门文章
- 根据指定的commit查找对应的log
- 请问asp.net网页里能显示tiff格式的图片吗?
- 【零基础学Java】—Java运行机制(三)
- 【Vue2.0】—Vue监视数据的原理(五)
- Codeforces Round #628 (Div. 2)C - Ehab and Path-etic MEXs
- 买手机,是不是运行内存大,手机用久了也不卡?
- 人到了中年在职场中就应该保持内敛的心态
- 二手车没有车险能过户吗?
- 李开复曾说:“买车是一生最坏的投资”,真的是这样吗?对此你怎么看?
- 鲍鱼的“几头”是什么意思?什么样的好吃?