2010-07-07 10 views
5

Estoy escribiendo un fondo de pantalla en vivo y utilizo la función:de pantalla en vivo Android onOffsetsChanged xPixelOffset no parece devolver el pixel verdadero compensado

public void onOffsetsChanged(float xOffset, float yOffset, 
      float xOffsetStep, float yOffsetStep, int xPixelOffset, 
      int yPixelOffset) 

para ver cuando los usos golpes al otro lado a otra pantalla, y yo usé xPixelOffset para ver cuánto se movió la pantalla en píxeles, sin embargo, no devuelve el número de píxeles que esperaría.

Para cada una de las 5 pantallas del escritorio, muestra el desplazamiento del píxel como 0, -80, -160, -240, -320; sin embargo, esperaría que se compensara con el ancho de la pantalla cada vez (240px en vez de 80px)

¿Echo de menos algo?

Respuesta

7

Notará que cuando se desplaza, el primer plano de la pantalla de inicio (íconos, widgets, etc.) se mueve hacia la izquierda o derecha por el ancho de la pantalla completa, pero la imagen de fondo solo cambia por una fracción de ese ancho. El resultado obvio es un efecto de desplazamiento de paralaje. Para ponerlo de otra manera, de extremo a extremo sus 5 pantallas suman algo así como 1200px (5 x ancho de pantalla), pero el ancho máximo de un fondo de pantalla es algo así como 480px (ancho de pantalla 2 x) , porque la parte posterior no se desplaza tanto como la parte delantera.

Los desplazamientos, entonces, no se deben usar como una medida de cuánto se ha movido el primer plano de la pantalla, sino hasta qué punto se ha movido el fondo.

Por lo tanto, sigue obteniendo la información que necesita del parámetro de compensaciones. Es solo que tu interpretación de esa información tiene que cambiar un poco.

+0

Sí, pero ya que estoy escribiendo un fondo de pantalla en vivo que necesito para hacer este efecto paralaje ocurrir, ya que por defecto es el fondo de pantalla estática. Así que quiero saber cuántas "pantallas" ha movido el usuario y saber cuál será el número máximo de pantallas, ya que esto puede cambiar dependiendo de la pantalla de inicio o de la aplicación usando el fondo de pantalla en vivo. – stealthcopter

+1

Nota útil, float xOffset devuelve el desplazamiento en unidades de normalización (0.0 - 1.0) para que pueda saber cuándo se alcanza el máximo. – stealthcopter

2

Simplemente haga que su lienzo/mapa de bits que dibuje sea del tamaño de todo el fondo de pantalla virtual (que debe tener dimensiones de ancho de pantalla * 2, altura de pantalla), y luego dibújelo al lienzo de superficie utilizando el xPixelOffset como la coordenada x. Esa es la manera fácil.

Por supuesto, no es una ley que su fondo de pantalla virtual necesite esas dimensiones. Podría desplazarse a la velocidad de los iconos si lo desea. Ahí es cuando deseará usar el valor de xOffset para calcular su propia compensación de píxeles.

0
  if(xPixelOffset != 0){ 
       myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth); 
      } 

backgroundWidth debe abeja ScreenHeight * 2

Cuestiones relacionadas