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

解决方案 »

  1.   

    你可以对flipper通过setontouchevent监听滑动吧
      

  2.   

    我在想,这里重写的onTouchEvent()事件是activity重写的,但是在Viewgroup进行动作中,这个函数好像根本就没有调用,当然也就不可以使detector响应event,是这个样子么?直到现在,我还是没能实现~
      

  3.   

    flipper哪里有onTouchevent呢,只有onTouchListener啊,而且我试了,在activity重写Ontouchevent的情况下,好像onTouchListener没有响应
      

  4.   

    implements android.view.View.OnTouchListener;public boolean onTouch(View v, MotionEvent event) {
    return this.detector.onTouchEvent(event);
    }
      

  5.   

    楼上,我也试了,还是不行啊。   我再多说点吧,现在这个东西的结构是:Activity中是一个大的linearLayout。这个大的linearLayout中是一个ViewFlipper, 这个ViewFlipper中是三个ListView 。而每一个ListView中的Item是一个LinearLayout. 而一个LinearLayout的Item中是一个ImageView和一个TextView.     目前哪,能够响应Flipper滑动的,竟然只是 标题栏  那一小条~~。而我是想ListView 能够滑动~。
      
       还有呢,就是每一个ListView也自然能够 vertical方向上的scroll的~
      

  6.   

    刚才实验得到了一些新的信息, touch的event,ListView1 响应到了。但是flipper,外层的linearLayout与activty都没有捕捉到~~ 有什么好方法让这个event响应到么?
      

  7.   

    行了,解决了~ ,我从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;
    }

    });
      

  8.   

    先谢谢楼主了,这样是可以解决一半,因为如果有ListView中如果有复选框的话,向左或向右滑动时,会让复选框选中,期待更好的解决方法
      

  9.   

    gridview.setOnTouchListener(new OnTouchListener()
    { @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    Log.i("tag", "gridview onTouch");
        OrderActivity.this.mGestureDetector.onTouchEvent(event);  

    return false;


    }

    });为啥我这样写,在gridview的区域里面还是不能拖动
      

  10.   

    恩, 就是7楼的方法,现在比去年好多了,现在能google到很多这类信息
      

  11.   

    将listview的OnTouchListener事件的event.getAction()==MotionEvent.ACTION_DOWN交个父控件Activity