Próbuję zaimplementować nawigację po slajdzie (a la Facebook, ścieżka lub aplikacje Google+ na Androida). Kompletne źródło do odtworzenia tego błędu can be found here.Błąd przeglądarki WebView z migotaniem podczas animowania widoku na urządzeniu
Podczas animowania ekranu WebView
na ekranie migotanie pojawia się tak, jakby urządzenie zaczęło odgryźć mój telefon WebView
tuż przed zepchnięciem go z ekranu.
Artefakt nie występuje na emulatorze! Animacja przebiega płynnie.
Co ciekawe, to migotanie wydaje się występować tylko wtedy, gdy widok jest animowana jest WebView
! Oto ten sam projekt, w którym TextView jest głównym widokiem treści.
Layout dla aktywności zobaczyć web:
<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>
A dla aktywności widoku tekstu:
<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>
kodu zwanego przesuwać menu nawigacyjnego w:
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);
}
I przesuń go z powrotem na zewnątrz:
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);
}
wysłał kod do BitBucket jako publiczne repo więc można spróbować tego projektu dokładnie jak ja.
Każda pomoc lub pomysł na temat tego, dlaczego tak się dzieje lub jak to naprawić, byłby bardzo doceniony! Pożądane jest płynne animowanie obrazu WebView
z powrotem. Dzięki!
ten sam problem tutaj. @Robert, czy znalazłeś rozwiązanie? – jayellos
@jayellos Istnieją dwa potencjalne poprawki tego problemu. Dodam odpowiedź poniżej, ale morał tej historii polega na tym, że włączenie przyspieszenia sprzętowego w 'WebView' może pomóc (domyślnie nie jest włączone na niektórych platformach) lub przy użyciu [tej biblioteki] (https: // github. com/jfeinstein10/SlidingMenu) (nasze obecne rozwiązanie). –