Estoy intentando implementar la navegación deslizable (a la Facebook, Ruta de acceso o aplicaciones de Google+ para Android). La fuente completa para reproducir este error can be found here.Android WebView error de parpadeo al animar la vista en el dispositivo
Al animar WebView
fuera de la pantalla, sin embargo, en un dispositivo, se produce un parpadeo, como si el dispositivo estuviera mordiendo mi WebView
justo antes de sacarlo de la pantalla.
El artefacto no se produce en el emulador! La animación avanza sin problemas.
Curiosamente, este parpadeo parece ocurrir sólo cuando la vista está animada es una WebView
! Aquí está el mismo proyecto que usa TextView como la vista de contenido principal.
Disposición para la actividad vista 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>
y para la actividad de visualización de texto:
<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>
Código llamada para deslizar el menú de navegación en:
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);
}
Y para colocarla de nuevo hacia fuera:
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);
}
he subido el código para BitBucket como un acuerdo de recompra pública para que pueda tratar este proyecto exactamente como yo.
¡Cualquier ayuda o idea acerca de por qué sucede esto o cómo solucionarlo sería muy apreciada! Lo que se desea es animar suavemente el WebView
fuera de la imagen y volver a entrar. ¡Gracias!
mismo problema aquí. @Robert encontraste una solución para esto? – jayellos
@jayellos hay dos posibles soluciones a este problema. Agregaré una respuesta a continuación, pero la moraleja de la historia es que habilitar la aceleración de hardware en 'WebView' puede ayudar (no está activado por defecto en algunas plataformas), o usar [esta biblioteca] (https: // github. com/jfeinstein10/SlidingMenu) (nuestra solución actual). –