Imageview揭示动画

时间:2014-09-05 19:39:39

标签: android android-animation

我试图设置一个图像视图,显示它的图像超时(水平) 我现在通过扩展ImageView和onDraw来使用它。取自CoveredImageView

@Override
protected void onDraw(Canvas canvas) {

    canvas.getClipBounds(mRect);
    int i = round((float) mRect.width() * mPercent);
    mRect.right = i + mRect.left;
    canvas.clipRect(mRect);

    super.onDraw(canvas);
    invalidate();

}

mPercent是我要展示的数量,我把它连接到音乐播放器和搜索栏并显示如下

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        revealImg.updatePercent((float) progress / (float) seekBar.getMax());
    }
}

当计时器/歌曲持续时间很长时,一切都很有效。 10分钟,因为它显示缓慢,但如果歌曲是1分钟,显示不是平滑的动画(图像宽度与设备相同),它喜欢跳跃,因为它需要在较短的时间内显示整个图像(希望你明白我的意思了)

我知道它为什么要这样做,因为onDraw中的clipRect显示每像素的像素,所以如果歌曲为30秒且设备为300px宽,则每秒跳跃10px,其中10分钟歌曲只有.5px四舍五入到1px(不明显)

我想知道是否有人有更好的方法让它不起伏不定。我想我可以使用ValueAnimator,但我不太确定如何使用它来显示图像视图。

1 个答案:

答案 0 :(得分:1)

使用ValueAnimator计算出来!

我刚刚更换了

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    revealImg.updatePercent((float) progress / (float) seekBar.getMax());
}

@Override
public void onAnimationUpdate(ValueAnimator animation) {
    float value = (float) animation.getCurrentPlayTime();
     revealImg.updatePercent(value / mixDurationInMilli);
}

现在一切都比较顺畅:)我只是不太确定为什么......:/