gpt4 book ai didi

android - 每次在自定义布局中只选择一个 child

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

我坚持这个:我有一个 ViewGroup 承载几个 View 。所有 View 都有布局参数:match_parent/match_parent。 View 可以像图片一样一个接一个地放置。

应选择触摸事件 View (如果点击发生在其填充的矩形上)并且每次只能选择一个 View 。

实现它的最佳方法是什么?

enter image description here

更新:

View 中的代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
// if it's over filled area
if (mBounds.contains((int)eventX, (int)eventY)) {
// set current view selected or perform other stuff
// also at this moment we need to unselect all siblings
mGestureDetector.onTouchEvent(event);
return true;
} else {
setSelected(false);
return false;
}
}

最佳答案

创建一个字段,表示在自定义 ViewGroup 中选择的当前子 View。当您遇到触摸事件时,请检查您是否选择了之前的 View 以及它是否有可能是同一 View 。如果不是,则取消选中上一个 View 并使其指向当前 View 。我猜发布的代码是针对 subview 的,在这种情况下,您可以创建一个回调接口(interface),其中父 ViewGroup 实现每次选择 View 时都会调用的接口(interface)。下面是一个小模板:

@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
// if it's over filled area
if (mBounds.contains((int)eventX, (int)eventY)) {
mListener.onViewSelected(this);
// set current view selected or perform other stuff
// also at this moment we need to unselect all siblings
mGestureDetector.onTouchEvent(event);
return true;
} else {
setSelected(false);
return false;
}
}

在父级 ViewGroup 中:

public class NiceViewGroup extends ViewGroup implements OnViewSelected {

private View mCurrentSelectedView = null;

public void onViewselected(View selected) {
if (mCurrentSelectedView == null || mCurrentSelectedView == selected) {
return;
} else {
mCurrentSelectedView.unselectView();
mCurrentSelectedView = selected;
}
}

当然,当您创建 subview 时,您必须将父 ViewGroup 作为监听器传递。

关于android - 每次在自定义布局中只选择一个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126096/

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