У меня есть игровое приложение со следующей структурой Views. Сначала у меня есть пустой FrameLayout, например:
FrameLayout game_frame_layout = new FrameLayout(getApplicationContext());
Затем я добавляю к нему два вида:
game_frame_layout.addView(customView);
game_frame_layout.addView(butView);
CustomView предназначен для отображения всех видов движущихся игровых графиков, в то время как butView отображает некоторые ImageButtons поверх движущихся грапий. CustomView - это экземпляр класса CustomView, который расширяет SurfaceView.
CustomView включает следующий код
void updateView()
{
final SurfaceHolder holder = getHolder();
holder.setFormat(PixelFormat.RGBA_8888);
try
{
Canvas canvas = holder.lockCanvas();
if (canvas != null)
{
onDraw(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
Линия holder.setFormat(PixelFormat.RGBA_8888);
является недавним добавлением (см. здесь). Без этой линии моя анимированная графика выглядит в формате со слишком небольшим количеством цветов (по экспериментам я понял, что это "RGB_565" ), поэтому я получаю несколько banding артефакты. Когда я добавил строку setFormat, графика отображается отлично (без полосы) на моей Samsung Galaxy Tab 10.1 (Android 3.1)... но на трех других устройствах: Samsung GT-l9100 (4.1.2), Nexus 7 ME370T 4.4.2 и HTC One X 4.2.2. Я вижу только кнопки, соответствующие butView, на полностью черном фоне. В журналах, в которых произошла сбой программы, нет никаких указаний.
Любые идеи?