Android 自定义视图在';它在滚动视图中吗?

Android 自定义视图在';它在滚动视图中吗?,android,horizontalscrollview,Android,Horizontalscrollview,现在我有一个CustomView,它的宽度很大,所以我把它放在水平滚动视图中。为了提高性能,我只需在其onDraw()方法中绘制该视图的可见矩形。现在我面临一个问题,当我用手指滚动视图时,视图如何知道其可见矩形已更改,并通过调用postInvalidate()刷新其内容 如果有人能帮助我,非常感谢 ScrollView在滚动到可见区域时应自动绘制视图。您不需要调用postInvalidate()。只有当视图内容已更改且需要重新绘制时,才应使视图无效。不要担心滚动视图。如果要避免对不可见的内容执行

现在我有一个
CustomView
,它的宽度很大,所以我把它放在
水平滚动视图中。为了提高性能,我只需在其
onDraw()方法中绘制该视图的可见矩形。现在我面临一个问题,当我用手指滚动视图时,视图如何知道其可见矩形已更改,并通过调用
postInvalidate()
刷新其内容


如果有人能帮助我,非常感谢

ScrollView在滚动到可见区域时应自动绘制视图。您不需要调用postInvalidate()。只有当视图内容已更改且需要重新绘制时,才应使视图无效。不要担心滚动视图。如果要避免对不可见的内容执行不必要的绘图代码,请在onDraw()中使用画布的quickReject方法。或者使用Canvas的getClipBounds方法来查找视图的当前可见部分。

但是当我滚动视图时,根本不会调用onDraw()方法。在我的问题中,CustomView是ScrollView中唯一的视图。@Nick在
onSraw
中调用
Log.d
并记录
canvas.getClass()
的值,您在logcat上看到了什么?是android.view.Gles20 RecordingCanvas
还是类似的东西?@pskink,我按照你说的做,
canvas
的类型是android.view.DisplayListCanvas
@Nick ok现在更改你的清单
并再次运行你的应用程序,还有
Log.d
canvas.isHardwareAccelerated()的值,现在是android.view.Surface$CompatibleCanvas,canvas.isHardwareAccelerated()为false。那我该怎么办呢?