Ich habe eine Spiele-App mit der folgenden Ansichten Struktur. Zuerst habe ich eine leere FrameLayout wie so:SurfaceHolder.setFormat (PixelFormat.RGBA_8888) schlägt auf einigen Geräten und nicht anderen
FrameLayout game_frame_layout = new FrameLayout(getApplicationContext());
Dann füge ich zwei Ansichten, um es wie so:
game_frame_layout.addView(customView);
game_frame_layout.addView(butView);
Die Custom ist für alle Arten von sich bewegenden Spielgrafik angezeigt wird, während die butView einige ImageButtons zeigt oben auf den beweglichen Grafiken. Die customView ist eine Instanz einer Klasse CustomView, die SurfaceView erweitert.
Custom umfasst den folgenden Code
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();
}
}
Die Linie holder.setFormat(PixelFormat.RGBA_8888);
ist ein neuer Zusatz (siehe here). Ohne diese Linie scheinen meine animierten Grafiken in einem Format mit zu wenigen Farben zu sein (experimentell folgerte ich, dass es "RGB_565" war), so dass ich einige banding Artefakte erhalte. Als ich die setFormat-Zeile hinzugefügt habe, erscheinen die Grafiken perfekt (ohne Streifenbildung) auf meinem Samsung Galaxy Tab 10.1 (Android 3.1) ... aber auf drei anderen Geräten: einem Samsung GT-l9100 (4.1.2), einem Nexus 7 ME370T 4.4 .2 und ein HTC One X 4.2.2 Ich sehe nur die Tasten, die ButView mit einem völlig schwarzen Hintergrund entsprechen. In den Protokollen wird nicht angezeigt, dass das Programm abgestürzt ist.
Irgendwelche Ideen?
Brauchen Sie Transparenz für diese Oberfläche oder könnten Sie auch 'PixelFormat.RGB_888' eine Aufnahme geben? – tiguchi
Bewegen sich Ihre Tasten auf Ihren "schwarzen" bewegten Grafiken? –