引言:

  我们在使用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. POJ2186(强连通分量分解)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35035   Accepted: 14278 De ...

  2. mongodb ISODate问题(大量数据update优化)

    问题描述: 上周有个需求,把mongodb中birthday (ISO日期格式) 转换成北京时间,并保存成string类型. 最初思路: 遍历查找出的结果,逐个加8小时,然后通过_id逐个去updat ...

  3. HDU5036 Explosion(期望 bitset)

    题意 题目链接 Sol 和cf上的一道题几乎一摸一样 首先根据期望的线性性,可以转化为求每个点的期望打开次数,又因为每个点最多会被打开一次,只要算每个点被打开的概率就行了 设\(anc[i]\)表示\ ...

  4. element-ui Steps步骤条组件源码分析整理笔记(九)

    Steps步骤条组件源码: steps.vue <template> <!--设置 simple 可应用简洁风格,该条件下 align-center / description / ...

  5. 【代码笔记】iOS-请求去掉url中的空格

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...

  6. 【代码笔记】iOS-计算时间差

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...

  7. 令人血脉喷张的animate.css

    都说html5.css3是大局是潮流,尽管css3也不难,学起来比较简单,但我还是喜欢他的轻量级集大成者的animate.css框架,初学的小伙伴们加油啦 下面我分析一下animate.css框架里面 ...

  8. 实现卡片效果【DIV+CSS3】

    一.文字卡片效果 <html> <head> meta<charset="utf-8"> <title>文字卡片效果</tit ...

  9. HCTF2018 pwn题复现

    相关文件位置 https://gitee.com/hac425/blog_data/tree/master/hctf2018 the_end 程序功能为,首先 打印出 libc 的地址, 然后可以允许 ...

  10. RN在Android打包发布App

    参考资料:http://www.jianshu.com/p/b8811669bcb6 RN在Android打包发布App 1-:生成一个签名密钥你可以用keytool命令生成一个私有密钥.在Windo ...