Closed pdapnz closed 6 years ago
Тормозит и в итоге совсем перестает рисоваться из-за огромного размера текстуры на которую помещается Path.
W/OpenGLRenderer: Shape too large to be rendered into a texture (16688x13029, max=16384x16384)
или так
W/OpenGLRenderer: Shape path too large to be rendered into a texture (4145x3148, max=4096x4096)
Способ решения проблемы нашел здесь: https://github.com/MKergall/osmbonuspack/issues/171
Суть в том чтобы рисовать сначала на Bitmap размером с экран. И затем этот Bitmap помещать на экран.
public class TrackSoftwareRender implements IRender {
private View mapView;
private Bitmap bmp;
private Path path = new Path();
public TrackSoftwareRender(View mapView ) {
this.mapView = mapView ;
}
@Override
public void draw(Canvas canvas, OverlayItem item_) {
TrackOverlayItem item = (TrackOverlayItem) item_;
if (item.isVisible() && item.screenPoint != null && item.screenPoint.size() > 0) {
final Rect dest = new Rect(0, 0, mapView.getWidth() + 1, mapView.getHeight() + 1);
if (bmp == null || bmp.getWidth() != mapView.getWidth() || bmp.getHeight() != mapView.getHeight()) { // create Bitmap only once if needed
bmp = Bitmap.createBitmap(mapView.getWidth(), mapView.getHeight(), Bitmap.Config.ARGB_8888); // this most time consuming step, app. 30 ms!
} else {
bmp.eraseColor(Color.TRANSPARENT); // recycle bitmap and erase the old bitmap, much faster 0.6 .. 0.9 ms
}
final Canvas bmpCanvas = new Canvas(bmp);
path.reset();
ScreenPoint screenPoint = item.screenPoint.get(0);
path.moveTo(screenPoint.getX(), screenPoint.getY());
for (int i = 1; i < item.screenPoint.size(); i++) {
screenPoint = item.screenPoint.get(i);
path.lineTo(screenPoint.getX(), screenPoint.getY());
}
bmpCanvas.drawPath(path, MapPaint.getPaint());
canvas.drawBitmap(bmp, dest, dest, null);
}
}
}
Проверял на "дедушкином" телефоне такой вариант на нем работает быстрее чем пример из мапкита.
Доброго времени суток!
Обнаружил пару проблем в примере мапкита "Путь". Подскажите пожалуйста как можно это побороть.
https://github.com/yandexmobile/yandexmapkit-android/tree/master/yandexmapkit-sample/src/ru/mapkittest/path
1) Если близко приблизить кусок пути, отрисовка карты начинает дико тормозить. Почему это может происходит и как можно с этим бороться?
2) Второй глюк с этим примером, если очень сильно приблизить часть линии, чтобы точки ломаной оказались за границей видимой области, то линия вообще пропадает с экрана. Как можно это побороть?