天天看點

listview 和 左右滑動沖突

是這樣的:基本實作了這個功能,但是呢。這個gesture的響應的滑動隻能在ViewFlipper中沒有Item的地方滑動,而在有Item内容的地方,根本就不響應。是以其實隻有在item上邊一小條的地方滑動~~。但是我現在實作的是可以在ViewFlipper所有地方都能響應OnFling()函數,Item隻要能響應自身的click就可以了。 如何實作??

我把代碼貼出來:

————————————————————

Java code

?

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

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

package

wyf.ytl;

import

android.app.Activity;

import

android.content.Intent;

import

android.os.Bundle;

import

android.util.Log;

import

android.view.GestureDetector.OnGestureListener;

import

android.view.ViewGroup.LayoutParams;

import

android.view.animation.AnimationUtils;

import

android.view.GestureDetector;

import

android.view.Gravity;

import

android.view.MotionEvent;

import

android.view.View;

import

android.view.ViewGroup;

import

android.widget.BaseAdapter;

import

android.widget.Gallery;

import

android.widget.ImageView;

import

android.widget.LinearLayout;

import

android.widget.ListView;

import

android.widget.TextView;

import

android.widget.ViewFlipper;

public

class

Common_Channels 

extends

Activity 

implements

OnGestureListener{

ListView ListView1,ListView2,ListView3;

//BaseAdapter ba1,ba2,ba3;

BaseAdapter ba;

GestureDetector detector;

ViewFlipper flipper;

LinearLayout layout;

int

[] drawableIds={

R.drawable.andy, R.drawable.bill, R.drawable.edgar, R.drawable.torvalds,

R.drawable.turing

};

int

[] msgIds={ R.string.andy, R.string.bill , R.string.edgar ,R.string.torvalds,

R.string.turing

};

@Override

protected

void

onCreate(Bundle savedInstanceState) {

super

.onCreate(savedInstanceState);

//flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper01);

flipper=

new

ViewFlipper(

this

);

detector = 

new

GestureDetector(

this

);   

InitListView();

InitFliper();

layout=

new

LinearLayout(

this

);

layout.addView(flipper);

setContentView(layout);

}

public

boolean

InitFliper(){

flipper.addView(ListView1);

flipper.addView(ListView2);

flipper.addView(ListView3);

return

true

;

}

public

boolean

InitListView(){

//BaseAdapter temp_ba=new BaseAdapter() 

ba=

new

BaseAdapter(){

public

int

getCount() {

return

5

;

}

public

Object getItem(

int

position) {

// TODO Auto-generated method stub

return

null

;

}

public

long

getItemId(

int

position) {

// TODO Auto-generated method stub

return

;

}

public

View getView(

int

position, View convertView, ViewGroup parent) {

LinearLayout ll=

new

LinearLayout(Common_Channels.

this

);

ll.setOrientation(LinearLayout.HORIZONTAL);

ll.setPadding(

5

,

5

,

5

,

5

);

ImageView ii=

new

ImageView(Common_Channels.

this

);

ii.setImageDrawable(getResources().getDrawable(drawableIds[position]));

ii.setScaleType(ImageView.ScaleType.FIT_XY);

ii.setLayoutParams(

new

Gallery.LayoutParams(

100

98

));

ll.addView(ii);

TextView tv=

new

TextView(Common_Channels.

this

);

tv.setText(getResources().getText(msgIds[position]));

tv.setTextSize(

24

);

tv.setTextColor(Common_Channels.

this

.getResources().getColor(R.color.white));

tv.setPadding(

5

5

5

5

);

tv.setGravity(Gravity.LEFT);

ll.addView(tv);

return

ll;

}

};

ListView1=

new

ListView(Common_Channels.

this

);

ListView2=

new

ListView(Common_Channels.

this

);

ListView3=

new

ListView(Common_Channels.

this

);

ListView1.setAdapter(ba);

ListView2.setAdapter(ba);

ListView3.setAdapter(ba);

return

true

;

}

@Override

public

boolean

onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

Log.i(

"Fling"

"Activity onTouchEvent!"

);

return

this

.detector.onTouchEvent(event);

}

@Override

public

boolean

onDown(MotionEvent e) {

// TODO Auto-generated method stub

return

false

;

}

@Override

public

boolean

onFling(MotionEvent e1, MotionEvent e2, 

float

velocityX,

float

velocityY) {

Log.i(

"Fling"

"Fling Happened!"

);

if

(e1.getX() - e2.getX() > 

120

) {

this

.flipper.setInAnimation(AnimationUtils.loadAnimation(

this

,R.anim.push_left_in));

this

.flipper.setOutAnimation(AnimationUtils.loadAnimation(

this

,R.anim.push_left_out));

this

.flipper.showNext();

else

if

(e1.getX() - e2.getX() < -

120

) {

this

.flipper.setInAnimation(AnimationUtils.loadAnimation(

this

,R.anim.push_right_in));

this

.flipper.setOutAnimation(AnimationUtils.loadAnimation(

this

,R.anim.push_right_out));

this

.flipper.showPrevious();

}

return

true

;

}

@Override

public

void

onLongPress(MotionEvent e) {

// TODO Auto-generated method stub

}

@Override

public

boolean

onScroll(MotionEvent e1, MotionEvent e2, 

float

distanceX,

float

distanceY) {

return

false

;

}

@Override

public

void

onShowPress(MotionEvent e) {

}

@Override

public

boolean

onSingleTapUp(MotionEvent e) {

return

false

;

}

}

行了,解決了~ ,我從ListView這裡,直接傳到activity的ontouchevent() 那裡了~就響應了,謝謝各位~

ListView1.setOnTouchListener(new OnTouchListener(){

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

Log.i("ListView1", "ListView1 onTouchEvent!");

Common_Channels.this.detector.onTouchEvent(event);

return false;

}

});