0
我在我的自定義視圖中使用DraweeHolder來顯示圖像。當我想用新資源更新圖像時,我創建了一個新的DraweeController,然後將setController設置爲DraweeHolder。DraweeHolder中的壁畫交叉淡化
我想實現的是之前和新的圖像之間的交叉淡入淡出效果。 對於淡入/淡出,我遞歸地將setAlpha設置爲drawable。
void handleTransition(DraweeHolder draweeHolder, long startingTime) {
Drawable drawable = draweeHolder.getTopLevelDrawable().mutate();
int duration = 2000;
long currTime = System.currentTimeMillis();
int diff = (int) (currTime - startingTime);
int toAlpha = Math.max(0, 255 - (255 * diff/duration));
drawable.setAlpha(toAlpha);
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
Log.d(TAG, "onDraw()");
super.onDraw(canvas);
synchronized (this) {
handleTransition(draweeHolder, mCurrentTransStartTime);
}
}
它似乎工作正常,除了onDraw將被調用太多次。 但是,我不知道如何在DraweeHolder中同時出現兩個圖像(交叉淡入淡出)。即使爲DraweeHolder設置高/低分辨率圖像也不能提供交叉淡入的選項。
順便說一句,付款人已經提供FadeDrawable,這樣就不需要惹測量時間和計算你自己的阿爾法。 – plamenko
此外,爲了等待交叉淡入,直到新圖像實際加載完畢,您可以設置控制器偵聽器,並在'onFinalImageSet'中執行'mFadeDrawable.fadeToLayer(mCurrentIndex)'。 – plamenko
感謝您的回覆。這是一個很好的暗示使用FadeDrawable。它現在很好用。 –