Ich versuche die Einschubnavigation zu implementieren (a la Facebook, Path oder Google+ Android Apps). Die vollständige Quelle, um diesen Fehler zu reproduzieren can be found here.Android WebView Flicker Bug beim Animieren der Ansicht auf dem Gerät
Bei der Animation eines WebView
auf dem Bildschirm erscheint jedoch auf einem Gerät ein Flackern, als ob das Gerät gerade aus meinem WebView
herausbeißt, bevor es vom Bildschirm weggedrückt wird.
Das Artefakt auf dem Emulator nicht auftritt! Die Animation verläuft reibungslos.
Interessanterweise scheint das Flimmern nur auftreten, wenn die Ansicht eine WebView
ist animiert werden! Hier ist das gleiche Projekt, das TextView als Hauptinhaltsansicht verwendet.
Layout für die Webansicht Aktivität:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue" >
<WebView
android:id="@+id/web_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
Und für die Textansicht Aktivität:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue" >
<TextView
android:id="@+id/web_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there. no flicker!"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
-Code genannt in das Navigationsmenü gleiten:
private void slideIn() {
LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent();
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
menuView = inflater.inflate(R.layout.menu, null);
menuView.setLayoutParams(new FrameLayout.LayoutParams(SIZE, LayoutParams.MATCH_PARENT, Gravity.LEFT));
FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(menuView);
decorView.bringChildToFront(actionBarFrame);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams();
params.setMargins(SIZE, 0, -SIZE, 0);
actionBarFrame.setLayoutParams(params);
TranslateAnimation ta = new TranslateAnimation(-SIZE, 0, 0, 0);
ta.setDuration(DURATION);
actionBarFrame.startAnimation(ta);
}
Und es wieder heraus zu schieben:
private void slideOut() {
LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams();
params.setMargins(0, 0, 0, 0);
actionBarFrame.setLayoutParams(params);
TranslateAnimation ta = new TranslateAnimation(SIZE, 0, 0, 0);
ta.setDuration(DURATION);
ta.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
((FrameLayout) getWindow().getDecorView()).removeView(menuView);
menuView = null;
}
@Override public void onAnimationRepeat(Animation arg0) { }
@Override public void onAnimationStart(Animation arg0) { }
});
actionBarFrame.startAnimation(ta);
}
ich den Code zu BitBucket als öffentlicher Repo hochgeladen, so dass Sie dieses Projekt können versuchen, genau wie ich.
Jede Hilfe oder Ideen, warum dies geschieht oder wie es zu beheben wäre sehr dankbar! Was gewünscht ist, ist die WebView
aus dem Bild und wieder rein animieren. Danke!
gleiche Frage hier. @Robert hast du eine Lösung dafür gefunden? – jayellos
@jayellos es gibt zwei mögliche Fixes für dieses Problem. Ich füge unten eine Antwort hinzu, aber die Moral der Geschichte ist, dass die Aktivierung der Hardwarebeschleunigung auf dem 'WebView' helfen kann (es ist auf einigen Plattformen nicht standardmäßig aktiviert) oder [this library] (https: // github. com/jfeinstein10/SlidingMenu) (unsere aktuelle Lösung). –