Координата Android Canvas
Я разрабатываю приложение для Android для моей библиотеки колледжа. Я хочу нарисовать карту моей библиотеки. Карта должна отображать номер книжной полки вместе с ее местоположением. Я пытаюсь добиться этого, рисуя линии на Android Canvas. Есть ли лучший способ нарисовать карту моей библиотеки?
Во-вторых, мне очень трудно работать с системой координат холста. Есть ли какой-нибудь инструмент, с помощью которого я могу нарисовать холст (например, рисовать как вещи) и генерировать из него координаты?
1 ответ
Вы можете нарисовать карту в виде файла (png, jpg, svg), а затем нарисовать картинку на холсте. Я бы предложил использовать svg-android ( https://code.google.com/p/svg-android/), тогда вы можете легко изменить масштаб изображения для разных устройств. Вы можете нарисовать SVG в InkScape или Illustrator и использовать эти программы для определения расстояния в пикселях до желаемых координат.
Поместите 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 хорошо отображается на новых устройствах.