效果图
通过装饰者模式添加头部底部
ListView提供了addHeadView和addFootView方法,使用起来非常方便,而ReyclerView则需要我们自己在adapter中判断,常规做法无外乎判断position==0,来添加头布局,不过这个做法只适合单个,而且不通用。
我们看下ListView.addHeadView是如何实现的
一天进步一点
ListView提供了addHeadView和addFootView方法,使用起来非常方便,而ReyclerView则需要我们自己在adapter中判断,常规做法无外乎判断position==0,来添加头布局,不过这个做法只适合单个,而且不通用。
我们看下ListView.addHeadView是如何实现的
分析一下要解决的Touch事件
看代码
more >>1、对于一个根ViewGroup来说,点击事件产生后,首先会传给它的dispatchTouchEvent方法,如果onIterceptTouchEvent方法返回false,不拦截该事件,则执行其子View/ViewGroup的dispatchTouchEvent方法,如果如果onIterceptTouchEvent方法返回true,则表示拦截改事件,则执行其本身的onToucheEvent方法。
public boolean dispatchTouchEvent (MotionEvent ev){
boolean result =false;
if(onInterceptTouchEvent(ev)){
result=onTouchEvent(ev);
}else{
result=child.dispatchTouchEvent(ev);
}
returen result;
}
2、当一个View需要处理事件时,如果设置setOnTouchListener,其onTouch返回false,则onTouchEvent调用,如果onTouch返回true,则onTouchEvent不调用,可以看到setOnTouchListener的优先级 > onTouchEvent > setOnClickListener。
3、事件传递的顺序:Activity -> Window -> View,顶级View接收到传递事件之后,然后一步步分发下去。但如果一个View的onTouchEvent返回false,就会往上调用其父控件的onTouchEvent,依此类推,如果所有的View都不处理该事件,则会将该事件又传递给Activity,即传递给Activity的onTouchEvent方法。
more >>上一次我们创建了TouchView,这次我们创建一个TouchViewGroup
public class TouchViewGroup extends LinearLayout {
public TouchViewGroup(Context context) {
this(context,null);
}
public TouchViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public TouchViewGroup(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
//事件分发
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d("AAA","ViewGroup + dispatchTouchEvent-->"+ev.getAction());
return super.dispatchTouchEvent(ev);
}
//事件触摸
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("AAA","ViewGroup + onTouchEvent-->"+event.getAction());
return super.onTouchEvent(event);
}
//事件拦截
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d("AAA","ViewGroup + onInterceptTouchEvent-->"+ev.getAction());
return super.onInterceptTouchEvent(ev);
}
}
more >>
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true