我正在尝试使用包含三个 Button
的自定义 View 创建 nutiteq ViewLabel
。
我的代码和问题与这篇文章非常相似nutiteq: Button resp. clickable Views not working in Custom ViewLabel .
根据引用帖子的提供答案,我注意到调用了 View 的 onTouchEvent
-Method,并且执行点击的对象由处理程序发布到 runQueue,该处理程序由编舞家。
在 ViewLabel
中按下一个 Button
之后,我上面描述的那些内部调用发生了,但是 onClick
- 的方法>Button
直到我按下 ViewLabel
之外的某处才会执行。然后 ViewLabel
关闭(就像它应该的那样,当按下它后面的 map 时)和 Toast
我放在 onClick
中的方法被触发.
我认为问题与 UIThread
有关。似乎 performClick
-Action 被放入了错误的 runQueue,当用户没有打开 Label
时它是活跃的。
如果有人有想法,如何解决该问题,那就太好了。
已编辑: 这是我构建 ViewLabel 的方式。此方法位于由 MapActivity 调用的类中:
public void createViewMarker(View markerView, Bitmap icon, MapPos pos, Category cat, String tag) {
MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(icon).setSize(0.5f).setColor(
Color.WHITE).build();
ViewLabel label = new ViewLabel(markerView, new Handler(Looper.getMainLooper()));
label.setTouchHandlingMode(true);
markers.add(new MocaMarker(pos, label, markerStyle, cat,
markerLayer, tag));
}
最佳答案
在谷歌群组中的 nutiteq 团队回复后也没有解决方案( see here ) 我决定完全摆脱 ViewLabel。
我现在的解决方案是将准备好的 poi View 的布局包含到 MapActivity 布局文件中,并将其与我自定义的 MapListener 实现一起加载。
我在 MapListener 的构造函数中对 poi View 元素进行了所有初始化,并在调用方法 onVectorElementClicked
时更改了可见性。这是它的基本外观 fragment :
@Override
public void onMapClicked(double x, double y, boolean b) {
Toast.makeText(activity, "onMapClicked " + (new EPSG3857()).toWgs84(x, y).x + " " + (new EPSG3857()).toWgs84(x, y).y, Toast.LENGTH_SHORT).show();
Log.d(TAG, "onMapClicked " + x + " " + y);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
mPoiGlanceView.setVisibility(View.INVISIBLE);
}
});
}
@Override
public void onVectorElementClicked(VectorElement vectorElement, double v, double v2, boolean b) {
if (vectorElement != null && vectorElement instanceof Marker) {
showPopupView(vectorElement);
Toast.makeText(activity, "onLabelClicked Marker!", Toast.LENGTH_SHORT).show();
}
}
private void showPopupView(VectorElement vectorElement) {
mPoiGlanceView.setVisibility(View.VISIBLE);
setUpUiElementsForView();
}
我在 nutiteq 的 github 文档中受到 ViewLabel 替代方案的启发 see here “使用 Android 标准布局工具”
关于android - Nutiteq:ViewLabel:延迟按钮执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064524/