arcgis for android 中文显示问题
来源:互联网 发布:凯聪网络摄像机软件 编辑:程序博客网 时间:2024/05/29 02:06
对于TextSymbol中中文不能显示的问题,网上找到了几种解决方案,对比后采用
ArcGIS For Android 中文标注不显示解决方案。
解决方案
这个方案是把文字转成bitmap,再以PictureMarkerSymbol的形式加到graphic上,关键代码:
public static Drawable createMapBitMap(String text) { Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setTextSize(20); paint.setAntiAlias(true); paint.setTextAlign(Align.CENTER); float textLength = paint.measureText(text); int width = (int) textLength + 10; int height = 40; Bitmap newb = Bitmap.createBitmap(width, height, 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 / 2, 20, paint); cv.save(Canvas.ALL_SAVE_FLAG);// 保存 cv.restore();// 存储 return new BitmapDrawable(newb); }
这种方式会对性能造成影响,经过我的测试,添加100个文字标注需要3·4秒,而同样的文字,使用TextSymbol只有1秒,所以使用的时候要注意这个问题。
我对这个方法进行了完善,加入了不同dpi屏幕的大小适配和文字显示位置的设置,并打包成一个类,方便以后直接使用。
完整类:
public class CHTextSymbol{ int textSize; int textColor; String text; float dpi; int horizontalAlignment=2; int verticalAlignment=0; public static final int LEFT=0; public static final int CENTER=1; public static final int RIGHT=2; public static final int TOP=0; public static final int BOTTOM=2; public CHTextSymbol(int textSize, int textColor, String text, Context context) { this.textSize = textSize; this.textColor = textColor; this.text = text; DisplayMetrics metrics= context.getResources().getDisplayMetrics(); int ppi=metrics.densityDpi; dpi=ppi/160f; } public PictureMarkerSymbol build(int horizontalAlignment,int verticalAlignment){ this.horizontalAlignment=horizontalAlignment; this.verticalAlignment=verticalAlignment; PictureMarkerSymbol symbol=new PictureMarkerSymbol(createMapBitMap(text)); return symbol; } public PictureMarkerSymbol build(){ PictureMarkerSymbol symbol=new PictureMarkerSymbol(createMapBitMap(text)); return symbol; } /** * 文字转换BitMap * @param text * @return */ private Drawable createMapBitMap(String text) { Paint paint = new Paint(); paint.setColor(textColor); paint.setTextSize(textSize*dpi); paint.setAntiAlias(true); paint.setTextAlign(Paint.Align.CENTER); float textLength = paint.measureText(text); int width = (int) textLength*2; int height = (int) (textSize*dpi*2); Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.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)); float x=width*3/4; float y=height/2-textSize/2; switch (horizontalAlignment){ case LEFT: x=width/4; break; case CENTER: x=width/2; break; case RIGHT: x=width*3/4; break; } switch (verticalAlignment){ case TOP: y=height/2-textSize/2; break; case CENTER: y=height*3/4-textSize/2; break; case BOTTOM: y=height-textSize/2; break; } cv.drawText(text, x,y, paint); cv.save(Canvas.ALL_SAVE_FLAG);// 保存 cv.restore();// 存储 return new BitmapDrawable(newb); }}
使用
graphicsLayer.addGraphic(new Graphic(point,new CHTextSymbol(20,Color.BLUE,"HSJKF哈市将开发哈坎",this).build()));graphicsLayer.addGraphic(new Graphic(point,new CHTextSymbol(20,Color.BLUE,"HSJKF哈市将开发哈坎",this).build(CHTextSymbol.LEFT,CHTextSymbol.BOTTOM)));
build中可以设置文字的位置,默认是右上角。
0 0
- arcgis for android 中文显示问题
- 如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题
- 再谈ArcGIS Runtime SDK for Android中文标注无法显示的问题
- ArcGIS For Android 中文标注不显示解决方案
- 解决arcgis for android中feature不显示的问题
- Arcgis For Android 不支持中文解决方案
- ArcGIS for Android —— 显示地图
- ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题
- ArcGIS for Android 临时图层绘制文字 汉字不显示问题
- arcgis for android 加载jpg格式的影像地图显示不出的问题
- arcgis for android 10.2.3 MapOnTouchListener 问题
- Arcgis for Android 中文乱码只因没有再尝试一步
- osg for android (四) osgText显示文字以及显示中文的问题
- Arcgis server for js 只FeatureLayer显示label的问题
- arcgis for Android 高亮显示选中要素
- ArcGIS for Android 10.2 GraphicsLayer数据显示性能增强
- arcgis for android 学习 - (2) hello Wrold. 显示一个地图
- 【ArcGIS for Android】使用自定义Callout显示地图信息
- 促使网民更多的浏览网站页面减少网站跳出率的7个方法
- 面试心得与总结—BAT、网易、蘑菇街
- JNI中javah -jni编辑.class文件提示找不到类文件
- 线性表的顺序表示和实现
- 基于HttpURLConnection的简单网络请求框架(开源),包含okhttp封装
- arcgis for android 中文显示问题
- Java进阶(十)java tomcat中context配置
- gitlab服务搬迁之后出现的客户端git clone的报错问题
- TabLayout+ViewPager+Fragment懒加载实现
- 关于dubbo服务的xml配置文件报错的问题
- Android Studio中如何引用.aar包
- 将sqlplus查询结果输出为文件
- Android AndroidStudio查看Key的SHA1 和MD5
- [SMOJ1831]小岛II