我只是想创建一条水平线。我将 View 涂成红色,然后添加了一条蓝线,我认为该蓝线应该占高度的一半。
因为我说我的自定义 View 高度为 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"
/>
最佳答案
在您的情况下,drawLine
方法在 Y=0 上绘制一条线。这意味着您的线条在 Y 上的中心位置为 0。如果您将描边宽度设置为 20,它将填充 -10 和 +10。
有两种不同的解决方案:
- 您可以将描边设置为 40(将填充 -20 和 +20)
- 您可以在drawLine方法中将Y设置为10(这将填充0和+20)。
关于java - 自定义 View 无法正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622078/