其实我想处理自定义视图。我成功创建了它,但我面临的一个问题是画布大小。让我们说如果我的图像大小是10 X 10但我的视图(自定义视图)覆盖整个空间。
在我的代码下面:
public class StraightLine extends View {
// private Bitmap mBitmap;
private int rgbColorCode = 0xFFAD89F5;
private int mWidth = 100;
private int mHeight = 100;
private Paint mPaint = new Paint();
Rect rect = new Rect();
public StraightLine(Context context) {
super(context);
init();
}
public StraightLine(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public StraightLine(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
rect.left = 0;
rect.top = 0;
rect.bottom = mHeight;
rect.right = mWidth;
mPaint.setColor(rgbColorCode);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(rect, mPaint);
// canvas.clipRect(rect);
}
/**
* This method used to change the color of straight line. Color code should
* be look like "0xFFAD89F5" last three digits are rgb color code
*
* @param colorCode
*/
protected void changeColor(int colorCode) {
this.rgbColorCode = colorCode;
invalidate();
}
}
现在我在我的xml中使用此图像,如下所示:
<com.line.StraightLine
android:id="@+id/straightLine1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
现在,无论是什么,画布都会使用emapty sapce。
画布尺寸应该比我的图片大。
答案 0 :(得分:0)
您必须覆盖onMeasure
方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(mWidth, mHeight);
}
这将向您的View
显示其实际宽度和高度。
注意强>
自定义View
中使用的尺寸以像素为单位。因此,它在每个屏幕上都不一样。为了在每个设备上保持相同的方面,在绘制View
时必须考虑屏幕的密度。