功能描述
项目其中一项功能是检测手机屏幕好坏,此处模仿华为屏幕检测功能的实现:
在屏幕上滑动,若满屏都能感应到滑动,则完好。展示如下:
实现概述
1、隐藏activity的ActionBar和下方的虚拟按键;
2、自定义MyGridLayout继承自GridLayout,目的是为了处理触摸事件分发,重写其内的dispatchTouchEvent(MotionEvent ev)方法;
3、GridLayout自动填充TextView,因为将屏幕分割成了几十个小格,不可能一个一个在XML文件上挨个排布
实现步骤
1、创建MyGridLayout类,继承自GridLayout,覆写其分发方法。
public class MyGridLayout extends GridLayout {
/*构造函数的参数个数比较重要,可能引来Android.View.InflateException:
* Binary XML File Line 异常
* 最好将构造函数的4种重载方法都加上*/
public MyGridLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*将所有要分发的MotionEvent的Action都改为MotionEvent.ACTION_DOWN*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
MotionEvent e = MotionEvent.obtain(ev);
e.setAction(MotionEvent.ACTION_DOWN);
return super.dispatchTouchEvent(e);
}
}
关于Android分发机制,这边文章讲得很详细,我也是看它才弄懂的。包括onTouchListener和onClickListener的区别这篇,帮助也很大。
2、创建一个EmptyActity,在其布局文件中添加一个MyGridLayout容器
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&#