2012-10-20 9 views
5

Ich erstelle eine Live-Wallpaper mit Parallax Scrolling. Ich habe den Artikel gelesen: Parallax effect scrolling of live wallpaper background. Aber wenn ich Desktops ändere, bewegt sich der Hintergrund falsch (Wenn ich den Desktop von links nach rechts ändere, bewegt sich das Bild von rechts nach links). Wie ändere ich die Richtung? Code-Snippet:Making Android Live-Wallpaper mit Parallax Scrolling

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(); 
} 

Antwort

1

Der Algorithmus hier geändert werden muss:

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

Sollte ähnlich wie etwas geändert werden:

dx = (width) * (xOffset); 

Eine Alternative wäre, die Leinwand zuzugreifen. drawBitmap() -Methode direkt durch etwas wie dieses:

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

Ich weiß, dass dies ein altes Problem ist, aber da dies ein hohes Ergebnis bei Google ist, müssen Sie nur das Zeichen auf Ihrem Übersetzer umdrehen.

canvas.translate(-dx, 0); 

Dies wird effektiv die Richtung umkehren, die der Hintergrund scrollt, wenn der Benutzer wischt. Hoffe das hilft anderen.

0

dx = (Breite - bg .getWidth()) * xOffset;

wo:

Breite - Leinwand Breite;
bg - die Ränder des Hintergrunds erreichen, nur auf den ersten und letzten Startseite Bitmap

+0

Dies funktioniert, aber wie verursache ich das Scrollen der Leinwand verursachen? –

Verwandte Themen