ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题

 

1、前言

问题:在部分Android机型中使用ArcGIS for Android 10.1.1 API 中文标注导致程序异常崩溃。

说明:手里有两台机器一台是Nexus4,原生系统,版本4.4.4,使用10.1.1API中的TextSymbol标注中英文显示无任何异常。另一台机器是Note3,系统版本三星定制系统4.4.2,使用该机器在未升级前使用TextSymbol标注中英文显示正常,但是系统升级到4.4.2时,英文标注正常,中文标注导致程序卡死异常崩溃。什么原因产生的暂时还没有搞清楚,初步想法是用文字生成图片然后用PictureMarkerSymbol进行标注。

以下文本生成图片的解决方案主要参考牧羊的专栏ArcGIS For Android 中文标注不显示解决方案实现,考虑到不同分辨率及DPI下图片的显示效果不同,特此对不同dpi的手机做了显示区分,这里我以dpi400为界分了两级,使得note3和nexus4显示效果统一。

  //DPI获取核心代码
  DisplayMetrics metric = new DisplayMetrics();   viewerActivity.getWindowManager().getDefaultDisplay().getMetrics(metric);   int densityDpi = metric.densityDpi; // 屏幕密度DPI   if(densityDpi>400){   return 2;   }else{    return 1;
  }

2、解决方案

 /**
      * 文字转换BitMap
      * @param text
      * @return
      */
    public static Drawable createMapBitMap(String text) {

     //默认字体大小个高度
int size = 50; int height = 60;
     //根据dpi级别设置自己大小和高度,是nexus4、note3中显示效果统一
if(CommonValue.dpilevel==1){ size = 22; height = 30; }else if(CommonValue.dpilevel==2){ size = 50; height = 60; } Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setTextSize(size); paint.setAntiAlias(true); paint.setTextAlign(Align.LEFT);//位置 float textLength = paint.measureText(text); int width = (int) textLength; Bitmap newb = Bitmap.createBitmap(width*2, height*2, Config.ARGB_8888); Canvas cv = new Canvas(newb); cv.drawColor(Color.parseColor("#00000000")); cv.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); cv.drawText(text, width, size, paint); cv.save(Canvas.ALL_SAVE_FLAG);// 保存 cv.restore();// 存储 return new BitmapDrawable(newb); }

使用方法

PictureMarkerSymbol markerSymbol = new PictureMarkerSymbol( CacheData.createMapBitMap("test")); 
Graphic graphic2
= new Graphic(env.getCenter(), markerSymbol);

标注显示效果

3、参考链接

http://blog.csdn.net/u014014578/article/details/36180485

posted on 2014-10-21 14:37  gis-luq  阅读(1067)  评论(0编辑  收藏  举报