Я разрабатываю приложение для живых обоев, которое будет рисовать аналоговые часы.До сих пор я достиг точки, где я рисую часы, используя три растровых изображения: циферблат, часовая стрелка, минутная стрелка.
Когда я рисую часы и минуты, я делаю это так (псевдокод):
// without this it looks weird after rotate
Paint smoothPaint = new Paint(FILTER_BITMAP_FLAG);
canvas.drawBitmap(dialBitmap, 0, 0, null);
canvas.rotate(ANGLE_FOR_HOUR_HAND, w/2, h/2);
canvas.drawBitmap(hourBitmap, 0, 0, smoothPaint);
canvas.rotate(ANGLE_FOR_MINUTE_HAND, w/2, h/2);
canvas.drawBitmap(minuteBitmap, 0, 0, smoothPaint);
Это работает нормально, за исключением того, что у меня действительно низкая частота кадров: около 13 кадров в секунду.Если я отключу фильтрацию растровых изображений, она увеличится примерно до 24 кадров в секунду, но все еще будет низкой для меня.
Я знаю, что рисование 2D на Canvas никак не ускоряется, но все же хочу спросить, есть ли другие вариантыдля меня, чтобы ускорить этот код?Рисовать в растровое изображение изначально как-то?Может быть, что-то еще?
Использование OpenGL является опцией, но это не так просто, так как LiveWallpapers не поддерживает рисование GL, поэтому мне нужно использовать сторонние хаки (которые, как я знаю, существуют) для того, чего я бы не хотелделать ...