Возможно ли иметь живые обои с 32-битным (ARGB_8888) форматом поверхности?

При рендеринге моих живых обоев у меня есть некоторые артефакты градиента полосы. Эта статья прекрасно объясняет причину этого: для устранения большинства из них и повышения эффективности я могу рисовать 32-битные растровые изображения поверх 32-битных растровых изображений:)

Поэтому я задал себе вопрос: как это сделать для живых обоев? И не найти ответа:) В живых обоях у нас есть поверхность, созданная для нас с помощью Android Framework. И так получилось, что это поверхность RGB_565, потому что:

// code inside my WallpaperService.Engine subclass
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
   Log.d("test", "format is: "+format); // => prints 4, which is PixelFormat.RGB_565
}

И, похоже, я не могу попросить платформу Android изменить это на ARGB_8888. Или есть?

PS Конечно, я знаю, что могу делать другие вещи, описанные в вышеприведенной статье, например, применять дизеринг и т. Д., Поэтому, пожалуйста, не указывайте мне это. Я хотел бы найти ответ именно на вопрос, который я задал:)

1 ответ

Решение

Установите PixelFormat внутри onCreate()

holder.setFormat(PixelFormat.RGBA_8888);
Другие вопросы по тегам