Himi 原创, 欢迎转载,转载请注明! 谢谢。
原文地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/26/6099194.aspx
各位童鞋请你们注意:surfaceview中确实有 onDraw这个方法,但是surfaceview不会自己去调用!!!
而我代码中的ondraw 也好 draw 也好,都是我自己定义的一个方法。。。放在线程中不断调用的,一定要注意!!
昨天圣诞节,没有出去,而是一天时间全部纠结在如何在SurfaceView中添加组件,例如添加常用的Button,TextView等等、一开始也想着从网上找些资料看看有没有可参考的,但是发现搜到的结果仍是些童鞋对此很疑惑并且也在找寻答案,那么,这里就把圣诞节一天的成果来和各位童鞋分享;
1.因为我们的SurfaceView是个View对于添加的组件其实也是View,如果我们只是一味的想在SurfaceView中添加View组件其实是错误的思想,当然我一开始也是想着直接在SurfaceView中定义或者去使用组件,但是结果肯定是不成功的,因为View不能添加View!
2.既然第一条肯定是错误的,那么我们就应该想到把我们的SurfaceView和组件都放在一个Layout里面,毕竟我们的的SurfaceView也是一个view和其他组件一同放在我们的layout里,那么这样一来肯定就能完成在SurfaceView中添加组件的目的啦。下面先上截图、
大家看到中间白色区域就是我们的SurfaceView啦,最上方是组件TextView ,最下方是Button 、对的,要的就是这个效果!而不是像前面文章中多个Activity切换,这样都在一个界面中啦。哇哈哈啊。好、下面来看代码吧:
先放上Xml 代码:
以上代码很简单,都是一些布局方式和各个组件一些属性及显示方式的设定,当然主要看如何对我们的SurfaceView如何注册在xml中的,那么每个组件都有id这样为了对后面其交互数据用到,因为我们要对每个组件操作,所以这里都索引了id方面从R文件中取出其对象。
那么,xml我们定义好了,看看代码中如何实现的,这里先说下Activity类中代码:
该有的备注在代码后面都备注了,MySurfaceView.button_str,这个是自己的SurfaceView中定义的一个static 的变量用来交互数据用到;在那么下面就要看我们的SurfaceView,当在Xml注册需要注意什么了,我半天的时候都花在了这里!!!一定要引起注意,这也是在SurfaceView中并显示组件完成最重要的一步。
先分析:
1.SurfaceView类的创建和实现等等和之前都是一样的,该怎么去写还怎么去写,但是!构造函数一定要注意!
这里解释下备注1: 这里有两个构造函数,当然我们用哪个都是可以的,但是在此时我们需要明确我们到底要使用哪个。
一个参数的构造函数:如果是new出来的此类实例肯定是没有问题,但是我们为了能在显示SurfaceView同时显示别的组件,所以把自定义的SurfaceView也当作组件注册在了main——xml中,所以这里需要注意,当在xml中注册的就必须在SurfaceView中使用这种含有两个参数的构造函数的方法, xml初始化的时候会调用两个参数的这个构造方法, (当时这个问题困扰了半天的研究时间,最后在一个群友的帮助下才发现是这里出了问题) 那么含有两个构造参数的方法里第二个参数指的自定义的组件的一些属性,就像长宽一样,你可以给组件属性,就是通过这个来传递的!
那么在SurfaceView 中并一同显示组件也就到底完结了,回顾下,一共分为3步,1.将我们的SurfaceView 作为一个组件view 和其他组件一同放置到布局中,当然布局的方式和显示的方式大家自己随自己喜欢定义! 2.在我们的SurfaceView中一定要使用两个构造函数的构造函数,一定!一定! 就这里有区别,别的还是该怎么处理就怎么处理,就是构造函数换了 3.交互数据,对其按键的绑定在 activity中完成,别把view绑定在咱们的SurfaceView中啊,否则报错- -、
这里说下为什么要在activity中去绑定按键处理 而不是在我们的surfaceview中去绑定:
其实根据xml中定义button时的id 我们可以通过R.id 索引取到button,不管在activity中还是我们的surfaceview中都可以取到,但是!绑定button这一步如果在surfaceview中去写就一定报错,原因我解释下;
我们在xml中定义我们的surfaceview 和 组件button、textview等等的时候 他们是同一级别的!!而不是把button包含在surfaceview
里,所以虽然在surfaceview中可以根据id索引到button但绑定的时候是无法找到button的,只有我们的activitysetContentView(R.layout.main); 显示的button,所以只能在显示它的activity中去绑定,这里需要注意下;
下面分享出源码:
源码下载地址:
http://download.csdn.net/source/2939526
分享到:
相关推荐
安卓Android源码——SurfaceView添加组件view不被组件覆盖.zip
在SurfaceView中添加组件,一个界面中既有surfaceview又有button、textview等组件,http://blog.csdn.net/xiaominghimi/archive/2010/12/26/6099194.aspx
android之surfaceview游戏开发
Android开发中,如何实现SurfaceView添加组件view不被组件覆盖。
SurfaceView添加组件view不被组件覆盖.zip
在SurfaceView中添加组件!并且相互交互数据!
6.Android游戏开发之旅六 自定义View 7.Android游戏开发之旅七 自定义SurfaceView 8.Android游戏开发之旅八 SurfaceView类实例 9.Android游戏开发之旅九 VideoView类剖析 10.Android游戏开发之旅十 位图旋转 11...
这是在上网收集的,能够截取当前Activity中surfaceView中图片。本人亲测可以通过。
Android源码——SurfaceView添加组件view不被组件覆盖.zip
Android游戏框架SurfaceView介绍 PDF TAG:Android 游戏框架 SurfaceView
Android游戏开发六 自定义View Android游戏开发七 自定义SurfaceView Android游戏开发八 SurfaceView类实例 Android游戏开发九 VideoView类剖析 Android游戏开发十 位图旋转 Android游戏开发11 View中手势识别 ...
android SurfaceView添加线程源码
Android SurfaceView添加组件view不被组件覆盖.rar
Android 构建游戏框架View与SurFaceView的区别
Android SurfaceView添加组件view不被组件覆盖.zip源码资源下载Android SurfaceView添加组件view不被组件覆盖.zip源码资源下载
SurfaceView游戏框架实例,讲解如何使用,如何掌握基础性东西
Android中使用surfaceview开发的Camera相机,内容含有注释,非常清楚