我已经搜索了相关的答案,但还没有找到解决方案 . 所以我在这里请求帮助 . 我正在创建一个自定义视图 . 我已经超越了测量 . 代码如下 .
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthSize,heightSize;
int measureWidthSpec = MeasureSpec.getMode(widthMeasureSpec);
int measureHeightSpec = MeasureSpec.getMode(heightMeasureSpec);
widthSize = getCircleWidth(measureWidthSpec, MeasureSpec.getSize(widthMeasureSpec));
heightSize = getCircleHeight(measureHeightSpec,MeasureSpec.getSize(heightMeasureSpec));
int circleSize = Math.min(widthSize,heightSize);
setMeasuredDimension(circleSize, circleSize);
Log.d(TAG, "View Measured and ViewDimension : " + heightSize + " " + MeasureSpec.getSize(widthMeasureSpec));
}
使用MeasureSpec.getSize(widthMeasureSpec)在此处请求大小时,将返回0 . 但是对于高度,我得到67的值.getCircleWidth()和getCircleHeight是用于根据specMode修复值的方法 . 我声明我的视图的布局xml文件的部分如下所示 .
<com.example.raaja.circleview.CircleView
android:id="@+id/CircleView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/textView"
android:layout_toRightOf="@+id/textView"
circle:circleColor="#5dade2"
circle:innerCircleColor="#2874a6"
circle:numberTextColor="#b3b6b7"
/>
任何人都可以帮我找到为什么返回值0 . 此外,onDraw不会被调用,因为我在setMeasuredDimension()中修复了最小值 .
2 回答
你没有在
onMeasure()
解释你想要做什么,但假设你只是想让视图成为方形,你可以简单地这样做:我从BladeCoder的回复中找到了这个解决方案的答案 . 问题实际上是Layout.xml . 我已经使用另一个按钮并排定义了View . Button占据了所有的宽度空间 . 所以这就是问题所在 . 如果您的视图未在下面绘制,则为2点解决方案 .
检查MeasureSpec.getsize() . 如果它返回0,则布局没有空间放置视图(宽度或高度),修复layout.xml . 如果没有,则继续检查您在setMeasuredDimension()上修复维度的计算 . 这两个问题将成为第二点的原因 .
如果在setMeasuredDimension()上传递0,则不会绘制onDraw() . 您可以传递1000或更多宽度但是如果传递高度为0(如此setMeasureDimension(1000,0)),则视图将不可见,因为它的高度为零 .
我希望这个答案能帮助您找到上述问题的解决方案 .