`
java886o
  • 浏览: 42176 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

【Android游戏开发之九】(细节处理)触屏事件中的Bug解决方案以及禁止横屏和竖屏切换!

 
阅读更多

Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/29/6104731.aspx

我们先讲解在触屏事件处理中我们需要改进的bug!然后再给出如何禁止横屏和竖屏切换!以及切换的过程在android os 中是怎样的。

先看一段代码:


代码很简单,一个是处理实体按键的响应时间,另一个是触屏的响应事件、那么这里要说的有两点:

第一点:

在surfaceview中我们的onKeyDown 虽然是重写了view的函数,但是仍然需要在初始化的时候去声明获取焦点,setFocusable(true); 如果不调用此方法,那么会造成按键无效。原因是因为如果是自己定义一个继承自View的类,重新实现onKeyDown方法后,只有当该View获得焦点时才会调用onKeyDown方法,Actvity中的onKeyDown方法是当所有控件均没有处理该按键事件时,才会调用.

第二点:

也是今天主要需要讲得的触屏响应的函数,onTouchEvent()! 重写此函数的时候默认最后一句是依照基类的返回方式,return super.onTouchEvent(event); 然后我们在其中去判定MotionEvent.ACTION_MOVE、MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP 相对应触屏操作的 拖动、按下、抬起;对此一切都是正确的,但是真正的的运行起项目的时候发现Log.v("Himi", "ACTION_MOVE"); 这里log的"ACTION_MOVE",永远不会执行!!!为此我找到了解决方法,那么先解释下为什么会出现此类情况。

解释:

onTouchEvent(),预设使用Oeverride这个方法,通常情況下去呼叫super.onTouchEvent()并传回布林值。但是这里要注意一点,预设如果去呼叫super.onTouchEvent()則很有可能super里面并没做任何事,并且回传false回來,一旦回传false回來,很可能后面的event (例如:Action_Move、Action_Up) 都会收不到了,所以为了确保保后面event能順利收到,要注意是否要直接呼super.TouchEvent()。


例如:


这个例子是当你Touch Down的时候会送event進來,接著印出Log,然后呼叫super的onTouchEvent()并回传布林值。此时会回传false,并且之后再也收不到Touch Move或Touch Up的event,為了要确保能收到event,必須要回传true,所以在这里要注意一下。

这个问题也是当时用到此函数的时候发现的,找了很多资料才找到其解释、所以以后使用onTouchEvent()函数的时候最后的

return super.onTouchEvent(event);

一定要改

return true;

最后还要注意一点:在初始化的时候不要忘记setFocusableInTouchMode(true);触屏模式获取焦点,比较类似setFocusable(true);

——setFocusable(true);//此方法是用来响应按键!如果是自己定义一个继承自View的类,重新实现onKeyDown方法后,只有当该View获得焦点时才会调用onKeyDown方法,Actvity中的onKeyDown方法是当所有控件均没有处理该按键事件时,才会调用.

这里讲下如何禁止横屏和竖屏切换!

在某些游戏中我们可能需要禁止横屏和竖屏切换,其实实现这个要求很简单,只要在

AndroidManifest.xml里面加入这一行android :screenOrientation="landscape "(landscape 是横向,portrait 是纵向)。

在android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置。在activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity.而是去调用onConfigurationChanged(Configuration newConfig). 这样就可以在这个方法里调整显示方式.

MainActivity中:


AndroidManifest.xml中:



分享到:
评论

相关推荐

    【Android游戏开发之九】(细节处理)触屏事件中的Bug解决方案以及禁止横屏和竖屏切换!.pdf

    在Android游戏开发中,处理触屏事件是非常关键的一环,因为用户与游戏的交互大多依赖于触摸屏幕。本篇将探讨触屏事件处理中的常见问题以及如何禁止屏幕方向的切换,以优化游戏体验。 首先,我们来看代码中的问题。`...

    android横竖屏总结.doc

    本文将深入探讨在Android中处理横竖屏切换时所遇到的问题,主要包括布局问题和重新载入问题。 首先,布局问题是横竖屏切换时的核心挑战。在Android应用中,屏幕方向的改变可能导致界面元素的尺寸变化,因此需要对...

    ZXing1.6改横屏识别为竖屏识别

    总之,将ZXing1.6从横屏识别改为竖屏识别是一个涉及Android相机API和ZXing库内部逻辑的工程,需要对Android开发和ZXing有深入的理解。不过,一旦完成,用户就能在竖屏模式下更方便地使用二维码扫描功能。

    android bugreport 分析

    Android bugreport是一个全面的系统日志文件,它包含了大量的系统信息,旨在帮助开发者诊断和解决Android设备上的问题。这个文件由一系列的子部分组成,每一部分都提供了关于系统不同方面的详细数据。接下来,我们将...

    Android推箱子说明支持键盘和触摸屏操作.rar

    - 对于触摸屏操作,Android提供了GestureDetector和MotionEvent类来捕获和处理用户的触摸事件,实现滑动、点击等交互。 - 支持键盘操作,需要监听硬件键盘或软键盘的按键事件。Android中的`KeyEvent`类用于处理...

    Android相机 解决三星bug版本

    (2) 三星的camera强制切换到横屏 导致Activity重启生命周期 (但是部分机型 配置 android:configChanges 也不能阻止横竖屏切换); 我的解决方法为 如果 activity 的销毁如果无法避免 那么在activity销毁之前调用 ...

    Android-Buglife一个用于iOSApp的Bug报告SDK和Web平台

    对于Android开发,尽管标题提及的是iOS App,但标签中提到了"Android开发-其它杂项",这可能意味着Buglife也提供对Android的支持或有相关的解决方案。尽管Android版本的SDK不在提供的文件列表中,但通常类似的SDK会...

    Android游戏开发PPT

    在游戏开发中,Activity扮演着控制器的角色,处理界面切换、用户输入事件和游戏状态的更新。\n\n欢迎界面的开发:欢迎界面是游戏的入口,通常包含动态的展示和交互。自定义相框CustomGallery类用于实现个性化展示,...

    Android 开发 Camera拍照出现竖线

    在Android开发中,Camera模块是应用最多的硬件接口之一,它允许开发者访问设备的摄像头功能。不过,当涉及到Camera拍照并进行JPEG硬件编码时,可能会遇到图片中出现竖线的问题。这类问题通常与系统的缓存(cache)...

    Android 解决录音bug

    通过查看和学习该项目的代码,我们可以了解到如何在实际项目中处理录音的细节,包括文件的读写、UI交互逻辑以及录音过程中的状态管理等。同时,该项目可能还包含了一些高级特性,如背景服务录音、录音音量控制、回声...

    Android中国象棋小游戏源码

    【Android中国象棋小游戏源码】是一个专门为Android平台设计的象棋游戏开发项目,它包含了完整的源代码,为开发者提供了一个学习和参考的实例。这个项目不仅能够帮助初学者了解Android游戏开发的基本流程,同时也...

    《ANDROID_2.0游戏开发实战宝典.pdf》高清下载

    《ANDROID_2.0游戏开发实战宝典.pdf》是一份针对Android平台游戏开发的专业资料,这份资料的分享表明了在IT领域,特别是游戏开发行业内,对于高质量资源的渴求与共享精神的存在。以下是对这份资料可能包含的关键知识...

    基于android的雷电小游戏

    4. **触屏操作**:Android系统提供了触摸事件处理机制,开发者通过Override onTouchEvent()方法来监听用户的触摸行为,实现触屏发射子弹的功能。这需要理解MotionEvent类以及ACTION_DOWN、ACTION_UP等事件类型。 5....

    基于Android的五子棋游戏开发

    4. **多线程与绘图**:掌握Android中的多线程编程技巧,用于处理游戏中的并发任务;同时了解Android绘图框架,实现游戏界面的动态绘制。 5. **调试技巧**:能在Eclipse中有效地调试Android应用,快速定位并解决问题...

    androidBug修改总结

    对于进行Android定制开发的工程师而言,这个文档提供了丰富的信息,有助于他们快速定位和解决在开发过程中可能遇到的问题。它也表明了在进行定制开发时,必须对Android系统的各个组成部分有深刻的理解,包括它们的...

    横屏小游戏--萝莉快跑.rar

    《横屏小游戏--萝莉快跑》是一款专为横屏设计的小型游戏,它提供了丰富的游戏体验和趣味性。从其名称我们可以推测,这是一款以萝莉角色为主角的跑酷类游戏,玩家可能需要控制可爱的萝莉角色在各种场景中奔跑、躲避...

    Android 信息推送,史上最完美BUG! android 推送客户端

    在Android平台上,信息推送服务是应用开发者不可或缺的功能之一,它使得应用可以在后台高效地与服务器进行通信,即使用户没有直接与应用交互也能接收到新消息或通知。Android信息推送通常涉及多种技术,如Google的...

    西门子TP1200触摸屏不能显示汉字和摄氏度符号,中文字符显示异常的处理对策.docx

    西门子TP1200触摸屏是一款广泛应用于工业自动化领域的智能人机界面,它以其易用性、稳定性以及丰富的功能赢得了用户的青睐。然而,在实际使用过程中,有时会出现触摸屏无法正常显示汉字和摄氏度符号的问题,这会给...

    Android游戏源码切水果小游戏有详细注释

    5. **触摸事件处理**:Android系统提供了`MotionEvent`类来处理触摸屏事件。游戏需要监听用户的触摸动作,当用户滑动手指时,判断是否切到了水果。 6. **SQLite数据库**:为了保存用户的游戏进度和高分,可以使用...

Global site tag (gtag.js) - Google Analytics