- 浏览: 252465 次
- 性别:
- 来自: 太原
最新评论
-
kinglo:
请问生成的文件怎么看?
Android 全局异常处理 -
yong7356:
学习一下。。。。。
Android Ant -
bzlring:
很好
Android 全局异常处理 -
M985300651:
難得一見的好教學
Android 自定义滚动视图 -
i5suoi:
thank you very much
Android 全局异常处理
MySurfaceView
package org.wp.activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * SurfaceHolder.Callback 接口: * 只要继承SurfaceView类并实现SurfaceHolder.Callback接口就可以实现一个自定义的SurfaceView了 * SurfaceHolder.Callback在底层的Surface状态发生变化的时候通知View, * SurfaceHolder.Callback具有如下的接口: * 1> surfaceCreated(SurfaceHolder holder):当Surface第一次创建后会立即调用该函数。 * 程序可以在该函数中做些和绘制界面相关的初始化工作, * 一般情况下都是在另外的线程来绘制界面, * 所以不要在这个函数中绘制Surface。 * 2> surfaceChanged(SurfaceHolder holder, int format, int width, int height): * 当Surface的状态(大小和格式)发生变化的时候会调用该函数, * 在surfaceCreated调用后该函数至少会被调用一次。 * 3> surfaceDestroyed(SurfaceHolder holder):当Surface销毁时会调用该函数 * * SurfaceHolder 类: * 它是一个用于控制surface的接口,它提供了控制surface的大小,格式,上面的像素,即监视其改变的。 * SurfaceView的getHolder()函数可以获取SurfaceHolder对象,Surface就在SurfaceHolder对象内。 * 虽然Surface保存了当前窗口的像素数据,但是在使用过程中是不直接和Surface打交道的, * 由SurfaceHolder的Canvas lockCanvas()或则Canvas lockCanvas()函数来获取Canvas对象, * 通过在Canvas上绘制内容来修改Surface中的数据。 * * 如果Surface不可编辑或则尚未创建调用该函数会返回null, * 在 unlockCanvas() 和 lockCanvas()中Surface的内容是不缓存的, * 所以需要完全重绘Surface的内容,为了提高效率只重绘变化的部分 * 则可以调用lockCanvas(Rect rect)函数来指定一个rect区域, * 这样该区域外的内容会缓存起来。 * * 在调用lockCanvas函数获取Canvas后,SurfaceView会获取Surface的 * 一个同步锁直到调用unlockCanvasAndPost(Canvas canvas)函数才释放该锁, * 这里的同步机制保证在Surface绘制过程中不会被改变(被摧毁、修改)。 * * 我没有在该surfaceview的初始化函数中将其 ScreenW 与 ScreenH 进行赋值, * 这里要特别注意,如果你在初始化调用ScreenW = this.getWidth(); 和 ScreenH = this.getHeight(); * 那么你将得到很失望的值 全部为0;原因是和接口Callback接口机制有关, * 当我们继承callback接口会重写它的surfaceChanged()、surfaceCreated()、surfaceDestroyed(), * 这几个函数当surfaceCreated()被执行的时候,真正的view才被创建,也就是说之前得到的值为0 , * 是因为初始化会在surfaceCreated()方法执行以前执行,view没有的时候我们去取屏幕宽高肯定是0, * 所以这里要注意这一点; * 这里我把draw的代码都try起来,主要是为了当画的内容中一旦抛出异常了,那么我们也能 在finally中执行该操作。 * 这样当代码抛出异常的时候不会导致Surface出去不一致的状态。 * 其实这就是一个简单的游戏架构了,当然还少了按键处理,声音播放等等。 * * @author wp * */ public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private static final String TAG = "MySurfaceView"; private SurfaceHolder sfh; private Thread th; private Paint paint; private Canvas canvas; private int ScreenW, ScreenH; public MySurfaceView(Context context) { super(context); sfh = this.getHolder(); sfh.addCallback(this); th = new Thread(this); paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.RED); this.setKeepScreenOn(true); } /** * 自己定义的draw()方法, 放在线程中不断调用的 */ private void draw() { try { Log.i(TAG, "draw()"); canvas = sfh.lockCanvas(); // 得到一个canvas实例 canvas.drawColor(Color.WHITE); // 刷屏 canvas.drawText("MySurfaceView", 100, 100, paint); // 画文字文本 canvas.drawText("这是一个简单的游戏框架", 100, 160, paint); } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) sfh.unlockCanvasAndPost(canvas); // 将画好的画布提交 } } @Override public void run() { while (true) { draw(); try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } } } @Override public void surfaceCreated(SurfaceHolder holder) { Log.i(TAG, "surfaceCreated()"); ScreenW = this.getWidth(); ScreenH = this.getHeight(); Log.i(TAG, "ScreenW:" + ScreenW + " ScreenH:" + ScreenH); th.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i(TAG, "surfaceChanged()"); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.i(TAG, "surfaceDestroyed()"); } }
发表评论
-
Android Gallery3D
2011-11-28 10:51 1983MainActivity package org.wp ... -
Android 自定义Gallery
2011-10-19 21:33 2919MainActivity package org.wp.ac ... -
Android 3D图片切换
2011-10-14 17:19 3497MainActivity package org.wp.ac ... -
Android C2DM
2011-10-07 16:36 2232AndroidC2DMDemo com.google. ... -
Android Ant
2011-10-03 20:31 2892build.xml <?xml version=&qu ... -
Android 电视关机动画
2011-09-14 13:28 1830MainActivity package org.wp.ac ... -
Android 图片倒影
2011-09-09 11:07 6298MainActivity package org.wp.ac ... -
Android 自定义滚动视图
2011-09-08 15:03 6860MainActivity package org.wp.ac ... -
Android 绘制心形
2011-09-06 15:18 6731MyLove package org.wp.activity ... -
Android 播放音频文件
2011-09-05 16:31 5824MainActivity package org.wp.ac ... -
Android 添加自定义SurfaceView
2011-08-29 17:19 7516MainActivity package org.wp.ac ... -
Android Looper
2011-08-28 11:10 2280LooperActivity package org.wp. ... -
Android AsyncTask
2011-08-27 15:21 1565AsyncTaskActivity package org. ... -
Android TimerTask
2011-08-26 22:16 4503TimerTaskActivity package org. ... -
Android Thread
2011-08-26 13:59 5610ThreadActivity package org.wp. ... -
Android 判断程序前后台状态
2011-08-25 13:26 6888AppStatusService package org.w ... -
注册界面
2011-08-23 20:57 1192MainActivity package org.wp.ac ... -
Android 半透明(二)
2011-08-18 20:02 1503TranslucentBlurActivity packag ... -
Android 半透明(一)
2011-08-18 17:08 1660TranslucentActivity package or ... -
游戏角色在屏幕行走
2011-08-18 11:32 1242MySurfaceView package org.wp.a ...
相关推荐
android surfaceview自定义拍照 绘制头像轮廓 注明:是借用网上的demo基础上进行修改的
SurfaceView游戏框架实例,讲解如何使用,如何掌握基础性东西
一个播放本地视频的播放器,可供使用和学习。 实现功能: 1、搜索制定目录下的本地视频,并显示缩略图及视频名称在列表上;...3、包括进度条,播放和暂停...SurfaceView + MediaPlayer,RecycleView,FloatingActionButton
【Android基础】(12)SurfaceView绘图API详解代码
本文主要介绍Android SurfaceView自定义方法,这里对SurfaceView的基础知识做了详解,并附简单的示例代码,以便参考,有需要的小伙伴可以参考下
android 使用SurfaceView实现小球高处落下并弹起的效果 此程序是在《android游戏开发大全》第7章第2节案例的基础上做的改进
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于...总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。
第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户...
1.高焕堂讲解 Intent-based Programming.doc 2.高焕堂讲解 ContentProvider范例.doc 3.实际演练Android仿真器之操作.doc ...31.软硬整合开发的基础 认识Android的线程Thread模式.doc 33.认识Binder.java类别的角色.doc
第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
《android基础教程合集》 Android实例教程 会员贡献索引贴 实用Android开发工具和资源精选 APK权限大全 - Android必懂知识 最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) ...
第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发...
重绘了录制视频和录音时的两个自定义view,可在原本基础上进行二次开发 提供了视频截图方法,支持双击放大,支持自动对焦 视频录制暂时使用 SurfaceView Camera , 后续会升级为 TextureView Camera2 简单的加了
使用SurFaceView基础android MediaPlayer接口实现网络和本地视频的播放。
在具体实现代码之前,我们先来了解一下Android api对实现自定义Camera的介绍。 根据api的介绍,对于Camera应用可以简单总结以下几个步骤。 1.检查Camera是否存在,并在AndroidManifest.xml中赋予相关的权限; 2....
CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Android高级编程》的源代码 ...本书的内容和示例提供了如何使用当前SDK来编写优秀的移动程序所需要的基础知识,同时也保持了快速适应未来版本...
android surfaceview自定义拍照 绘制头像轮廓 注明:是借用网上的demo基础上进行修改的