- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 iOS 中,您可以通过调用以下方式轻松地为您的标记设置标注:
[marker setCanShowCallout:YES];
[marker setRightCalloutAccessoryView:YOUR_BUTTON];
但是我找不到 Mapbox Android SDK 的这个功能。我现在有一个监听器可以检测 calloutview 上的触摸,但我如何设置 callout 图像/按钮?
Marker marker = new Marker(p.getTitle(), p.getCatagoryName(), new LatLng(p.getLatitude(), p.getLongitude()));
marker.setMarker(getResources().getDrawable(getResources().getIdentifier(string, "drawable", getActivity().getPackageName())));
mMapView.addMarker(marker);
InfoWindow toolTip = marker.getToolTip(mMapView);
View view = toolTip.getView();
// view.setBackgroundResource(R.drawable.callout_button); THIS DOES NOT WORK
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e(TAG, "onTouch");
return true;
}
});
最佳答案
您必须自己构建此功能,但实际上通过定义自定义标记和工具提示布局很容易实现。
首先定义您的工具提示布局。显然必须是 RelativeLayout 才能定位标注图像。将您的上下文设置为创建标记的任何 Activity 。必须包含底部的 TipView,因为它控制自定义工具提示的大小。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/white"
android:id="@+id/parent_layout"
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.XXX.MainActivity">
<TextView
android:id="@+id/tooltip_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="18sp"
android:maxEms="17"
android:layout_gravity="left"
android:layout_weight="1"
android:text="@string/toolTipTitle"/>
<TextView
android:id="@+id/tooltip_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="14sp"
android:maxEms="17"
android:text="@string/toolTipDescription"
android:layout_below="@+id/tooltip_title"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/marker_about"
android:src="@drawable/ic_action_about"
android:layout_toEndOf="@+id/tooltip_description"
android:layout_toRightOf="@+id/tooltip_description"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp" />
<com.mapbox.mapboxsdk.views.TipView
android:layout_width="132dp"
android:layout_height="10dp"/>
</RelativeLayout>
然后创建一个自定义的 Marker 类并覆盖 createTooltip 方法以返回具有新布局的 InfoWindow:
public class CustomMarker extends Marker {
public CustomMarker(MapView mv, String aTitle, String aDescription, LatLng aLatLng){
super(mv, aTitle, aDescription, aLatLng);
}
@Override
protected InfoWindow createTooltip(MapView mv) {
return new InfoWindow(R.layout.custom_tooltip, mv);
}
}
这不应更改任何其他功能,因此您拥有的代码仍然有效。只需将标记更改为自定义类名,您就应该设置好了。
编辑:这是实际使用我的 map 设置 CustomMarker 和 InfoWindow 的代码。你可以看到我在点击时启动了另一个 Activity ,并且我已经为标记设置了一个自定义图标,但这些东西不是必需的:
CustomMarker m =
new CustomMarker(mv, report.issue, report.getFormattedDateString(), latLng);
m.setIcon(new Icon(this, Icon.Size.LARGE, "oil-well", "FF0000"));
//get the InfoWindow's view so that you can set a touch listener which will switch
//to the marker's detailed view when clicked
final InfoWindow infoWindow = m.getToolTip(mv);
View view = infoWindow.getView();
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//make sure to choose action down or up, otherwise the intent will launch twice
if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
startActivity(intent);
//close the InfoWindow so it's not still open when coming back to the map
infoWindow.close();
}
return true;
}
});
mv.addMarker(m);
我也在使用 SDK 0.5.0-SNAPSHOT。我不确定这是否适用于旧版本的 SDK。
关于java - 设置标注图像 mapbox android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24013082/
我有一条短线 (MKPolyline) 和一个自定义注释类 (MKPointAnnotaion)。现在我的点注释位于多段线的中点。但是,我希望每当触摸多段线上的任何点时都显示标注,类似于路由在 map
我正在使用此自定义 MKAnnotationView http://blog.asolutions.com/2010/09/building-custom-map-annotation-callout
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicates: Custom MKPinAnnotation callout bubble similar to default
为什么这不起作用? - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { if (TRAC
我试图在不触摸引脚的情况下隐藏 AnnotationView,这可能吗?谢谢! for (id currentAnnotation in self.mapView.annotations) {
我正在使用 JQplot 饼图。我需要标 checkout 现在图表之外。我怎样才能做到这一点? 最佳答案 如果您指的是数据标签,则需要将 dataLabelPositionFactor 设置为大于
我的 map 上有 20 个图钉,点击后每个图钉都会显示带有 field 名称的注释,并且右侧有一个标注按钮。我已使用 segue 成功将此按钮链接到单个页面。问题是所有位置都链接到同一页面。我想要
是否可以像在 iPhone 和 Google map 中那样将标注附加到 ItemizedOverlay 项目? 最佳答案 我假设“标注”是指通常出现的信息窗口/“气球提示”?这是代码和示例: htt
我正在使用 Python 2.7 和 PySide(Qt 包装器)开发 GUI 应用程序。 我希望标注小部件 float 在其他小部件上方(类似于工具提示),但不使用标准工具提示框架,该框架基本上为小
我有一个 TableView,用于在点击单元格时显示 MapView 注释标注。 在 iOS 10 中,我可以将 MapView 置于注释的中心,然后使用以下方法显示它的标注: func tableV
我想创建一个自定义 MKAnnotationView 标注,如此图所示。我已经测试了几种解决方案,但它们只允许自定义左/右图像和标题/副标题。谁能给我一些源代码或教程链接吗? 目前我一无所知。请帮忙。
我一直在寻找可能是这个问题的根源,但我看不出出了什么问题。我希望你能在这里帮助我。 我正在尝试在 mapView 中显示注释,图钉被丢弃但无法看到标注,直到我先点击用户位置注释(蓝点)然后返回并点击注
我需要将 xml 数据转换为 Excel 文件。当我写入文件时,我的代码可以正常工作,但是,当我尝试写入输出流时,代码无法正常工作。 我想做的就是使用 Apache POI 类创建一个 excel 文
如何始终在 map View 中显示标注?如果我们点击 map View 标注隐藏并再次点击图钉显示。我不想这样......,我需要始终显示标注,没有隐藏。这个怎么做。请帮我。我正在使用下面的代码来显
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我已遵循指南here创建自定义标注 View 。我在自定义类中添加了两行: var dismissesAutomatically: Bool = false var isAnchoredToAnnot
我们正在 Angular.js 中做一个项目,我们从用户体验人员那里获得的模型大量使用交互式弹出窗口/标注。 问题是我似乎无法以干净的方式将这些映射到 Angular 概念上。从概念上讲,它们需要自己
我在显示注释标题时遇到问题,如下图所示。第一张图片很好地表示了值(value);另一方面,一旦值上升到三位数,标题就会显示三个点,如第二张图片所示。我想知道如何解决这个问题。任何想法都将非常受欢迎!非
我正在分析几百万封电子邮件。我的目标是能够分类然后分组。组可以是例如: 交付问题(交付缓慢、发货前处理缓慢、可用性信息不正确等) 客户服务问题(电子邮件回复速度慢、回复不礼貌等) 返回问题(返回请求处
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我是一名优秀的程序员,十分优秀!