2010-07-07 6 views
5

Piszę żywo tapety i korzystać z funkcji:Android tapety na żywo onOffsetsChanged xPixelOffset nie wydaje się, aby powrócić prawdziwy pikseli przesunięcie

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

aby zobaczyć, kiedy przejeżdża w poprzek zastosowania do innego ekranu, a ja użył xPixelOffset, aby zobaczyć, jak daleko przesuwał się ekran w pikselach, jednak nie zwraca liczby pikseli, których mógłbym się spodziewać.

Dla każdego z 5 ekranów pulpitu pokazuje on przesunięcie w pikselach równe 0, -80, -160, -240, -320, jednak oczekiwałbym, że będzie on zawsze przesunięty o szerokość ekranu (240 piks niż 80px)

Am I czegoś brakuje?

Odpowiedz

7

Zauważysz, że podczas przewijania, na pierwszym planie ekranu domowego (ikony, widżety itp) przesuwa się w lewo lub w prawo, przez całą szerokość ekranu, ale obraz tła (lub tapety na żywo) Tylko porusza o ułamek tej szerokości. Oczywistym rezultatem jest efekt przewijania paralaksy. Innymi słowy, od końca do końca 5 ekranów ma około 1200 pikseli (5 szerokości ekranu), ale maksymalna szerokość tapety na tym samym ekranie wynosi 480 pikseli (2 x szerokość ekranu) , ponieważ plecy nie przewijają tak bardzo jak przód.

Przesunięcia, a następnie, nie powinien być stosowany jako miara jak daleko planie wyświetlacza został przeniesiony, ale jak dotąd tła został przeniesiony.

Więc nadal otrzymuję informację, że trzeba od parametru przesunięć. Po prostu twoja interpretacja tej informacji musi się nieco zmienić.

+0

Tak, ale jak piszę żywo tapety muszę dokonać tego efektu Paralax wystąpić, ponieważ domyślnie tapeta jest statyczny. Chcę więc wiedzieć, ile "ekranów" użytkownik przeniósł i wiedzieć, jaka będzie maksymalna liczba ekranów, ponieważ może się to zmienić w zależności od ekranu głównego lub aplikacji korzystającej z tapety na żywo. – stealthcopter

+1

Przydatne uwaga, float xoffset zwraca przesunięcie w jednostkach normalizować (0,0 - 1,0), tak aby można było wiedzieć, kiedy maksymalna została osiągnięta. – stealthcopter

2

Po prostu, twoje płótno/bitmapy, które narysujesz, będą miały rozmiar całej wirtualnej tapety (która powinna mieć wymiary screenWidth * 2, screenHeight), a następnie narysuj ją na płaszczyźnie surfaceHolder, używając xPixelOffset jako współrzędnej x. To jest prosta droga.

Oczywiście nie ma prawa, że ​​wirtualny tapety potrzebuje tych wymiarów. Jeśli chcesz, może przewijać z prędkością ikon. Wtedy będziesz chciał użyć wartości xOffset, aby obliczyć własne przesunięcie pikseli.

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

backgroundWidth powinny pszczoły ScreenHeight * 2

Powiązane problemy