Java 自定义视图绘制不正确
我只是想画一条水平线。我把风景画成了红色,然后加了一条蓝线,我认为这条线应该占一半的高度 既然我说我的自定义视图的高度是40 dp,我会认为20 dp的蓝色条会将其填充一半。但事实并非如此。它需要1/4而不是1/2。我怎样才能解决这个问题Java 自定义视图绘制不正确,java,android,Java,Android,我只是想画一条水平线。我把风景画成了红色,然后加了一条蓝线,我认为这条线应该占一半的高度 既然我说我的自定义视图的高度是40 dp,我会认为20 dp的蓝色条会将其填充一半。但事实并非如此。它需要1/4而不是1/2。我怎样才能解决这个问题 public class MyProgressView extends View { public MyProgressView(Context context) { super(context); } public
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
有两种不同的解决方案:
我已经有一段时间没有画线了,但我相信可能是因为线的下半部分被剪掉了。试着提高10 dp,看看你能不能得到更多。谢谢你的帮助:)