使用Fresco实现圆形进度条

5

我需要实现一个圆形进度条,以便在Fresco下载图像时显示和更新。该类必须扩展自Drawable,以满足Fresco的setProgressBarImage()方法的要求。

我的类使用以下代码片段加载图像:

SimpleDraweeView simpleDraweeView = (SimpleDraweeView) view.findViewById(R.id.image);
simpleDraweeView.getHierarchy().setProgressBarImage(new ProgressBarDrawable());
simpleDraweeView.setImageURI(message.getMessageImage().getImageFileUriForList());

'image' SimpleDraweeView的XML如下:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/image"
    android:layout_width="192dp"
    android:layout_height="200dp"
    android:layout_margin="7dp"
    android:layout_gravity="center"
    fresco:actualImageScaleType="fitCenter"
    tools:background="@drawable/gallery_attach_dialog" />

问题是我需要用一个圆形进度条替换标准的水平进度条。但是Fresco没有提供圆形进度条drawable。你有任何实现思路吗?

可能是如何在Android中创建圆形ProgressBar?的重复问题。 - piotrek1543
2
@piotrek1543:这不是重复的问题,因为我特别想要一个可以从Drawable扩展的ProgressBar,正如Fresco所需的那样。无论如何,另一个问题被关闭了,因为它太广泛了。而且答案并没有解决我的问题。 - Doug
2个回答

4
您可以直接实现Drawable,因为ProgressBarDrawable只是实现和重写了超级方法。正如之前提到的,这个问题应该被视为重复。
public class ImageLoadProgressBar extends ProgressBarDrawable {


float level;

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

int color = whatevercolorresource;

final RectF oval = new RectF();

int radius = whateverradius;

public ImageLoadProgressBar(){
    paint.setStrokeWidth(whateveintyouputhere);
    paint.setStyle(Paint.Style.STROKE);
}

@Override
protected boolean onLevelChange(int level) {
    this.level = level;
    invalidateSelf();
    return true;
}

@Override
public void draw(Canvas canvas) {
    oval.set(canvas.getWidth() / 2 - radius, canvas.getHeight() / 2 - radius,
            canvas.getWidth() / 2 + radius, canvas.getHeight() / 2 + radius);

    drawCircle(canvas, level, color);
}


private void drawCircle(Canvas canvas, float level, int color) {
    paint.setColor(color);
    float angle;
    angle = 360 / 1f;
    angle = level * angle;
    canvas.drawArc(oval, 0, Math.round(angle), false, paint);
}

}

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接