首页 / 浏览问题 / 移动GIS / 问题详情
Android端文字标注如何设置适当大小
9EXP 2022年04月22日

使用产品:imobile-10.2.1-228

问题详细描述:在图层上添加GeoText的时候,在

textStyle.setSizeFixed(false);设置字体不固定的前提下
textStyle.setFontHeight这个方法进行字体大小设置时,总是不对,文字明显太大了,已经用
mapControl.getMap().getScale()在缩放时计算了地图缩放倍数,但最终字体大小还是大了(用px和dp尺寸都大了)
目前我用dp尺寸,再将尺寸乘以1/8,基本上刚好。虽然目前在测试机上效果达到了,但是希望了解为什么会这样

               textStyle.setFontHeight(fontSize * (initScale / mapControl.getMap().getScale()));
               //这里的fontsize并不大,也就10几
               textStyle.setSizeFixed(false);
               geoText.setTextStyle(textStyle);

问题关闭原因: 目前靠蒙的,先凑合用着

1个回答

您好,根据您提供的信息来看,

1.您可以使用textStyle.setFontScale(double value) 设置注记字体的缩放比例。

2.可能是您只使用了textStyle.setFontHeight,还要使用textStyle.setFontWidth

希望可以帮助到您
3,745EXP 2022年04月24日

我不知道是填哪些参数,胡乱试了下错得更多了crying我现在一共三个参数文字高度fontSize,初始的地图缩放比例initScale,以及直接获取当前地图的缩放比例。麻烦帮我用这些举个以上3方法使用的例子,多谢了

1.以下代码示范如何将自定义的文本风格应用于文本对象,并将文本对象输出为 PNG 图片。

 public void textStyleTest() {
        // 假设打开一个工作空间 <a href="Workspace.html">workspace</a> 对象,并有相应MapControl对象
        // 设置文本风格
        TextStyle textStyle = new TextStyle();
        textStyle.setRotation(30.0);
        textStyle.setShadow(true);
        textStyle.setAlignment(TextAlignment.TOPCENTER);
        textStyle.setBackColor(java.awt.Color.BLUE);
        textStyle.setForeColor(java.awt.Color.BLACK);
        textStyle.setBackOpaque(true);
        textStyle.setBold(true);
        textStyle.setFontName("宋体");
        textStyle.setFontHeight(100.0);
        textStyle.setFontWidth(100.0);
        textStyle.setSizeFixed(true);
        textStyle.setItalic(true);
        textStyle.setOutline(true);
        textStyle.setStrikeout(true);
        textStyle.setUnderline(true);
        textStyle.setWeight(500);
        System.out.println("文本风格为:" + textStyle.toString());
 
        // 将文本风格应用于文本对象
        GeoText geotext = new GeoText();
        TextPart part = new TextPart("SuperMap", new Point2D(150, 150), 10.0);
        geotext.addPart(part);
        geotext.setTextStyle(textStyle);
 
        // 获取 Map 对象
        Map map = mapControl.getMap();
 
        // 将文本对象添加到地图的跟踪图层,出图显示
        map.getTrackingLayer().add(geotext, "");
        map.setViewBounds(new Rectangle2D(new Point2D(0, 0), new Point2D(300,300)));
        Bitmap bitmap = Bitmap.createBitmap(256, 256, Config.ARGB_8888);
        mapControl.outputMap(bitmap);
  String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
        String path = rootPath + "/textstyle";
        try{
                FileOutputStream out = new FileOutputStream(path);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        } catch(Exception e){
                e.printStackTrace();
        }
 
        // 释放资源
        part.dispose();
        geotext.dispose();
        textStyle.dispose();
        mapControl.dispose();
        workspace.dispose();
 }

2.使用mapcontrol.getmap.getviewbounds/setviewbounds来获取/设置当前地图比例

我放弃了,还是就设置fontHeight得了,主要是不知道setFontWidth,setFontHeight,setFontScale这3个怎么搭配;试了下getviewbounds这个取比例不好用,地图刚显示取width有可能得到0值,直接getScale要稳点
...