2016-01-20 100 views
4

我需要实现一个圆形进度条来显示和更新,而Fresco下载图像。该类必须根据Fresco的方法setProgressBarImage()的要求扩展到Drawable。使用壁画的圆形进度条

我的阶级是使用壁画加载像下面的代码片段的图像:

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

和XML的“形象” SimpleDraweeView如下:

<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不提供可绘制的圆形进度条。

有没有人有这个实现的想法?

+0

的[如何创建Android的圆形进度?](http://stackoverflow.com/questions/27213381/how-to-create-circular-progressbar-in-android) – piotrek1543

+2

可能的复制@ piotrek1543:这不是重复的,因为我特别需要一个按照Fresco的要求从Drawable延伸的Progressbar。无论如何,这个问题太广泛了。答案并不能解决我的问题。 –

回答

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

} 
+0

谢谢,很好的例子 –