如何在每秒之后增加圆圈的半径?我在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();
}
}
但我认为这样做是错误的。因为当我在我的设备中运行时,它无法正常工作。
答案 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类的用法,它创造了这样的行为