在Mapbox [Android]中向MarkerOptions添加新属性的最佳方法是什么? [英] What's the best way to add new attributes to MarkerOptions in Mapbox [Android]?

查看:545
本文介绍了在Mapbox [Android]中向MarkerOptions添加新属性的最佳方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试向Mapbox中的标记添加新属性,扩展类变得有些混乱.

I am trying to add new attributes to a marker in Mapbox, extending the classes is getting a little messy.

向标记添加新属性的最佳方法是什么?

What is the best way to add new attributes to a marker?

推荐答案

4.1.0开始,我们引入了标记视图.这些扩展了Android View类,并允许您创建自己的标记适配器.我创建了

Starting with 4.1.0 we introduced marker views. These extend the Android View class and allow you to create your own marker adapter. I've created a good example doing this you can find in the demo app. I'll post some of the snippets of code here but it might be easier just looking at the source code on Github.

适配器:

// Custom marker view used for pulsing the background view of marker.
private static class PulseMarkerViewAdapter extends MapboxMap.MarkerViewAdapter<PulseMarkerView> {

private LayoutInflater inflater;

public PulseMarkerViewAdapter(@NonNull Context context) {
  super(context);
  this.inflater = LayoutInflater.from(context);
}

@Nullable
@Override
public View getView(@NonNull PulseMarkerView marker, @Nullable View convertView, @NonNull ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
    viewHolder = new ViewHolder();
    convertView = inflater.inflate(R.layout.view_pulse_marker, parent, false);
    viewHolder.foregroundImageView = (ImageView) convertView.findViewById(R.id.foreground_imageView);
    viewHolder.backgroundImageView = (ImageView) convertView.findViewById(R.id.background_imageview);
    convertView.setTag(viewHolder);
  }
  return convertView;
}

private static class ViewHolder {
  ImageView foregroundImageView;
  ImageView backgroundImageView;
}
}

PulseMarkerView:

PulseMarkerView:

public class PulseMarkerView extends MarkerView {

public PulseMarkerView(BaseMarkerViewOptions baseMarkerViewOptions) {
    super(baseMarkerViewOptions);
}
}

最后是PulseMarkerOptions:

and lastly, PulseMarkerOptions:

public class PulseMarkerViewOptions extends BaseMarkerViewOptions<PulseMarkerView, PulseMarkerViewOptions> {

public PulseMarkerViewOptions() {
}

protected PulseMarkerViewOptions(Parcel in) {
position((LatLng) in.readParcelable(LatLng.class.getClassLoader()));
snippet(in.readString());
title(in.readString());
flat(in.readByte() != 0);
anchor(in.readFloat(), in.readFloat());
selected = in.readByte() != 0;
rotation(in.readFloat());
if (in.readByte() != 0) {
  // this means we have an icon
  String iconId = in.readString();
  Bitmap iconBitmap = in.readParcelable(Bitmap.class.getClassLoader());
  Icon icon = IconFactory.recreate(iconId, iconBitmap);
  icon(icon);
}
}

@Override
public PulseMarkerViewOptions getThis() {
  return this;
}

@Override
public int describeContents() {
  return 0;
}

@Override
public void writeToParcel(Parcel out, int flags) {
out.writeParcelable(getPosition(), flags);
out.writeString(getSnippet());
out.writeString(getTitle());
out.writeByte((byte) (isFlat() ? 1 : 0));
out.writeFloat(getAnchorU());
out.writeFloat(getAnchorV());
out.writeFloat(getInfoWindowAnchorU());
out.writeFloat(getInfoWindowAnchorV());
out.writeByte((byte) (selected ? 1 : 0));
out.writeFloat(getRotation());
Icon icon = getIcon();
out.writeByte((byte) (icon != null ? 1 : 0));
if (icon != null) {
  out.writeString(getIcon().getId());
  out.writeParcelable(getIcon().getBitmap(), flags);
}
}

@Override
public PulseMarkerView getMarker() {
  return new PulseMarkerView(this);
}

public static final Parcelable.Creator<PulseMarkerViewOptions> CREATOR =
new Parcelable.Creator<PulseMarkerViewOptions>() {
  public PulseMarkerViewOptions createFromParcel(Parcel in) {
    return new PulseMarkerViewOptions(in);
  }

  public PulseMarkerViewOptions[] newArray(int size) {
    return new PulseMarkerViewOptions[size];
  }
};
}

从本质上讲,这会公开markerViews背景,以便我们可以对其进行脉动(动画),但您可以设置自己的属性.有关此操作的更多示例,请参见 testapp .希望这就是您想要的.

Essentially this exposes the markerViews background so that we can pulse (animate) it but you can setup your own attributes. More examples of this being done can be found in the testapp. Hope this is what you were looking for.

这篇关于在Mapbox [Android]中向MarkerOptions添加新属性的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆