0

我只是想创建一条水平线。我已经将视图涂成红色,然后添加了一条我认为应该占一半高度的蓝线。

因为我说我的自定义视图的高度是 40 dp,所以我会认为高度为 20 dp 的蓝色条会填满一半。但事实并非如此。它需要 1/4 而不是 1/2。我该如何解决?

public class MyProgressView extends View {

    public MyProgressView(Context context) {
        super(context);
    }

    public MyProgressView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setStrokeWidth(dipToPx(20));
        canvas.drawLine(0, 0, 300, 0, paint);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int parentWidth = MeasureSpec.getSize(widthMeasureSpec);

        setMeasuredDimension(parentWidth, dipToPx(40));
    }

    private int dipToPx(int dp) {
        return (int) getResources().getDisplayMetrics().density * dp;
    }
}

和 XML:

<view
        class="com.company.MyProgressView"
        android:background="#ff0000"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />
4

1 回答 1

1

在您的情况下drawLine,方法在 Y=0 上画一条线。这意味着您的线条在 Y 上的中心位置为 0。如果您将笔画宽度设置为 20,它将填充 -10 和 +10。

有2种不同的解决方案:

  1. 您可以将笔画设置为 40(将填充 -20 和 +20)
  2. 您可以在 drawLine 方法上将 Y 设置为 10(这将填充 0 和 +20)。
于 2013-10-27T19:38:51.813 回答