左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了。
简单的只需要几行就可以了,下面那个类是封装好了的。
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
|
package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.RelativeLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); //这里的xml是一个空白的layout //需要监听左右滑动事件的view RelativeLayout view = (RelativeLayout) this .findViewById(R.id.layout); //setLongClickable是必须的 view.setLongClickable( true ); view.setOnTouchListener( new MyGestureListener( this )); } /** * 继承GestureListener,重写left和right方法 */ private class MyGestureListener extends GestureListener { public MyGestureListener(Context context) { super (context); } @Override public boolean left() { Log.e( "test" , "向左滑" ); return super .left(); } @Override public boolean right() { Log.e( "test" , "向右滑" ); return super .right(); } } } |
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
|
package com.example.test; import android.content.Context; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.GestureDetector; import android.view.View; import android.view.View.OnTouchListener; import android.view.MotionEvent; /** * 实现监听左右滑动的事件,哪个view需要的时候直接setOnTouchListener就可以用了 * @author LinZhiquan * */ public class GestureListener extends SimpleOnGestureListener implements OnTouchListener { /** 左右滑动的最短距离 */ private int distance = 100 ; /** 左右滑动的最大速度 */ private int velocity = 200 ; private GestureDetector gestureDetector; public GestureListener(Context context) { super (); gestureDetector = new GestureDetector(context, this ); } /** * 向左滑的时候调用的方法,子类应该重写 * @return */ public boolean left() { return false ; } /** * 向右滑的时候调用的方法,子类应该重写 * @return */ public boolean right() { return false ; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub // e1:第1个ACTION_DOWN MotionEvent // e2:最后一个ACTION_MOVE MotionEvent // velocityX:X轴上的移动速度(像素/秒) // velocityY:Y轴上的移动速度(像素/秒) // 向左滑 if (e1.getX() - e2.getX() > distance && Math.abs(velocityX) > velocity) { left(); } // 向右滑 if (e2.getX() - e1.getX() > distance && Math.abs(velocityX) > velocity) { right(); } return false ; } @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub gestureDetector.onTouchEvent(event); return false ; } public int getDistance() { return distance; } public void setDistance( int distance) { this .distance = distance; } public int getVelocity() { return velocity; } public void setVelocity( int velocity) { this .velocity = velocity; } public GestureDetector getGestureDetector() { return gestureDetector; } public void setGestureDetector(GestureDetector gestureDetector) { this .gestureDetector = gestureDetector; } } |