2014-09-05 97 views
0

我試圖設置一個圖像視圖,顯示它的圖像超時(水平) 我現在通過擴展ImageView和onDraw工作。從CoveredImageViewImageview揭示動畫

@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但我不太清楚如何使用它來揭示imageview。

回答

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); 
} 

一切順利得多,現在:)我只是不明白爲什麼...:/