gpt4 book ai didi

Android listview header 通过触摸传递到后面查看

转载 作者:行者123 更新时间:2023-11-30 00:56:30 25 4
gpt4 key购买 nike

我有一个带有自定义类标题的 ListView ,它是完全透明的。在 ListView 的后面,我有一个通过透明标题显示的 map View 。

我正在努力使它工作,以便如果用户正在滚动我触摸 ListView 上的任何行,则 ListView 会滚动。但是,如果用户正在触摸 ListView 的顶部透明标题部分,则 ListView 不应拦截触摸,而应将其传递给后面的 map View (这允许用户在 map View 上平移/缩放)。

我目前无法实现这一点,因为 ListView 一直在窃取触摸。

最佳答案

我找到了解决方案 on a similar question .

使用自定义 ListView 类:

package xxx.xxx.xxxxxx;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;

public class HeaderUntouchableListView extends ListView {
private View mHeaderView;
private boolean isDownEventConsumed;

public HeaderUntouchableListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public void addHeaderView(View v) {
super.addHeaderView(v);
this.mHeaderView = v;
}

@Override
public void addHeaderView(View v, Object data, boolean isSelectable) {
super.addHeaderView(v, data, isSelectable);
this.mHeaderView = v;
}

/**
* list header should not consume the event, and list item should consume the event
* consumed here is replaced with super.dispatchTouchEvent(motionEvent)
* @param motionEvent
* @return is event consumed
*/
@Override
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
if(mHeaderView == null) return super.dispatchTouchEvent(motionEvent);
if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
//if touch header not to consume the event
Rect rect = new Rect((int) mHeaderView.getX(), (int) mHeaderView.getY(), mHeaderView.getRight(), mHeaderView.getBottom());
if(rect.contains((int)motionEvent.getX(), (int)motionEvent.getY())){
isDownEventConsumed = false;
return isDownEventConsumed;
}else {
isDownEventConsumed = true;
return super.dispatchTouchEvent(motionEvent);
}
}else{
//if touch event not consumed, then move/up event should be the same
if(!isDownEventConsumed)return isDownEventConsumed;
return super.dispatchTouchEvent(motionEvent);
}
}
}

关于Android listview header 通过触摸传递到后面查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075909/

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