Мне нужно отобразить карту кинозала с секторами, рядами и сиденьями. В настоящее время у меня есть около 1000 мест (заполненные прямоугольники), чтобы нарисовать, и я делаю это для каждого сиденья по телефону:Как нарисовать много прямоугольников на холсте с хорошей производительностью?
canvas.drawRect(seatRect, seatPaint)
мой взгляд, должен также поддерживать масштабирование, прокрутка и брыкаться. Спектакль ужасен. Я попытался улучшить его, явно включив аппаратное ускорение, но ничего не изменилось. По-моему, он был включен по умолчанию на моем Nexus 4 (Api 22)
Не могли бы вы предложить какие-либо способы визуализации огромного количества прямоугольников на высокой скорости? Поэтому движение, масштабирование анимации является гладким.
Пользовательский код Просмотр класс:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.scale(mScaleFactor, mScaleFactor); // scaling support
canvas.translate(mTranslateX, mTranslateY); // scrolling support
if (mEventMap != null) {
mEventMap.paint(canvas);
}
canvas.restore();
}
код EventMap:
public void paint(Canvas canvas) {
for (EventPlace place : places) {
if (place.isSelected())
placePaint.setColor(0xFF00FF00);
else if (place.isAvailable())
placePaint.setColor(place.getColor());
else
placePaint.setColor(0xFF000000);
canvas.drawRect(place.getBounds(), placePaint);
}
}
Ни один из методов, называемых в OnDraw не создает каких-либо экземпляров. Есть только много прямоугольников ...
Можете ли вы опубликовать код вашего OnDraw метода? – Chaosit
Не видя своего кода, я могу только предположить, что вы можете добавить слишком много новых объектов в onDraw, и поэтому я могу предложить создать экземпляр Path где-то перед отправкой ничьей – Chaosit