画布大小比我的图像大

时间:2014-08-01 11:52:07

标签: android view android-canvas

其实我想处理自定义视图。我成功创建了它,但我面临的一个问题是画布大小。让我们说如果我的图像大小是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。

画布尺寸应该比我的图片大。

1 个答案:

答案 0 :(得分:0)

您必须覆盖onMeasure方法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(mWidth, mHeight);
}

这将向您的View显示其实际宽度和高度。

注意

自定义View中使用的尺寸以像素为单位。因此,它在每个屏幕上都不一样。为了在每个设备上保持相同的方面,在绘制View时必须考虑屏幕的密度。