自定义视图无法正确绘制

时间:2013-10-27 18:56:07

标签: java android

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

因为我说我的自定义视图高度为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"
        />

1 个答案:

答案 0 :(得分:1)

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

有两种不同的解决方案:

  1. 您可以将笔划设置为40(将填充-20和+20)
  2. 您可以在drawLine方法上将Y设置为10(将填充0和+20)。