gpt4 book ai didi

android - 如何防止 ListView 在触摸/滑动/甩动它的行时滚动?

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:57 26 4
gpt4 key购买 nike

如果在某些特定 ListView 的行中做出这些手势,我需要停止 ListView 以响应用户手势 - 如何做到这一点?目标 ListView 的行 View 设置了 onTouchListener,由于 ListView 向上/向下滚动,我无法识别滑动/翻转。因此,如果我向上或向下移动手指 - ListView 会拦截它并向相应的方向滚动。所以我需要以某种方式来规则它,就像 Y 坐标变化超过一定数量一样 - 让 ListView 滚动,如果没有 - 将手势识别为快速/滑动。 OnTouchListener 是

private int SWIPE_MIN_DISTANCE = 1;
private int SWIPE_MAX_OFF_PATH = 300;

final OnTouchListener flingSwipeListener = new OnTouchListener() {
float touchX;
float touchY;
@Override
public boolean onTouch(final View view, final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
touchX = event.getX();
touchY = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
if (Math.abs(touchY - event.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
else if (touchX - event.getX() > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","right to left swipe");
}
// left to right swipe
else if (event.getX() - touchX > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","left to right swipe");
}
}
return true;

}
};

这个 onTouchListner 被设置为一个特定的行。我需要在 onTouchListener 识别手势时卡住 ListView,但如果它失败,我需要将 MotionEvent 发送到 ListView。

最佳答案

如果您需要在特定行上禁用触摸监听器。比这简单。

在所需的列表行上设置标签。在 getview 列表适配器类中。

例如:

ABCList extends ArrayAdapter<String> {
public MyCustomAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View row = inflater.inflate(R.layout.history_list_item, parent,
false);

if(position == YOUR_DESIRED_ROW)
row.setTag("disableThisRow")

return row;
}


}

然后像这样编辑触摸监听器。

 final OnTouchListener flingSwipeListener =  new OnTouchListener() {
float touchX;
float touchY;
@Override
public boolean onTouch(final View view, final MotionEvent event) {
String isRow=view.getTag();
if(isRow.equals("disableThisRow"))return false;

if (event.getAction() == MotionEvent.ACTION_DOWN)
{
touchX = event.getX();
touchY = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
if (Math.abs(touchY - event.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
else if (touchX - event.getX() > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","right to left swipe");
}
// left to right swipe
else if (event.getX() - touchX > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","left to right swipe");
}
}

return true;

}
};

这将禁用禁用列表项的触摸..希望这有帮助。或者如果你有更多的手势听众,那也将与此类似。希望对你有帮助

关于android - 如何防止 ListView 在触摸/滑动/甩动它的行时滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com