Android 自定义控件 onDraw()方法里调用的canvas.drawArc()是画圆或者圆环的,有一点疑问...这个方法
canvas.drawArc(rectF,0,(currentTimeMillis-startTimeMillis)*360/10000,false,paint);第一个...
canvas.drawArc(rectF, 0, (currentTimeMillis - startTimeMillis ) * 360 / 10000 , false, paint);
第一个参数是矩形,
第二个参数是开始角度;
第三个参数是结束角度.
currentTimeMillis 得到系统的当前时间,
startTimeMillis 方法开始执行的时间
后面就不说了,疑问不在这里,
现在想按照规定的时间来画圆环,
看代码中的第三个参数不太理解
(currentTimeMillis - startTimeMillis ) * 360 / 8000 这里实现了 8秒画出一个圆环,
有人能解释一下是怎么算出来的吗.......为什么8秒,如果这个参数是角度的话,
那么,按照这个参数的算法也想不通呀.....哪位大神解答一下吗??
public class MyView extends View {
private long startTimeMillis;
public MyView2(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
startTimeMillis = System.currentTimeMillis();
}
public MyView2(Context context, AttributeSet attrs) {
super(context, attrs);
startTimeMillis = System.currentTimeMillis();
}
public MyView2(Context context) {
super(context);
startTimeMillis = System.currentTimeMillis();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
RectF rectF = new RectF();
rectF.set(300, 300, 600, 600);
long currentTimeMillis = System.currentTimeMillis();
canvas.drawArc(rectF, 0, (currentTimeMillis - startTimeMillis ) * 360 / 8000 , false, paint);
invalidate();
}
} 展开
第一个参数是矩形,
第二个参数是开始角度;
第三个参数是结束角度.
currentTimeMillis 得到系统的当前时间,
startTimeMillis 方法开始执行的时间
后面就不说了,疑问不在这里,
现在想按照规定的时间来画圆环,
看代码中的第三个参数不太理解
(currentTimeMillis - startTimeMillis ) * 360 / 8000 这里实现了 8秒画出一个圆环,
有人能解释一下是怎么算出来的吗.......为什么8秒,如果这个参数是角度的话,
那么,按照这个参数的算法也想不通呀.....哪位大神解答一下吗??
public class MyView extends View {
private long startTimeMillis;
public MyView2(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
startTimeMillis = System.currentTimeMillis();
}
public MyView2(Context context, AttributeSet attrs) {
super(context, attrs);
startTimeMillis = System.currentTimeMillis();
}
public MyView2(Context context) {
super(context);
startTimeMillis = System.currentTimeMillis();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
RectF rectF = new RectF();
rectF.set(300, 300, 600, 600);
long currentTimeMillis = System.currentTimeMillis();
canvas.drawArc(rectF, 0, (currentTimeMillis - startTimeMillis ) * 360 / 8000 , false, paint);
invalidate();
}
} 展开
1个回答
展开全部
(currentTimeMillis - startTimeMillis ) * 360 / 8000
= (currentTimeMillis - startTimeMillis )/8000(每8秒) * 360(一圈)
= (currentTimeMillis - startTimeMillis )/8000(每8秒) * 360(一圈)
更多追问追答
追问
能详细点吗? 当前时间减去开始时间 是ondraw() 运行一次的时间 , 除以8秒 是什么意思?
8秒分之1次??想不通????
追答
令currentTimeMillis - startTimeMillis = Δt
那么画的角度A 是 Δt的一次函数
A = Δt/8000 * 360
其中Δt/8000 单位是秒除以秒,是个常数没有单位,只是一个比例系数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询