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 
郵箱:[email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章