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

同步博客:http://www.cnblogs.com/gis-luq​
作者:gis-luq 
邮箱:luqiang.gis@foxmail.com
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值