尊重原创转载请注明:http://blog.csdn.net/bfbx5173
月神 镇楼
前段时间看到了一个效果,很好奇就想把它做出来。效果是这样的:
在图里有个白色的圆圈(后面就叫做圈了)会随着手指的移动而移动,这样用户是如何操作的就很明白了。
抱着如果能将这个效果加入自己的APP一定增色不少的想法想把它做出来。 那么就开始了。
乍一看, 主要涉及到的知识:
1、触摸事件的传递。
2、自定义View的绘制。
思路:首先这是个自定义View没跑了,然后应该占据了应用的满屏,没错就是 match_parent。再之后接受手指的各种抚摸,做出回应。
同时不管是在当前页面还是在哪里,这个圈都是要显示的。所以说每个页面都要有这个自定义View~
看到这里你一定会说,我靠那不是很麻烦,每个页面都要去加一个这样的自定义View,其实不然。大家写代码 总少不了一句类似这样的代码
setContentView(R.layout.activity_main);
所以我们是不是只要对这个setContentView做点手脚就可以啦。
Go Go Go
第一步
public class MainActivity extends BaseActivity {
之后重写BaseActivity中的setContentView方法。
protected ShinyLayout layContentWrapper;
@Override public void setContentView(int layoutResID) {
setContentView(inflate(layoutResID));
}
@Override public void setContentView(View view) {
setContentView(view, null);
}
@Override public void setContentView(View view, ViewGroup.LayoutParams params) {
layContentWrapper = new ShinyLayout(this);
layContentWrapper.addView(view, 0);
if (params != null) {
super.setContentView(layContentWrapper, params);
}
else {
super.setContentView(layContentWrapper);
}
}
在上面代码中,setContentView的几个重载方法被我重写了,最后都会到达最下面的那个方法,一看里面的逻辑估计你就懂了。
把setContentView设定的布局再给包裹一层,这样只要继承了BaseActivity的活动的视图界面就自然而然的都被这个这个神秘的ShinyLayout给套住了。
既然是**Layout,那一般就是一个ViewGroup。那它又是什么呢? 大家来看下这样一张图。