首页 > 代码库 > 【控件】给地图添加一个简单的比例尺条

【控件】给地图添加一个简单的比例尺条

ArcGIS API for Android 10.2.3暂时没有直接提供显示比例尺条的功能,但是又必须要用肿么办呢?自己动手丰衣足食!以一个简单的例子介绍一下如何给地图添加一个简单的比例尺条。

一、目标

在屏幕下方添加一个长2cm的比例尺条,实时显示地图当前比例尺,随底图颜色的改变而改变,并动态调整其位置。

 

二、逻辑

1、两个TextView:一个用于显示获取到比例尺,一个用于显示一个2cm的比例尺条

2、2cm比例尺条:1dp=0.00625英寸=0.015875 厘米,理论上不同品牌的手机这个比例是不变的,但是实际上是不太一样的,根据实际情况微调;

3、通过改变TextView的字体颜色和背景达到随底图颜色变化的目的;

4、将比例尺和下方的result界面置于同一个LinearLayout中,这样就不用担心比例尺条会被下方窗口遮盖。

 

三、代码

1、布局层次

      <LinearLayout
            android:id="@+id/layout_scale_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:orientation="vertical"
            android:visibility="visible" >

            <RelativeLayout
                android:id="@+id/layout_scale"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:paddingBottom="5dp"
                android:paddingLeft="5dp" >

                <TextView
                    android:id="@+id/txtScaleBar"
                    android:layout_width="115dp"
                    android:layout_height="10dp"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:background="@drawable/scale_06_dark" />

                <TextView
                    android:id="@+id/txtScale"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:text="2cm"
                    android:textSize="15sp" />
            </RelativeLayout>

            <LinearLayout
                android:id="@+id/layout_detailboard"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/listbackground_blue"
                android:orientation="horizontal"
                android:visibility="gone" >
            </LinearLayout>
        </LinearLayout>


 2、格式化比例尺并将单位转换为cm/m,其中若比例尺条为2cm,则分母除以50

doubleFormat = new DecimalFormat("0");
txtScale.setText(doubleFormat.format(mMapView.getScale() / 50)+ "米");


3、动态控制比例尺颜色和背景

txtScale.setTextColor(android.graphics.Color.WHITE);
txtScaleBar.setBackground(getResources().getDrawable(R.drawable.scale_06_light));

 

四、讨论

1、问题关键在于如何在自己手机屏幕上定义一条2cm的比例尺条,建议百度一下px、dp、dip、sp、in、cm相关知识;

2、该实例比较简单,但实用性很强,可用于简单量测,实测精度在1米左右;

3、顺便吐个槽:百度地图那种比例尺条随地图缩放长度不断变化,看着很炫,但是基本什么用。

4、更多参考:

http://blog.csdn.net/xiaanming/article/details/11821523

http://stackoverflow.com/questions/23303823/android-uses-dp-why-not-cm-mm

 

 

以上谨代表个人意见,抛砖引玉,代码有写作不规范的地方,接受走过的路过的直接拍砖斧正。