如何创建Circle ProgressDrawable以在壁画中使用?

翠鸟福

我是新来Fresco的库,并试图显示圈Progressbar时加载图像uriDraweeView现在,我使用默认进度条,如下所示:

 GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
 GenericDraweeHierarchy hierarchy = builder.setFadeDuration(fadeInTime).build();
 hierarchy.setProgressBarImage(new ProgressBarDrawable());
 thumbnailImageView.setHierarchy(hierarchy);

但是,ProgressBarhorizontal ProgressBar反正有将其更改为圆形吗?

翠鸟福

经过很长时间的Google搜索,但我找不到任何结果。我决定自己写CircleProgressDrawable我只想与不想把时间浪费在我身上的人分享。

public class CircleProgressDrawable extends ProgressBarDrawable {

private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private int mBackgroundColor = 0x80000000;
private int mColor = 0x800080FF;
private int mBarWidth = 20;
private int mLevel = 0;
private boolean mHideWhenZero = false;
private int radius = 50;

public CircleProgressDrawable() {
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(10f);
}

public void setRadius(int radius) {
    this.radius = radius;
}

/**
 * Sets the progress bar color.
 */
public void setColor(int color) {
    if (mColor != color) {
        mColor = color;
        invalidateSelf();
    }
}

/**
 * Gets the progress bar color.
 */
public int getColor() {
    return mColor;
}

/**
 * Sets the progress bar background color.
 */
public void setBackgroundColor(int backgroundColor) {
    if (mBackgroundColor != backgroundColor) {
        mBackgroundColor = backgroundColor;
        invalidateSelf();
    }
}

/**
 * Gets the progress bar background color.
 */
public int getBackgroundColor() {
    return mBackgroundColor;
}


/**
 * Sets the progress bar width.
 */
public void setBarWidth(int barWidth) {
    if (mBarWidth != barWidth) {
        mBarWidth = barWidth;
        invalidateSelf();
    }
}

/**
 * Gets the progress bar width.
 */
public int getBarWidth() {
    return mBarWidth;
}

/**
 * Sets whether the progress bar should be hidden when the progress is 0.
 */
public void setHideWhenZero(boolean hideWhenZero) {
    mHideWhenZero = hideWhenZero;
}

/**
 * Gets whether the progress bar should be hidden when the progress is 0.
 */
public boolean getHideWhenZero() {
    return mHideWhenZero;
}

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

@Override
public void setAlpha(int alpha) {
    mPaint.setAlpha(alpha);
}

@Override
public void setColorFilter(ColorFilter cf) {
    mPaint.setColorFilter(cf);
}

@Override
public int getOpacity() {
    return DrawableUtils.getOpacityFromColor(mPaint.getColor());
}

@Override
public void draw(Canvas canvas) {
    if (mHideWhenZero && mLevel == 0) {
        return;
    }
    drawCircle(canvas, mBackgroundColor);
    drawArc(canvas, mLevel, mColor);
}

private final int MAX_LEVEL = 10000;

private void drawArc(Canvas canvas, int level, int color) {
    mPaint.setColor(color);

    Rect bounds = getBounds();
    // find center point
    int xpos = bounds.left + bounds.width() / 2;
    int ypos = bounds.bottom - bounds.height() / 2;
    RectF rectF = new RectF(xpos - radius, ypos - radius, xpos + radius, ypos + radius);
    float degree = (float) level / (float) MAX_LEVEL * 360;
    canvas.drawArc(rectF, 270, degree, false, mPaint);
    LogUtils.e("level: " + level + ", degree: " + degree);
}

private void drawCircle(Canvas canvas, int color) {
    mPaint.setColor(color);
    Rect bounds = getBounds();
    int xpos = bounds.left + bounds.width() / 2;
    int ypos = bounds.bottom - bounds.height() / 2;
    canvas.drawCircle(xpos, ypos, radius, mPaint);
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在壁画中保留叠加图像的长宽比

来自分类Dev

如何在Android中使用壁画设置渐进式JPEG

来自分类Dev

如何在动画中使用剪切路径?

来自分类Dev

如何在uiview动画中使用数组

来自分类Dev

Android:如何使用壁画旋转图像

来自分类Dev

如何在SVG Circle元素中使用data- *属性

来自分类Dev

如何在 WPF 中使用 Circle 绘制相机的视野?

来自分类Dev

如何居中使用Javascript创建的图像?

来自分类Dev

在IF(statement)...动画中使用AJAX值

来自分类Dev

XML如何使用ProgressDrawable属性将水平进度条修改为圆形进度条?

来自分类Dev

如何在带有死键的Ubuntu 16.04中使用Circle输入A?

来自分类Dev

在壁画中缩放图像后,SimpleDraweeView不调整大小

来自分类Dev

如何使用测试昵称登录Amazon Game Circle?

来自分类Dev

如何使用鼠标在fabricjs中自由绘制Circle?

来自分类Dev

如何使用IN创建查询?

来自分类Dev

使用Meteor-ui-progress-circle(访问在HTML中创建的Template变量)

来自分类Dev

如何使用docker compose在容器中使用已创建的卷?

来自分类Dev

如何在此动画中使侧面元素在x轴上旋转?

来自分类Dev

如何创建使用pybind创建的python包?

来自分类Dev

如何在Scala中使用宏创建变量

来自分类Dev

如何在Ubuntu中使用Poedit创建.po文件?

来自分类Dev

如何在Postgres中使用别名创建嵌套的SELECT COUNT

来自分类Dev

如何在C ++中使用boost创建线程池?

来自分类Dev

如何在Matlab中使用NaN创建表?

来自分类Dev

如何在Firefox中使使用JQM创建的按钮可点击?

来自分类Dev

如何在JavaScript中使用小时和分钟创建数组?

来自分类Dev

如何在python中使用循环创建多个类对象?

来自分类Dev

我如何在Django批量创建中使用信号

来自分类Dev

如何在SQL中使用While循环创建变量

Related 相关文章

  1. 1

    如何在壁画中保留叠加图像的长宽比

  2. 2

    如何在Android中使用壁画设置渐进式JPEG

  3. 3

    如何在动画中使用剪切路径?

  4. 4

    如何在uiview动画中使用数组

  5. 5

    Android:如何使用壁画旋转图像

  6. 6

    如何在SVG Circle元素中使用data- *属性

  7. 7

    如何在 WPF 中使用 Circle 绘制相机的视野?

  8. 8

    如何居中使用Javascript创建的图像?

  9. 9

    在IF(statement)...动画中使用AJAX值

  10. 10

    XML如何使用ProgressDrawable属性将水平进度条修改为圆形进度条?

  11. 11

    如何在带有死键的Ubuntu 16.04中使用Circle输入A?

  12. 12

    在壁画中缩放图像后,SimpleDraweeView不调整大小

  13. 13

    如何使用测试昵称登录Amazon Game Circle?

  14. 14

    如何使用鼠标在fabricjs中自由绘制Circle?

  15. 15

    如何使用IN创建查询?

  16. 16

    使用Meteor-ui-progress-circle(访问在HTML中创建的Template变量)

  17. 17

    如何使用docker compose在容器中使用已创建的卷?

  18. 18

    如何在此动画中使侧面元素在x轴上旋转?

  19. 19

    如何创建使用pybind创建的python包?

  20. 20

    如何在Scala中使用宏创建变量

  21. 21

    如何在Ubuntu中使用Poedit创建.po文件?

  22. 22

    如何在Postgres中使用别名创建嵌套的SELECT COUNT

  23. 23

    如何在C ++中使用boost创建线程池?

  24. 24

    如何在Matlab中使用NaN创建表?

  25. 25

    如何在Firefox中使使用JQM创建的按钮可点击?

  26. 26

    如何在JavaScript中使用小时和分钟创建数组?

  27. 27

    如何在python中使用循环创建多个类对象?

  28. 28

    我如何在Django批量创建中使用信号

  29. 29

    如何在SQL中使用While循环创建变量

热门标签

归档