我正在为我的大学图书馆开发一个Android应用程序。我想画出我图书馆的地图。地图应显示书架编号及其位置。 我试图通过在Android Canvas上绘制线条来实现这一点。 有没有更好的方法来绘制我的图书馆地图?
其次,对我来说,使用Canvas坐标系统非常麻烦。是否有任何可用的工具可以绘制画布(例如,像油漆一样的东西)并从中生成坐标?
答案 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在较新的设备中显示正常。