2016-07-13 22 views
1

Ich erstelle eine Live Wallpaper App. Ich möchte, dass in dieser App nach einem bestimmten Intervall ein Filmobjekt seinen Rahmen auf surfaceHoldercanvas zeichnet.Wie kann ich TimerTask verwenden, um kontinuierlich zu laufen?

Mein Code ist

public void startTimer() { 
    timer = new Timer(); 
    initializeTimerTask(); 

} 

private void initializeTimerTask() { 
    timerTask = new TimerTask() {@ 
    Override 
    public void run() { 
     Canvas canvas = holder.lockCanvas(); 
     canvas.save(); 
     // Adjust size and position so that 
     // the image looks good on your screen 
     canvas.scale(1f, 1f); 
     movie.draw(canvas, -500, 0); 
     canvas.restore(); 
     holder.unlockCanvasAndPost(canvas); 
     movie.setTime((int)(System.currentTimeMillis() % movie.duration())); 

    } 
    }; 
    timer.schedule(timerTask, 33); 
} 

Aber wenn ich diese App nur ein Rahmen ausgeführt wird, auf der Oberfläche gezeigt, und es wird nicht im Laufe der Zeit ändern.

Was ist der Fehler in meinem Code? Wie kann ich sehen, dass sich die Oberfläche im Laufe der Zeit verändert?

Antwort

0

Ihre Timer Aufgabe nur geplant, wenn Sie es in Ihrer Aufgabe wieder

private void initializeTimerTask() { 
    timerTask = new TimerTask() {@ 
    Override 
    public void run() { 
     Canvas canvas = holder.lockCanvas(); 
     canvas.save(); 
     // Adjust size and position so that 
     // the image looks good on your screen 
     canvas.scale(1f, 1f); 
     movie.draw(canvas, -500, 0); 
     canvas.restore(); 
     holder.unlockCanvasAndPost(canvas); 
     movie.setTime((int)(System.currentTimeMillis() % movie.duration())); 
     timer.schedule(timerTask, 33);  
    } 
    }; 
    timer.schedule(timerTask, 33); 
} 

neu planen müssen und Sie müssen Ihre timer als final machen, um zu arbeiten