我只是想创建一条水平线。我把视图涂成红色然后添加了一条蓝线,我认为它应该占据一半的高度。
因为我说我的自定义视图高度为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"
/>
答案 0 :(得分:1)
在您的情况下,drawLine
方法在Y = 0上绘制一条线。这意味着您在Y上的线条中心位置为0.如果将线条宽度设置为20,则将填充-10和+10。
有两种不同的解决方案: