在android中绘制动画圈

在android中绘制动画圈,android,Android,我试图创建一个圆形动画,但屏幕不会自动刷新,它会在不同的位置绘制许多圆形,而不是绘制运动。我希望以这种方式使用它,而不是使用invalidate()方法,因为我希望将它用于实时应用程序 代码如下: public class activity_layout_animation extends SurfaceView implements Runnable { Thread thread; boolean CanDraw = false; Paint red_fill;

我试图创建一个圆形动画,但屏幕不会自动刷新,它会在不同的位置绘制许多圆形,而不是绘制运动。我希望以这种方式使用它,而不是使用
invalidate()
方法,因为我希望将它用于实时应用程序

代码如下:

public class activity_layout_animation extends SurfaceView implements Runnable {

    Thread thread;
    boolean CanDraw = false;

    Paint red_fill;

    int circle_x, circle_y;

    Canvas canvas;
    SurfaceHolder surfaceHolder;


    public activity_layout_animation(Context context){
        super(context);
        surfaceHolder = getHolder();
        circle_x= 130;
        circle_y=130;
    }
    @Override
    public void run(){

        preparePaint();

        while(CanDraw){

            if ( !surfaceHolder.getSurface().isValid()){
                continue;
            }

            canvas = surfaceHolder.lockCanvas();
            motionCircle(10);
            canvas.drawCircle(circle_x,circle_y,50, red_fill);
            surfaceHolder.unlockCanvasAndPost(canvas);

        }
    }

    public void pause(){

        CanDraw = false;

        while(true) {
            try {
                thread.join();
                break;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        thread = null;
    }

    public void resume(){
        CanDraw = true;
        thread = new Thread(this);
        thread.start();
    }

    private void preparePaint(){
        red_fill = new Paint();
        red_fill.setColor(Color.RED);
        red_fill.setStyle(Paint.Style.FILL);
    }

    private void motionCircle (int speed){

        if ( (circle_y == 130) && ( circle_x < 650) ){
            circle_x = circle_x + speed;
        }
        if ( (circle_y < 650) && ( circle_x ==650) ){
            circle_y = circle_y + speed;
        }
        if ( (circle_y == 650) && ( circle_x > 130) ){
            circle_x = circle_x - speed;
        }
        if ( (circle_y > 130) && ( circle_x== 130) ){
            circle_y = circle_y - speed;
        }
    }


}
公共类活动\u布局\u动画扩展SurfaceView实现可运行{
螺纹;
布尔CanDraw=false;
涂上红漆;
整数圆x,圆y;
帆布;
浮雕浮雕;
公共活动\布局\动画(上下文){
超级(上下文);
surfaceHolder=getHolder();
圆_x=130;
圆圈y=130;
}
@凌驾
公开募捐{
preparePaint();
while(CanDraw){
如果(!surfaceHolder.getSurface().isValid()){
继续;
}
canvas=surfaceHolder.lockCanvas();
运动圆(10);
画布。画圈(画圈x,画圈y,50,红色填充);
surfaceHolder.unlockCanvasAndPost(画布);
}
}
公共空间暂停(){
坎德劳=假;
while(true){
试一试{
thread.join();
打破
}捕捉(中断异常e){
e、 printStackTrace();
}
}
线程=null;
}
公众简历(){
坎德劳=真;
线程=新线程(此);
thread.start();
}
私有无效预绘制(){
红色填充=新油漆();
红色填充。设置颜色(颜色。红色);
红色填充。设置样式(油漆。样式。填充);
}
专用无效运动圆(整数速度){
如果((圆y==130)和&(圆x<650)){
圆圈x=圆圈x+速度;
}
如果((圆y<650)和&(圆x==650)){
圆周y=圆周y+速度;
}
如果((圆y==650)和&(圆x>130)){
circle_x=circle_x-速度;
}
如果((圆y>130)和&(圆x==130)){
圆周y=圆周y-速度;
}
}
}

谢谢大家!

如何
postInvalidate()
-您可以从后台线程调用它。您还可以调用
canvas.drawColor(backgroundColor)
从以前的图形中删除整个画布