arcgis android 中文注记乱码解决方案

       从arcgis api for android 10.2开始,中文注记乱码的问题就一直困扰我。有文章中指出,是因为android手机fonts目录中默认字体库不支持中文导致的。可以通过设置textsymbol的字体解决,经测试部分机型可以正常显示,但是不同的android手机字体库是不同的,因此该方法不能从根本上解决问题。

       个人感觉还是将注记转换成图片以picturesymbol的方式显示注记的方法靠谱。

       label.xml文件,用于设置注记的显示样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/labellayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/txtView"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="2dp"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="#00ffff"
        android:textSize="10sp"
        android:maxLines="10"
        android:gravity="center"
        />
</LinearLayout>

ArcGISUtils类,提供方法将view转换为bitmap

public class ArcGISUtils
{
  public static Bitmap convertViewToBitmap(View view)
  {
    view.measure(View.MeasureSpec.makeMeasureSpec(0, 0), View.MeasureSpec.makeMeasureSpec(0, 0));
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    view.buildDrawingCache();
    Bitmap bitmap = view.getDrawingCache();
    return bitmap;
  }
}

SymbolUtils类,用于生成PictureMarkerSymbol

public class SymbolUtils
{
  public static PictureMarkerSymbol pictureSymobel(Context context, int layoutID)
  {
    LayoutInflater inflater = LayoutInflater.from(context);
    View vw = inflater.inflate(layoutID, null);
    Bitmap bt = ArcGISUtils.convertViewToBitmap(vw);
    BitmapDrawable temp = new BitmapDrawable(context.getResources(), bt);

    return new PictureMarkerSymbol(temp);
  }

  public static PictureMarkerSymbol pictureSymobel(Context context, View view)
  {
    Bitmap bt = ArcGISUtils.convertViewToBitmap(view);
    BitmapDrawable temp = new BitmapDrawable(context.getResources(), bt);

    return new PictureMarkerSymbol(temp);
  }

  public static PictureMarkerSymbol TextPicSymobel(Context context, String label)
  {
    LayoutInflater inflater = LayoutInflater.from(context);
    View measurebiaozhuView = inflater.inflate(R.layout.label, null);
    LinearLayout layout = (LinearLayout)measurebiaozhuView.findViewById(R.id.labellayout);

    TextView txtView = (TextView)measurebiaozhuView.findViewById(R.id.txtView);
    txtView.setText(label);
    Bitmap bt = ArcGISUtils.convertViewToBitmap(layout);
    BitmapDrawable temp = new BitmapDrawable(context.getResources(), bt);
    return new PictureMarkerSymbol(temp);
  }

  public static enum MODE
  {
    RIGHT, 
    LEFT, 
    TOP, 
    BOTTOM;
  }
}

PictureMarkerSymbol pictureMarkerSymbol = SymbolUtils.TextPicSymobel(context, text);

text即为标注的文字,将symbol设置给graphic即可显示。

猜你喜欢

转载自blog.csdn.net/gis_zhouda/article/details/80360022