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

来源:互联网 发布:python url编码 编辑:程序博客网 时间:2024/06/06 17:08

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

同步博客:http://www.cnblogs.com/gis-luq​作者:gis-luq 邮箱:luqiang.gis@foxmail.com
0 0
原创粉丝点击