Android 如何使用自定义手势侦听器专门处理投掷和单触
我有一个ListView,我创建了一个自定义手势侦听器来处理投掷触碰。我必须重写onSingletAPconfirm,让侦听器也处理触摸项。不幸的是,如果我触摸一个项目,它会高亮显示,但不会被推 我在活动中使用以下代码: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 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键,将播放动画的另一半。我想让他们按照运动的节奏来打电话。