4e6e80e6340b3ae8cd543689c7be450970d64ad2.svn-base
2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.ivt.android.me.ui.myview;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.PointF;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
/**
*
* @author YeMint 2016-5-7 ChildViewPager.java TODO 最后修改人 :无
*/
public class BannerViewPager extends ViewPager {
private int mTouchSlop;
private float mPrevX;
/** 触摸时按下的点 **/
PointF downP = new PointF();
/** 触摸时当前的点 **/
PointF curP = new PointF();
// OnSingleTouchListener onSingleTouchListener;
public BannerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
public BannerViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
getParent().requestDisallowInterceptTouchEvent(true);
// 每次进行onTouch事件都记录当前的按下的坐标
if (getChildCount() <= 1) {
return super.onTouchEvent(arg0);
}
curP.x = arg0.getX();
curP.y = arg0.getY();
if (arg0.getAction() == MotionEvent.ACTION_DOWN) {
// 记录按下时候的坐标
// 切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变
downP.x = arg0.getX();
downP.y = arg0.getY();
// 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
}
if (arg0.getAction() == MotionEvent.ACTION_MOVE) {
// 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
getParent().requestDisallowInterceptTouchEvent(true);
}
if (arg0.getAction() == MotionEvent.ACTION_UP
|| arg0.getAction() == MotionEvent.ACTION_CANCEL) {
// 在up时判断是否按下和松手的坐标为一个点
// 如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick
getParent().requestDisallowInterceptTouchEvent(false);
if (downP.x == curP.x && downP.y == curP.y) {
return true;
}
}
// 注意这句不能 return super.onTouchEvent(arg0);
// 否则触发parent滑动
return super.onTouchEvent(arg0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPrevX = MotionEvent.obtain(event).getX();
break;
case MotionEvent.ACTION_MOVE:
final float eventX = event.getX();
float xDiff = Math.abs(eventX - mPrevX);
if (xDiff > mTouchSlop) {
return false;
}
}
return super.onInterceptTouchEvent(event);
}
}