【发布时间】:2018-05-14 12:57:13
【问题描述】:
我有一个 4 页的 viewpager,每个 viewpager 页面都包含一个 recylerview。 Recyclerview 包含 20-30 个元素的列表,在每个元素中我都有一个 imageView,其功能是下载文件并将其替换为画布位图,显示循环进度中的下载百分比 .
我正在下载一个文件并在画布的帮助下显示进度并更新图像视图。 下面是代码
radiusDifference 对于平板电脑是 7,对于移动屏幕是 5。
private void circularImageBar(ImageView iv2, int progess, int radiusDifference) {
System.out.println("sowload percent-" + progess);
Bitmap b = null;
Canvas canvas = null;
Paint paint = null;
if (b == null) {
b = Bitmap.createBitmap(iv2.getWidth(), iv2.getHeight(), Bitmap.Config.ARGB_8888);
canvas = new Canvas(b);
paint = new Paint();
}
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(iv2.getWidth() / 10);
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);
canvas.drawCircle(iv2.getWidth() / 2, iv2.getHeight() / 2,
(iv2.getWidth() / 2) - radiusDifference, paint);
int tintColor = Color.parseColor("#F81004");
paint.setColor(tintColor);
paint.setStrokeWidth(iv2.getWidth() / 10);
paint.setAntiAlias(true);
final RectF oval = new RectF();
paint.setStyle(Paint.Style.STROKE);
oval.set(radiusDifference, radiusDifference, iv2.getWidth() - radiusDifference,
iv2.getHeight() - radiusDifference);
canvas.drawArc(oval, 270, ((progess * 360) / 100), false, paint);
iv2.setImageBitmap(b);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
iv2.setForegroundGravity(View.TEXT_ALIGNMENT_CENTER);
}
iv2.requestLayout();
}
}
下载正在运行,甚至创建了位图,但它没有反映在 UI 中。
【问题讨论】:
-
你是从后台线程还是从 UIThread 调用这个方法?
-
来自 UIThread 的@MarcEstrada
-
这个方法什么时候调用?调用此方法时,您确定您的 ImageView 具有定义的大小吗?因为如果
iv2.getWitdh和iv2.getHeight返回0它会解释为什么你什么都看不到。 -
@Eselfar 我已经对此进行了调试,它返回了正确的宽度和高度
-
能否在调用方法的地方添加代码?我已经尝试过您的代码并且它可以工作(至少它显示了一些东西)。所以如果
iv2.getWidth和iv2.getHeight> 0 可能你的问题是radiusDifference值太大了?
标签: android canvas bitmap imageview