我需要渲染一个电影院的地图,包括区域、排数和座位。 目前我需要绘制大约1000个座位(填充矩形),并且我正在通过每个座位进行调用来完成这个任务:
canvas.drawRect(seatRect, seatPaint)
我的视图还必须支持缩放、滚动和fling。
性能很差。我尝试通过明确启用硬件加速来改善它,但是没有任何改变,似乎在我的 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
方法中分配了太多的新对象,因此我建议在调用draw
之前创建Path
实例的某个地方。 - Chaosit