Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使自定义视图大小适应内部画布_Android_Android Canvas_Android Custom View - Fatal编程技术网

Android 使自定义视图大小适应内部画布

Android 使自定义视图大小适应内部画布,android,android-canvas,android-custom-view,Android,Android Canvas,Android Custom View,我有一个自定义视图,其中包含一个简单的画布(矩形) 我想根据画布的宽度和高度调整此自定义视图的宽度和高度 因为当使用wrap\u content时,自定义视图会填满所有屏幕空间 多谢各位 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match

我有一个自定义视图,其中包含一个简单的画布(矩形) 我想根据画布的宽度和高度调整此自定义视图的宽度和高度 因为当使用
wrap\u content
时,自定义视图会填满所有屏幕空间

多谢各位

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <com.dev.ui.RectangleView   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />

</LinearLayout>

我知道这个问题已经在评论中得到了回答。但我只是想澄清一下

问题指出:

我想调整此自定义视图的宽度和高度以适应 画布宽度和高度


CustomView的宽度和高度与onDraw的画布的宽度和高度相同

onDraw(canvas canvas)
方法中提供的
canvas
与视图本身具有相同的高度和宽度。因此,当您谈论视图的大小时,您谈论的是
画布的大小


现在,
onMeasure()
确定视图(或画布)的大小。在此方法中通过
setMeasuredDimension
设置的任何大小都将是视图的大小。

您需要覆盖onMeasure方法并将setMeasuredDimension设置为所需的宽度和高度。非常好的演示@aelimil谢谢它与onMeasure:)配合得非常好。创建一个答案,以便我可以验证您的解决方案;)
public class RectangleView   extends View {
    Paint paint = new Paint();

    public SquareLegendView(Context context) {
        super(context);
    }

    public SquareLegendView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareLegendView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }


    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.BLACK);
        canvas.drawRect(40, 40, 80, 80, paint);
        //drawRect(left, top, right, bottom, paint)
    }

}