我想在照片周围绘制多个颜色圈,这是通过以下代码从我这里获得的:
public class DrawPartCircleView extends View {
private String mColor = "#000000";
private float mRadius;
private float mStrokeWidth = 14;
private Map<String, Integer> mColorsMap;
public DrawPartCircleView(Context context) {
super(context);
}
public DrawPartCircleView(Context context, float radius, float strokeWidth, Map<String, Integer> colorsMap) {
super(context);
mRadius = radius;
mStrokeWidth = strokeWidth;
mColorsMap = colorsMap;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float width = (float) getWidth();
float height = (float) getHeight();
Path path = new Path();
path.addCircle(width / 2,
height / 2, mRadius,
Path.Direction.CW);
Paint paint = new Paint();
paint.setStrokeWidth(mStrokeWidth);
paint.setStyle(Paint.Style.FILL);
float center_x, center_y;
final RectF oval = new RectF();
paint.setStyle(Paint.Style.STROKE);
center_x = width / 2;
center_y = height / 2;
oval.set(center_x - mRadius,
center_y - mRadius,
center_x + mRadius,
center_y + mRadius);
int countColors = countColors(mColorsMap);
int startDegree = 0;
for (String key : mColorsMap.keySet()) {
int stepDegree = (mColorsMap.get(key) * 360 / countColors);
paint.setColor(Color.parseColor(key));
canvas.drawArc(oval, startDegree, stepDegree, false, paint);
startDegree += stepDegree;
}
}
private int countColors(Map<String, Integer> myColorsMap) {
int count = 0;
for (String key : myColorsMap.keySet()) {
count += myColorsMap.get(key);
}
return count;
}
}
当我有这样的列表视图(超过20件)时会出现问题。回收者视图中有这些项目的延迟,混乱。
I looked here但是在这个解决方案中,当列表中的元素超过10件时出现了问题。
如何绘制圆圈但是性能不会变差? 也许我可以使用glide
来做到这一点答案 0 :(得分:1)
如果我们谈论表现,有一些事情正在发挥作用。
1)您在onDraw()
内进行分配。 onDraw()
被称为A LOT。您应该在Path
之外构建Paint
,RectF
和onDraw()
,并在后续调用onDraw()
时重复使用它们。此外,请提前将颜色解析到颜色地图中,这样您就不必在onDraw()
内解析它们。
2)为什么countColors()
不仅仅使用myColorsMap.keySet().size()