在画布上绘制的数字是奇怪的裁剪

时间:2015-06-10 22:52:28

标签: android canvas

我正在为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会使用指定的canvasopacity上绘制它们。好吧,那个方法可以按我的意思运行:

(不要关心黑洞和红色事物)

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”方法更改尺寸或颜色。这可能是什么?

1 个答案:

答案 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函数。