是这样的:基本实现了这个功能,但是呢。这个gesture的响应的滑动只能在ViewFlipper中没有Item的地方滑动,而在有Item内容的地方,根本就不响应。所以其实只有在item上边一小条的地方滑动~~。但是我现在实现的是可以在ViewFlipper所有地方都能响应OnFling()函数,Item只要能响应自身的click就可以了。 如何实现??
我把代码贴出来:
————————————————————
- Java code
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 0; } 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; } }; /* ba1=temp_ba; ba2=temp_ba; ba3=temp_ba; */ 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; }}