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.
- Android live wallpaper onOffsetsChanged xPixelOffset no parece devolver el desplazamiento real de píxeles
- Cómo acelerar la carga / compilación de shader en Android
- Android: ¿Cómo iniciar la actividad desde el menú de preferencias?
- ¿Mejor velocidad de cuadro que dibuja los mapas de bits en una lona?
- Animación de diapositivas de Android en vivo
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?
- Cómo implementar doble toque para Android wallpapers vivos?
- Java.io.IOException: setDataSource failed .: status = 0x80000000
- Problema con la orientación de la pantalla de Android
- Choque del selector de Android LiveWallpaper
- Android.media.audiofx.Visualizer lanzando excepción cada otra vez
- ¿Cómo puedo detectar si mi fondo de pantalla en vivo se está ejecutando en la actividad de vista previa / "Establecer papel tapiz" o en la pantalla de inicio
- Cómo crear una actividad de configuración para Android Live Wallpaper
- ¿Dónde debo inicializar los recursos para un Android Live Wallpaper
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 agregar eventos para un calendario predeterminado de android4.0?
- Latch (usado para esperar la respuesta asíncrona) congela el WebView (y la interfaz de usuario)