2012-10-20 10 views
5

Tworzę na żywo tapety z przewijaniem paralaksy. Przeczytałem artykuł: Parallax effect scrolling of live wallpaper background. Ale kiedy zmieniam desktopy, tło porusza się w niewłaściwy sposób (jeśli zmieniłem pulpit z lewej na prawą, obraz przesuwa się od prawej do lewej). Jak zmienić kierunek? Fragment kodu:Tworzenie Android tapety na żywo z przewijaniem paralaksy

public void Init(Bitmap bitmap){ 
    bg = new BitmapFactory().decodeResource(context.getResources(), R.drawable.thunder); 
    bg = Bitmap.createScaledBitmap(bg, (int)(width*1.4), height, true); 
} 

float dx = 0.0f; 
@Override 
    public void onOffsetsChanged(float xOffset, float yOffset, 
      float xStep, float yStep, int xPixels, int yPixels) { 
     dx = (width - bg.getWidth()) * (1 - xOffset); 
    } 

private void doDraw(Canvas canvas) { 
    canvas.save(); 
    canvas.translate(dx, 0); 
    canvas.drawBitmap(bg, 0, 0, null); 

    canvas.restore(); 
} 

Odpowiedz

1

Algorytm tutaj musi być zmieniony:

dx = (width - bg.getWidth()) * (1 - xOffset); 

należy zmienić na coś podobnego do:

dx = (width) * (xOffset); 

Alternatywą byłoby uzyskać dostęp do obszaru roboczego. Metoda drawBitmap() bezpośrednio przez coś takiego:

canvas.drawBitmap(bg, xPixels, 0, null); 
3

Wiem, że to stary problem, ale ponieważ jest to wysoki wynik w Google, wszystko, co musisz zrobić, to odwrócić znak na swoim tłumaczu.

canvas.translate(-dx, 0); 

to skutecznie odwrócić kierunek zwojów tła po wymazy użytkownika. Mam nadzieję, że to pomoże innym.

0

dx = (szerokość - BG .getWidth()) * xoffset;

gdzie:

szerokość - szerokość płótno;
bg - bitmapy

+0

To działa, ale jak mogę spowodować przewijanie powodować płótno dotrzeć do brzegów tle, tylko na pierwszych i ostatnich stron domowych? –

Powiązane problemy