Android Canvas协调

时间:2014-03-02 18:16:12

标签: android canvas android-animation android-maps

我正在为我的大学图书馆开发一个Android应用程序。我想画出我图书馆的地图。地图应显示书架编号及其位置。 我试图通过在Android Canvas上绘制线条来实现这一点。 有没有更好的方法来绘制我的图书馆地图?

其次,对我来说,使用Canvas坐标系统非常麻烦。是否有任何可用的工具可以绘制画布(例如,像油漆一样的东西)并从中生成坐标?

1 个答案:

答案 0 :(得分:0)

您可以将地图绘制为文件(png,jpg,svg),然后在画布上绘制图片。我建议使用svg-android(https://code.google.com/p/svg-android/)然后你可以轻松地改变不同设备的图片比例。您可以在InkScape或Illustrator中绘制SVG,并使用这些程序计算出所需坐标的像素距离。

将SVG(例如library_map.svg)放入res / raw文件夹并使用以下命令调用:

    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.library_map);

创建一个视图并在onDraw()中添加:

      canvas.translate(map_x_position, map_y_position); 
      canvas.drawPicture(svg.getPicture());
      canvas.translate(-map_x_position, -map_y_position);

      canvas.translate(marker_x_position, marker_y_position); 
      canvas.drawPicture(marker.getPicture());
      canvas.translate(-marker_x_position, -marker_y_position);

此功能对于支持不同的屏幕尺寸非常有用:

float getPxFromDp(float dpValueToConvert) {
    // Converts dp into its equivalent px
    Resources r = getResources();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValueToConvert, r.getDisplayMetrics());
    return px;
}

使用svg-android需要注意的一点是它不支持硬件加速。您可以将android:hardwareAccelerated="false"放入AndroidManifest.xml的应用程序部分,以确保svg在较新的设备中显示正常。