Android Canvas animation

Joerg66

Erfahrenes Mitglied
Hallo,
ich möchte mit dem Finger auf den Bildschirm tippen und eine Reihe Punkte beginnend vom Tippunkt nach rechts-unten machen. Dieser Teil funktioniert.
Nun möchte ich die Reihe aber nicht mit einem Frame auf den Schirm malen, sondern animiert wachsen lassen, also Punkt für Punkt.
Mein Problem ist es die Zeitverzögerung mit einem eigenen Thread zu lösen.
Allerdings bin ich zur Zeit noch am Rätseln wie ich das anstelle, denn ein invalidate() bzw. posInvalidate() funktioniert an keiner Stelle.
Außerdem rätsel ich in dem Codebeispiel daran, warum die Zeile System.out.println
keine aufsteigende Zahl schreibt, sondern alles durcheinander und das pro Fingertipp 2x ????
Kann mir bei meinem Problem wer helfen??????
Code:
package de.milestoneblog.example.androiddrawexample.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class DrawView extends View implements OnTouchListener
{
  Bitmap bitmap;
  Canvas bitmapCanvas;
  boolean isInitialized;
    Paint paint = new Paint();

    public DrawView(Context context)
    {
        super(context);
        setFocusable(true);
        setFocusableInTouchMode(true);

        this.setOnTouchListener(this);

        paint.setColor(Color.WHITE);
        paint.setAntiAlias(true);
        paint.setStyle(Style.FILL_AND_STROKE);
        isInitialized = false;
    }

    private void init()
    {
        bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);
        bitmapCanvas = new Canvas();
        bitmapCanvas.setBitmap(bitmap);
        bitmapCanvas.drawColor(Color.BLACK);
        isInitialized = true;

    }
   
    @Override
    public void onDraw(Canvas canvas)
    {
        if (!isInitialized)
            init();
       
        canvas.drawBitmap(bitmap, 0, 0, paint);
    }

    protected void TimerThread(final int nr) {
        Thread timer = new Thread() {
            public void run() {
                System.out.println("Timer: " + nr);
                }
        };
        timer.start();
    }
   
    public boolean onTouch(View view, MotionEvent event)
    {
        float X = event.getX();
        float Y = event.getY();
        TimerThread(1);
        for (int i=0;i<10;i++){
            //TimerThread(i);
            bitmapCanvas.drawCircle(X, Y, 1+i, paint);
            X+=10;
            Y+=15;
        }
//        invalidate();
        return true;
    }
}
 

Neue Beiträge

Zurück