Android解决ListView头ViewPager事件冲突问题
2016-05-17 11:26
891 查看
在LIstView添加addHeader()时,会出现事件冲突,比较好的解决方法包括两种,一种是自定义ListView,重写他的拦截方法,另外一种就是自定义ViewPager。
package com.example.testa;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;
public class DefinedListView extends ListView {
public DefinedListView(Context context) {
super(context);
}
public DefinedListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DefinedListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private float xDistance, yDistance, xLast, yLast;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if (xDistance > yDistance) {
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
} 下面用ViewPager实现
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}
}
package com.example.testa;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;
public class DefinedListView extends ListView {
public DefinedListView(Context context) {
super(context);
}
public DefinedListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DefinedListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private float xDistance, yDistance, xLast, yLast;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if (xDistance > yDistance) {
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
} 下面用ViewPager实现
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}
}
相关文章推荐
- Android调试01
- Android优秀资源整理合集(论菜鸟到高级攻城狮)
- android Toast大全(五种情形)建立属于你自己的Toast
- android studio 中的编码问题
- android android:clipChildren属性
- Android Studio你不知道的调试技巧
- 实现Android应用自动检查更新并且下载
- Android——自定义镂空遮盖控件
- Android 使保存的图片在图库中显示
- android 命令
- Android studio出现 Rendering Problem问题解决方案
- android从零开始播放视频
- Android Studio 注释模板
- Android原生的刷新控件--SwipefreshLayout
- Android性能常用的测试工具(黑盒)
- Android用户图片上传功能的实现
- Android中使用WIFI来连接ADB
- Android版:验证手机号码的正则表达式
- android 看门狗
- Android greendao配置及使用