有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android阻止可绘制背景超出视图范围

所以现在我有一个我创建的可绘制对象,它本质上是一个圆,我唯一的问题是我无法阻止它超出它的父容器,我所说的超出是指超出它的父视图,使它的边缘不再可见

我的画:

public class ProgressArc extends Drawable {

private int color;
private float progress;
private int strokeWidth;

public ProgressArc(int color, float progress, int strokeWidth) {

    this.progress = progress * (float)3.6;
    this.color = color;
    this.strokeWidth = strokeWidth;
}

@Override
public void draw(Canvas canvas) {
    canvas.save();

    Rect bounds = getBounds();
    Paint paint = new Paint();
    RectF oval = new RectF();

    paint.setColor(this.color);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(strokeWidth);
    paint.setAntiAlias(true);

    oval.set(bounds);
    canvas.drawArc(oval, 90, this.progress, false, paint);
}

@Override
public void setAlpha(int alpha) {
    // Has no effect
}

@Override
public void setColorFilter(ColorFilter cf) {
    // Has no effect
}

@Override
public int getOpacity() {
    // Not Implemented
    return 0;
}

}

XML:

<FrameLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:id="@+id/progress_container"
    安卓:layout_width="150dp"
    安卓:layout_height="150dp">

       <View
           安卓:id="@+id/bill_progress_partial_bg"
           安卓:scaleType="fitXY"
           安卓:layout_width="fill_parent"
           安卓:layout_height="fill_parent"
           安卓:gravity="center_vertical" />

</FrameLayout>

我如何设置背景:

progressViewPartialArc.setBackground(new ProgressArc(color, getPercent(), 12));

我的意思截图:

screeny

那个圆圈应该是个完美的圆圈,但我就是不明白为什么它不会呢


共 (1) 个答案

  1. # 1 楼答案

    看起来你需要考虑笔划宽度的界限:

    oval.set(bounds);
    oval.inset(strokeWidth / 2, strokeWidth / 2);