динамический текст в живых обоях - PullRequest
4 голосов
/ 28 февраля 2012

Добро пожаловать.У меня проблема.Я хочу делать динамические обои, чтобы каждые несколько секунд менять текст.Программа работает довольно хорошо, потому что текст меняется, но меняется так, что предыдущий текст все еще виден, и через несколько секунд у меня много текста.Я смотрел везде, но я новичок и не знаю, как решить эту проблему.Есть код:

private class MyWallpaperEngine extends Engine {  
    private final Handler handler = new Handler();  
    private final Runnable drawRunner = new Runnable() {  
        @Override  
        public void run() {
            draw();  
        }
    };  

    private Paint paint = new Paint();  
    private int width;
    int height;  
    private boolean visible = true;

    public MyWallpaperEngine() {  
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        handler.post(drawRunner);  
    }

    @Override  
    public void onVisibilityChanged(boolean visible) {  
        this.visible = visible;  
        if (visible) {  
            handler.post(drawRunner);  
        } else {  
            handler.removeCallbacks(drawRunner);  
        }
    }

    @Override  
    public void onSurfaceDestroyed(SurfaceHolder holder) {  
        super.onSurfaceDestroyed(holder);  
        this.visible = false;  
        handler.removeCallbacks(drawRunner);  
    }  

    @Override  
    public void onSurfaceChanged(SurfaceHolder holder, int format,  
            int width, int height) {  
        this.width = width;  
        this.height = height;  
        super.onSurfaceChanged(holder, format, width, height);  
    }  

    private void draw() {  
        SurfaceHolder holder = getSurfaceHolder();  
        Canvas canvas = null;
        try {  
            canvas = holder.lockCanvas();  
            if (canvas != null)
                drawAnimation(canvas);

        } finally {
            if (canvas != null)
                holder.unlockCanvasAndPost(canvas);

        }
        if (visible) {
            handler.postDelayed(drawRunner, 4000);  
        }
    }
    private void drawAnimation(Canvas c){
        Random r = new Random();
        int i1=r.nextInt(200-50) + 50;
        String text = Integer.toString(i1);
        c.drawText(text, i1, i1, paint);
    }
}  

1 Ответ

2 голосов
/ 28 февраля 2012

Вы должны очистить холст перед рисованием, используя что-то вроде

c.drawColor(int color);

или нарисовать что-нибудь еще, что покрывает всю область, в противном случае вы просто нарисуете то, что уже было на холсте.

...