我试图设置一个图像视图,显示它的图像超时(水平) 我现在通过扩展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,但我不太确定如何使用它来显示图像视图。
答案 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);
}
现在一切都比较顺畅:)我只是不太确定为什么......:/