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://www.cnblogs.com/gis-luq 作者:gis-luq 郵箱:[email protected]