我在自定义视图中使用 DraweeHolder 来显示图像。当我想用新资源更新图像时,我创建一个新的 DraweeController,然后将控制器设置为 DraweeHolder。
我想要实现的是旧图像和新图像之间的交叉淡入淡出效果。对于淡入/淡出,我递归地将 Alpha 设置为可绘制对象。
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 设置高/低分辨率图像也不会提供交叉淡入淡出的选项。