Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用自定义手势侦听器专门处理投掷和单触_Android_Android Listview_Gesture - Fatal编程技术网

Android 如何使用自定义手势侦听器专门处理投掷和单触

Android 如何使用自定义手势侦听器专门处理投掷和单触,android,android-listview,gesture,Android,Android Listview,Gesture,我有一个ListView,我创建了一个自定义手势侦听器来处理投掷触碰。我必须重写onSingletAPconfirm,让侦听器也处理触摸项。不幸的是,如果我触摸一个项目,它会高亮显示,但不会被推 我在活动中使用以下代码: ListView listView=(ListView)findViewById(android.R.id.list); final GestureDetector gestureDetector = new GestureDetector(new CustomGestureL

我有一个ListView,我创建了一个自定义手势侦听器来处理投掷触碰。我必须重写onSingletAPconfirm,让侦听器也处理触摸项。不幸的是,如果我触摸一个项目,它会高亮显示,但不会被推

我在活动中使用以下代码:

ListView listView=(ListView)findViewById(android.R.id.list);
final GestureDetector gestureDetector = new GestureDetector(new CustomGestureListener(this));
if (listView != null)
 listView.setOnTouchListener(new View.OnTouchListener()
  {
   @Override
   public boolean onTouch(View v, MotionEvent event)
     {
    if (gestureDetector.onTouchEvent(event)) {
       return false;
         }
       return true;
            }
          });
在CustomGestureListener中:

  @Override
  public boolean onSingleTapConfirmed(MotionEvent event)
  {
    ListView listView=(ListView)((InfoActivity)context).findViewById(android.R.id.list);
    listView.onTouchEvent(event);
    return super.onSingleTapUp(event);
  }
此外,如果我像这样使用滚动,则没有滚动:

@Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
  {        
    return super.onScroll(e1,e2,distanceX,distanceY);
  }
我应该设置什么来让我的listview项目被点击、滚动并让fling也工作?

使用以下方法:

ListView lv = new ListView(this);
ArrayAdapter<String> a = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
for (int i = 0; i < 20; i++) {
    a.add("item " + i);
}
SimpleOnGestureListener listener = new SimpleOnGestureListener() {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.d(TAG, "onSingleTapConfirmed ");
        return false;
    }
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Log.d(TAG, "onFling velocity x " + velocityX);
        Log.d(TAG, "onFling velocity y " + velocityY);
        return false;
    }
};
final GestureDetector gd = new GestureDetector(listener);
OnTouchListener l = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return gd.onTouchEvent(event);
    }
};
lv.setOnTouchListener(l);
lv.setAdapter(a);
setContentView(lv);
ListView lv=新的ListView(此);
ArrayAdapter a=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1);
对于(int i=0;i<20;i++){
a、 添加(“项目”+i);
}
SimpleOnGestureListener=新建SimpleOnGestureListener(){
@凌驾
公共布尔值OnSingleTapConfiged(运动事件e){
Log.d(标记“onSingleTapConfirmed”);
返回false;
}
@凌驾
公共布尔onFling(MotionEvent e1、MotionEvent e2、float-velocityX、float-velocityY){
对数d(标签“启动速度x”+速度x);
对数d(标签“启动速度y”+velocityY);
返回false;
}
};
最终手势检测器gd=新的手势检测器(监听器);
OnTouchListener l=新的OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
返回gd.ONTOUCHENT(事件);
}
};
lv.Setontouch(l);
低压设置适配器(a);
setContentView(lv);

如果我将代码更改为返回gd.ontochevent,并在onSingletAPconfirm中返回false,则会触发这两个事件。我只想要。知道吗?不知道你要什么。我看不到同时触发两个事件。请在开始的帖子中查看我的评论。如果您还想滚动,请在我的SimpleOngestureListener中覆盖onScroll。问题是,fling和click同时发生。我想要抛投或点击反应。它们似乎不存在,没有彼此。你想实现什么?我想专门处理抛投和点击:如果用户触摸一个项目,让该项目被点击,然后开始另一个活动。如果用户使用fling,我将启动动画。现在,当一次投掷发生时,一半的动画被播放,然后另一个活动开始。如果我按Back键,将播放动画的另一半。我想让他们按照运动的节奏来打电话。