我有一个自定义视图,该视图嵌套在ScrollView中。这个想法是自定义视图的长度可以大于屏幕的高度,因此,当您在ScrollView中滑动时,可以看到其所有内容。
为了做到这一点,我像这样调整自定义视图的画布的剪辑:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.clipRect(mCanvasArea, Region.Op.REPLACE);
}
其中mCanvasArea是预生成的RectF,它表示画布可以绘制的整个区域。我记录了它的值@ 10308。
但是,当应用程序运行时,自定义视图是不可滚动的,它的作用就像可见内容代表画布中的所有内容一样,但是我可以从屏幕底部看到更多内容。
这是我的视图XML声明:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/activity_toolbar"
android:fillViewport="true">
<com.myapp.CustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
(我必须添加fillViewport才能使内容首先显示出来)
为了使视图滚动,还有其他需要做的事情吗?
您需要指定自定义视图的高度,而不是画布的高度。传递给onDraw的画布反映了视图的宽度和高度。
将视图设置为wrap_content并不意味着只要您在其边界之外绘制,它就会增长。它只会“包装”子视图,而不是画布。
要以编程方式设置视图的高度,请执行以下操作:
getLayoutParams().height = 500;
invalidate();
我不确定您到底要做什么,所以我不能过多地确定应该在哪里设置高度,但是我建议您不要在onDraw中更改视图的尺寸,因为当您使它无效时,它会导致再次绘制,您将需要一些时髦的逻辑来处理此递归。
相反,您可以确定构建视图时所需的高度,然后使用类似以下的方法覆盖onMeasure:
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, calculatedHeight);
}
这将迫使您的自定义视图进入计算的高度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句