Las imágenes se pixelan cuando se toca la pantalla

Estoy construyendo un pequeño juego en HTML / JS en Android. Me encuentro con un problema en mi HTC Desire (Android 2.2). Cuando toco la pantalla, todas las imágenes parecen pixeladas y no se pixelan cuando el toque termina.

Aquí hay una captura de pantalla:

Introduzca aquí la descripción de la imagen

A la derecha es cuando se toca la pantalla. ¿Puede alguien ayudarme a averiguar qué está causando este problema?

Notas:

  • No hay problemas durante las animaciones si no se toca la pantalla
  • No tengo este problema en mi LG 540 Android 2.1
  • Parece que las imágenes obtienen un número restringido de colores cuando se está tocando
  • Estoy usando Phonegap

3 Solutions collect form web for “Las imágenes se pixelan cuando se toca la pantalla”

Por lo que puedo decir, ese comportamiento "pixelado" es una optimización hecha para el desplazamiento (en Froyo y arriba). Si la representación se simplifica, hace que las cosas como la animación de desplazamiento fling requieran menos procesamiento.

Si necesita la funcionalidad completa del navegador, no estoy seguro de que pueda ayudarlo mucho.

Dado que has dicho que estás haciendo un juego, sin embargo, podría tener una solución. Estoy esperando que su juego no necesita desplazarse (una pantalla completa), por lo que la optimización de desplazamiento no es necesario.

He hecho una prueba sencilla con un WebView. En el grifo, como usted mencionó, la prestación se simplifica, y las cosas se ven un poco fuera. Entonces, una vez que se hace clic en algo (el WebView sabe que no se está realizando el desplazamiento), las cosas vuelven a la normalidad.

Modifiqué mi diseño sustituyendo un WebView por FrameLayout. El FrameLayout contiene el WebView y un botón invisible (en la parte superior). Este botón agarra todos los eventos táctiles. Luego, selecciono selectivamente qué tipos de eventos WebView necesito y los paso a la WebView. Si un toque hacia abajo y retoque ocurren cerca juntos, sin movimiento en betweeen, no hay razón para desplazarse, por lo que no he visto nada de ese comportamiento "pixelado".

Debido a que fue más sencillo para este ejemplo, he elegido detectar el evento "MotionEvent.ACTION_UP", y cuando está completo, mando un abajo primero, para que simule un clic real. Sin duda podría activar en ACTION_DOWN, pero obtendrá más de uno de esos si el usuario pasa o algo así, y quería mantener la lógica aquí simple. Puede personalizarlo como mejor le parezca, y probablemente con suficiente trabajo, incluso habilitar el desplazamiento en algunos casos. Espero que el código a continuación sea suficiente para transmitir lo que creo funciona.

WebView wv = new WebView(this); View dummyView = new Button(this); dummyView.setBackgroundColor(0x00000000); dummyView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { MotionEvent down = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, event.getX(), event.getY(), 0); wv.onTouchEvent(down); wv.onTouchEvent(event); } return false; } }); FrameLayout fl = new FrameLayout(this); fl.addView(wv); fl.addView(dummyView); topLayout.addView(fl); 

EDIT: Si no desea editar fuente PhoneGap, puede ser capaz de hacer algo como lo siguiente para cambiar el diseño PhoneGap … No se ha probado, pero parece que debería funcionar:

 @Override public void onCreate(Bundle arg0) { super.onCreate(arg0); super.loadUrl("file:///android_asset/www/index.html"); // Get the "root" view from PhoneGap LinearLayout droidGapRoot = super.root; // Create a new "root" that we can use. final LinearLayout newRoot = new LinearLayout(this); for (int i = 0; i < droidGapRoot.getChildCount(); i++) { // Move all views from phoneGap's LinearLayout to ours. View moveMe = droidGapRoot.getChildAt(i); droidGapRoot.removeView(moveMe); newRoot.addView(moveMe); } // Create an invisible button to overlay all other views, and pass // clicks through. View dummyView = new Button(this); dummyView.setBackgroundColor(0x00000000); dummyView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // Only pass "UP" events to the specific view we care about, but // be sure to simulate a valid "DOWN" press first, so that the // click makes sense. if (event.getAction() == MotionEvent.ACTION_UP) { MotionEvent down = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, event.getX(), event.getY(), 0); newRoot.onTouchEvent(down); newRoot.onTouchEvent(event); } return false; } }); // Layer the views properly FrameLayout frameLayout = new FrameLayout(this); frameLayout.addView(newRoot); frameLayout.addView(dummyView); // Add our new customized layout back to the PhoneGap "root" view. droidGapRoot.addView(frameLayout); } 

Estoy corriendo en este mismo problema. Una cosa que puedes intentar es añadir android: hardwareAccelerated = "true" al manifiesto de tu aplicación en la etiqueta. Esto detuvo el problema para mí, sin embargo ahora toda la aplicación parece un poco más pixelada en general en mi dispositivo, por lo que esto podría no ser la mejor solución.

Compruebe dos veces si sus imágenes tienen el mismo tamaño en CSS en píxeles que los propios archivos. Parece estar de alguna manera relacionado. Si tomo una imagen grande y la vuelvo a escalar con un CSS generado por el dispositivo, veo el problema. De lo contrario, no se presenta o no es visible. No estoy seguro de si el problema original se ha solucionado en los últimos Androids, pero todavía apoyo 2.3, así que espero que ayude.

  • PhoneGap Geolocation obtener siempre un tiempo de espera en dispositivos especiales
  • ¿Por qué PhoneGap es más lento que el navegador?
  • PhoneGap Build Notificación de empuje (Android)
  • SDK de Android no encontrado. Asegúrese de que está instalado. Si no está en la ubicación predeterminada, establezca la variable de entorno ANDROID_HOME
  • Cordova / phonegap no hace el directorio de android
  • Android: Usar html5 para determinar la geolocalización en webview con javascript api
  • Bluetooth LAN entre teléfonos inteligentes? ¿Conexiones telefónicas de uno a muchos?
  • ¿Por qué una aplicación de teléfono muy simple utiliza plan de datos móvil?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.