如何在每秒后增加圆的半径

时间:2015-09-02 06:25:46

标签: android

如何在每秒之后增加圆圈的半径?我在stackoverflow中搜索了此问题,并将Thread.sleep(1000);添加到我的代码中,如下所示:

 @Override

    public void onDraw(Canvas canvas) {

        paint.setColor(Color.BLUE);
        paint.setAntiAlias(true);
        for(int r=1;r<=70;r++)
            try {
                canvas.drawCircle(getWidth() / 2, getHeight() / 2, r, paint);
            Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } 

但我认为这样做是错误的。因为当我在我的设备中运行时,它无法正常工作。

4 个答案:

答案 0 :(得分:1)

请查找自定义视图类以频繁更新视图..

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;


public class CustomView extends View {
    Paint paint;
    int radius = 0;

    public CustomView(Context context) {
        super(context);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLUE);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(5f);
    }

    public void updateView(int radius) {
        this.radius = radius;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, paint);
    }
}

每当你想要开始动画时调用这个方法:

public void startViewAnimation() {
        final Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                if (i < 70) { // Please change '70' according to how long you want to go
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            int baseRadius=20; // base radius is basic radius of circle from which to start animation
                            customView.updateView(i+baseRadius);
                            i++;
                        }
                    });
                } else {
                    i = 0;
                }
            }
        }, 0, 500); // change '500' to milliseconds for how frequent you want to update radius
    }

在这里如何称呼它:

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rootView);
        customView = new CustomView(this);
        relativeLayout.addView(customView);
        startViewAnimation();

这里定义了变量:

private int i = 1;
CustomView customView;

谢谢.. !!

答案 1 :(得分:0)

你可以用timer来做。它们可能不是它们之间的一秒钟(因为它可以节省电力),但它可能适用于您的预期目的。

我不认为暂停并在onDraw方法中进行多次绘制调用是一个好主意。由于你正在暂停GUI线程,它可能不会喜欢它(如果有人做某事,它甚至可能会唤醒)。

答案 2 :(得分:0)

我认为你可以在这里使用它,并根据需要给出时间和间隔

db.let('firstSelect', function(s){
     s.select().from('room').where({name:'room test 1'});
}).let('traverse', function(s){
     s.traverse('out()').from('$firstSelect').while('$depth<=1');
}).let('finalSelect', function(s){
     s.select().from('$traverse').where({'@class':'Participant'});
}).commit()
.return('$finalSelect')
.all()
.then(function(participants){
    console.log(participants);
})

答案 3 :(得分:0)

查看此答案here 它显示了Handler类的用法,它创造了这样的行为