OnOffsetsChanged no ha sido llamado por Touchwiz

Nota: puesto que es una pregunta específica a Samsung, yo también lo pedí en su tablero del revelador .

Actualmente estoy implementando un Live Wallpaper en Android y estoy escuchando el método onOffsetsChanged () en mi motor de fondo de pantalla para cambiar el fondo de pantalla cuando el usuario pasa por sus homescreens. Esto funciona muy bien en mi Galaxy Tab privada con una ROM personalizada CM9. En mi dispositivo de la empresa, una población de Galaxy S3, no funciona. De alguna manera Touchwiz no invoca onOffsetsChanged cuando se cambia la pantalla de inicio.

La búsqueda del tema no produjo resultados significativos además de la descripción de esta aplicación , donde el dev declara: "Desplazamiento fijo en el último lanzador TouchWiz en el que no se llama a onOffsetsChanged ()". Ahora me gustaría sólo ponerse en contacto con el dev, pero por desgracia también es una aplicación de Samsung.

¿Alguien sabe una solución para obtener las compensaciones actuales sin depender de onOffsetsChanged? ¿Alguien se ha topado con este problema en su propio fondo de pantalla? ¿Alguien sabe si esto es intencional o si puedo asumir que las futuras versiones de Touchwiz harán uso del método de nuevo?

Algunos desarrolladores están utilizando eventos táctiles en lugar del sistema onOffsetsChanged () para trabajar con TouchWiz. Creo que, actualmente, la única manera mejor es usar el sistema de eventos híbridos, que funcionará de tal manera:

1) Asuma siempre que el mensaje de onOffsetsChanged () no se envía correctamente (hace que la propiedad booleana se defina como falsa).
2) Esto significa que debe implementar el método onTouch () para hacer la imitación adecuada de onOffsetsChanged (). Escuche onTouch () sólo si la propiedad booleana sigue siendo falsa.
3) Cuando se llama onOffsetsChanged (), compruebe el parámetro xOffset. Si no es 0.0f ni 0.5f, cambie la propiedad booleana a true y escuche sólo onOffsetsChanged ().

El código será algo como:

public class myEngine extends WallpaperService.Engine { private boolean offsetChangedWorking = false; public void onOffsetsChanged (float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) { if (offsetChangedWorking == false && xOffset != 0.0f && xOffset != 0.5f) { offsetChangedWorking = true; } if (offsetChangedWorking == true) { // Do sth here } } public void onTouchEvent(MotionEvent paramMotionEvent) { if (offsetChangedWorking == false) { // Do sth else here } } } 

Este código es sólo una ilustración . Tenga en cuenta que comparar flotantes con == no es correcto, pero podría funcionar en este caso.

Además, parece que Samsung Parallax LWPs están trabajando de la misma manera. Si tiene un dispositivo con TouchWiz y algún otro lanzador que funcione correctamente (que envía normalmente onOffsetsChanged), puede probarlo por sí mismo:

1) Establecer paralaje LWP en TouchWiz primero (importante!) Y ver que depende sólo onTouchEvent ()
2) Cambiar el lanzador al otro. Vea que LWP ahora depende de onOffsetsChanged ()
3) Cambie el lanzador a TouchWiz otra vez y vea que el deslizar no funciona para este LWP más.

Así que lo que recomiendo agregar es que en cada evento onResume () cambie el desplazamiento booleano offsetChangedWorking a false de nuevo. Esto debería evitar estos errores con los cambios en el lanzador.

  • Cómo hacer Animated Android Live Wallpaper?
  • ¿Se puede configurar el fondo de pantalla como fondo?
  • ¿Cómo paso a la vista previa de Live Wallpaper desde la aplicación?
  • Live Wallpaper con motor de juegos o no?
  • Cómo cargar imágenes como fondo en LibGDx?
  • Android 3D Live Wallpaper - ¿qué motor utilizar?
  • IllegalArgumentException en unlockCanvasAndPost (fondo de pantalla en vivo Android)
  • Vídeo de Android como fondo de pantalla en vivo
  • Establecer Live Wallpaper de forma programática en Dispositivo enraizado Android
  • Cómo configurar el icono de Android Live Wallpaper (también conocido como "thumbnail")
  • ¿Cómo utilizar el feed de cámara en vivo como un fondo de actividad?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.