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。那我该怎么办呢?