在电视的交互设计中,通常需要一个焦点框来指示当前选中了哪个控件,如果每个控件都通过给background设置selector的方式,实现焦点框效果,需要写很多xml文件。
所以这里偷懒实现一个通用的焦点框,实现自动跟随焦点变化,实现焦点框指示。原理如下图。
原理就是在Activity的setContentView方法导入的View(上图蓝色)上层再添加一层充满屏幕的View(半透明黄色)。这层View用来绘制焦点框。当真实view的焦点发生变化,获取真实获得焦点的view的位置,把焦点框绘制在它的上边。这样就实现了个通用焦点框。
完成上述操作需要解决以下几个问题
1.如何监听真实view的焦点变化
2.如何把蒙版层添加到原始view的上层
3.如何得到获得到焦点真实view的位置
4.把焦点框绘制在真实view的正上方
焦点变化监听
需要知道view树焦点状态的变化
Android中提供了ViewTreeObserver来监听View树中一系列状态变化
看下ViewTreeObserver的解释
这是一个注册监听视图树的观察者(observer),在视图树种全局事件改变时得到通知。这个全