Android自定义视图:将画布大小设置为包裹位图

Android自定义视图:将画布大小设置为包裹位图,android,android-canvas,android-view,android-custom-view,Android,Android Canvas,Android View,Android Custom View,我有一个自定义视图,其中包含Canvas。我正在使用这个画布在上面显示位图,然后我可以在触摸屏上绘制位图。当我加载位图时,它比视图大很多,我看不到整个位图(它是用相机拍摄的)。我尝试创建缩放位图,然后在画布上绘制,但在这种情况下,位图更小,画布占用了整个可用布局空间。我以编程方式添加此视图,而不是在xml布局中添加。我已将其设置为视图,但不起作用: fdvImage = new ImageEditingView(this, b); RelativeLayout.LayoutParams lp =

我有一个自定义视图,其中包含
Canvas
。我正在使用这个画布在上面显示位图,然后我可以在触摸屏上绘制位图。当我加载位图时,它比视图大很多,我看不到整个位图(它是用相机拍摄的)。我尝试创建缩放位图,然后在画布上绘制,但在这种情况下,位图更小,画布占用了整个可用布局空间。我以编程方式添加此视图,而不是在xml布局中添加。我已将其设置为视图,但不起作用:

fdvImage = new ImageEditingView(this, b);
RelativeLayout.LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT, 1);
fdvImage.setLayoutParams(lp);
这是我的视图构造函数:

public ImageEditingView(Context c, Bitmap b) {
    super(c);
    this.setMinimumHeight(0);

    mBitmap = Bitmap.createScaledBitmap(b, b.getWidth()/2, b.getHeight()/2, true);
    mCanvas = new Canvas(mBitmap);
}
在onDraw中,我有:

protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
}

所以,我的问题是:为什么画布占用了所有的布局空间,即使位图比它小?

使用以下代码绘制位图

canvas.drawBitmapMesh(yourBitmap, 1, 1,vertices, 0, null, 0,
                                        paint);
根据视图创建顶点

[编辑]

    float[] vertices = new float[8];
 vertices[0]=0; vertices[1]=0; vertices[2]=100; vertices[3]=0;
 vertices[4]=0;vertices[5]=200; vertices[6]=100; vertices[7]=200;

将100更改为宽度,将200更改为高度

我应该放置什么来代替顶点?如何制作这些顶点?这是可以的,但我有一个问题。视图是在onCreate中创建的,我没有图像应有的宽度和高度。视图被添加到相对布局中,但我无法获取宽度和高度,因为这在onCreateuse onWindowFocusChanged中被调用以获取高度和宽度就是它。我在
onWindowFocusChanged
中获得布局的尺寸,并在画布上绘制位图。我不需要
canvas.drawBitmapMesh
。由于我有尺寸,我创建了缩放位图,然后绘制它。