引言:

  我们在使用Android View或者SurfaceView进行图形绘制,可以绘制各种各样我们喜欢的图形,然后满怀信心的给我们的View加上onTouchEvent、onKeyDown、onKeyUp让图形按照我们希望的进行移动。但是往往希望越大所受的打击也越大,在运行后我们杯具发现,我们的View根本无法获取触摸或者点击事件。(即触摸后什么操作也没做),为什么会这样呢?怎样解决这样的问题呢?本篇博客将详细的阐述一下其中的原因!

1.首先说一下Android事件传递机制,哦不,确切的说应该是Java的事件传递机制(别紧张Android同样适用,因为Android的开发就是给予Java的)

  Android事件具有向下传递的特性,什么意思呢?比如说你有一个ViewGroup,而ViewGroup上又有一个View按钮,当点击View的时候,事件的传递机制是:Button按钮首先获取焦点(获取点击事件),然后传递给ViewGroup再然后就传递给Activity了。

其实在引言中提到的哪个问题就是由于这种事件传递机制引起的,因为View或者SurfaceView首先获取到了触摸事件,紧接着View或者SurfaceView将事件向下传递给Activity,由Activity捕获,不是因为事件没执行,只不过事件被Activity处理了。

解决这种问题的方法有两种:

方案一:

  1.在自定义View的构造方法中加上setFocusable(true);该方法的意思是让当前View获取焦点。例如:

  

public GameView(Context context) {
super(context);
this.setFocusable(true);//允许获取上层焦点
}

  2.将View的触摸或者点击事件的返回值改为true。例如:

  

public boolean onTouchEvent(MotionEvent event) {

        return true;
}

方案二:

  在Activity的触摸或者点击事件中调用自定义View的触摸或者点击事件。

值得一提的是Android的Sdk有些版本中使用这两种方法设置可能还是获取不到触摸或者点击事件,别怕,把以上两种方案放到一块使用,问题就能够完美解决!

Android解决自定义View获取不到焦点的情况的更多相关文章

  1. Android读取自定义View属性

    Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...

  2. Android之自定义View学习(一)

    Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...

  3. Android的自定义View及View的绘制流程

    目标:实现Android中的自定义View,为理清楚Android中的View绘制流程“铺路”. 想法很简单:从一个简单例子着手开始编写自定义View,对ViewGroup.View类中与绘制View ...

  4. Android之自定义View的实现

    对于学习Android开发的小童鞋对于自定义View一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ...

  5. Android开发自定义View

    Android中View组件的作用类似于Swing变成中的JPanel,它只是一个空白的矩形区域,View组件中没有任何内容.对于Android应用的其他UI组件来说,它们都继承了View组件,然后在 ...

  6. Android中自定义View的MeasureSpec使用

    有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/guide/topics/ui/custo ...

  7. android开发:Android 中自定义View的应用

    大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...

  8. Android 创建自定义 View 的属性 (attrs) 时需要注意的问题

    自定义 View 的属性并不难,可以参照官方的文档 https://developer.android.com/training/custom-views/create-view.html 但是需要注 ...

  9. android中自定义view构造函数ContentItemView(Context context, AttributeSet paramAttributeSet)的用处

    自己定义一个view <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

随机推荐

  1. 初识Nosql

    ref:http://www.runoob.com/mongodb/nosql.html  https://blog.csdn.net/testcs_dn/article/details/512258 ...

  2. CSS 关于屏幕适配REM

    这里不多说了,想详细了解的可以参考 2350305682 的博客 https://www.cnblogs.com/annie211/p/8118857.html 不想多深究,想先实现的看这(移动端): ...

  3. apicloud 消息推送与接收

    待解决的问题,如下: 在使用apicloud 的时候我们,在开发用户登录的时候可能会遇到这样的问题,当有2个设备a,b同事使用的app的时候并且是同一个人登录,我们需要去做判断,即大家常说的单点登录. ...

  4. JQuery 常用知识

    1.JSON 解析 JSON字符串: var str1 = '{ "name": "deyuyi", "sex": "man&qu ...

  5. CentOS7安装tomcat9

    1.去官网下载tomcat9的tar.gz安装包 2.移到centos7中并解压 解压命令: tar -xzvf tomcat9.tar.gz 3.打开文件 /etc 目录下的 profile 文件: ...

  6. PeopleSoft单点登录工作原理

    单点登录是指用户在仅通过一次身份验证后,可以在多个应用程序中自由切换. 这意味着用户只需要一次登录信息,只要他点击指向其他应用程序的链接,安全信息就会自动从一个应用程序传递到另一个应用程序,用户就不会 ...

  7. python学习笔记之——python安装mysqldb后,pycharm导入还是报错问题

    在安装mysqldb过程中遇到,本来已经安装了mysqldb了,但是在pycharm中import   MySQLdb还是报错找不到该模块的问题.解决方法如下:1.file->settings ...

  8. 安卓逆向(一)--Smali基础

    安卓逆向(一)--Smali基础 标签(空格分隔): 安卓逆向 APK的组成 文件夹 作用 asset文件夹 资源目录1:asset和res都是资源目录但有所区别,见下面说明 lib文件夹 so库存放 ...

  9. python turtle 例子 海归绘图

          太阳花 1 # coding=utf-8 2 import turtle 3 import time 4   5 # 同时设置pencolor="red", fillc ...

  10. linq not in

    linq not in 查询 or join not in var query = from c in _opvRepository.Table join a in _orderRepository. ...