我正在为android开发一个视频游戏,所以我希望有一个“手动”画布绘图导向的编程风格。
所以,我的布局的onDraw()是这样的:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(0,0,540,1000,Paints.linePaint(Color.BLACK, 1));
path.drawOn(canvas, 0.5f);
}
其中path.drawOn(Canvas canvas, float opacity);
是一个很长的解释方法。 path
包含一些细分,drawOn会使用指定的canvas
在opacity
上绘制它们。好吧,那个方法可以按我的意思运行:
(不要关心黑洞和红色事物)
opacity 0.0f -> http://i.imgur.com/jbadTyF.png
opacity 0.5f -> http://i.imgur.com/NfRS3at.png
opacity 1.0f -> http://i.imgur.com/3ZL4FcU.png
当我想要一个平滑的动画时,画布绘制开始变得很奇怪,在这种情况下,是从不透明度0到1.我喜欢这样:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(0,0,540,1000,Paints.linePaint(Color.BLACK, 1));
path.drawOn(canvas, pathOpacity());
}
private float pathOpacity(){
float tme = (float) getTimeElapsed();
float bgn = 500;
float end = 3000;
if (tme > bgn && tme < end) { return (tme-bgn)/(end-bgn);}
return tme < bgn ? 0 : 1;
}
private long bgnTime = -1;
public long getTimeElapsed(){
return System.currentTimeMillis() - bgnTime;
}
public void setTimeElapsed(long ms){
bgnTime = System.currentTimeMillis() - ms;
}
因此,当我调用setTimeElapsed(0)动画开始时:它在500毫秒后从不透明度0变为1并在3000毫秒停止。
动画有效:问题是图像被奇怪地裁剪成这样!
http://i.imgur.com/kY2kO44.png
所有与时间相关的操作都会发生这种情况,即使我想要使用“setElapsedTime”方法更改尺寸或颜色。这可能是什么?
答案 0 :(得分:0)
嗯,我会诚实地对你说,我不知道是什么原因引起了你的问题,但是如果你说的那样来自setTimeElapsed和getTimeElapsed,那么做一个更简单的方法来做一个使用时间的事件。 android CountDownTimer 这是一个例子
new CountDownTimer(3000, 500) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
}
}.start();
这个代码基本上做的是超过3秒(3000毫秒)它将每隔500毫秒调用一次onTick函数,并且在3000毫秒结束后它将调用onFinish函数。