滚动时 SurfaceView 闪烁
SurfaceView flickering when scrolling
我有一个滚动视图并在其中嵌套了几个自定义 SurfaceView
。当我滚动时,SurfaceView
背景开始闪烁黑色。我已经对此进行了至少一天的研究,但找不到解决方案。我试图实现这个线程的解决方案:http://android-coding.blogspot.ca/2012/01/flickering-problems-due-to-double.html 但没有成功。
我正在尝试使用 SurfaceView 绘制文本和下载的表情符号图像。最初,我使用自定义视图,但在尝试在 UI 线程中下载位图并收到 NetworkOnMainThreadException
后被阻止。所以我尝试对视图的整个 onDraw() 部分使用 AsyncTask
。但是,视图仍然是空白的,AsyncTask
完成后我无法更新它。 AsyncTask
完成后,我试图在视图上调用 invalidate(),但它导致了 onDraw() 的无限循环。然后我创建了一个布尔变量来停止这个循环并只渲染一次视图,但它以我开始的方式结束:一个空白视图。
现在我正在尝试使用 SurfaceView
因为我阅读了
One of the purposes of this class is to provide a surface in which a secondary thread can render into the screen
我认为我应该使用它,因为我正在使用单独的线程来下载位图。
现在我实现了 SurfaceView
,它无法按照我想要的方式工作,因为它在我滚动时闪烁黑色。我已经记录在这里:https://youtu.be/o5j9s4XF65E
这里有错误代码的 Pastebin:https://pastebin.com/g61aSNM2
我要问的问题:
我应该为此目的使用 SurfaceView
吗?如果没有,那么实现这个的正确方法是什么?
我应该使用 Thread
而不是 AsyncTask
从 url 下载位图吗?
为什么 SurfaceView 会闪烁,我该怎么办?
好吧,我花了一些时间重新考虑我的视图结构并意识到我不应该使用 SurfaceView
。
我制作了我的 CustomView,TextMessage
,扩展了 ImageView
,在 onDraw()
期间,我调用了我的自定义 AsyncTask<TextMessage, Void, Bitmap>
,它只是创建了一个 View 应该是什么的位图。 AsyncTask
完成后,在 onPostExecute()
方法期间,我在 TextMessage
上调用了 setImageBitmap(myBitmap)
,我首先将其作为参数传递。
这太简单了,我完全忽略了我的问题,我一开始就不应该使用 SurfaceView
。
我有一个滚动视图并在其中嵌套了几个自定义 SurfaceView
。当我滚动时,SurfaceView
背景开始闪烁黑色。我已经对此进行了至少一天的研究,但找不到解决方案。我试图实现这个线程的解决方案:http://android-coding.blogspot.ca/2012/01/flickering-problems-due-to-double.html 但没有成功。
我正在尝试使用 SurfaceView 绘制文本和下载的表情符号图像。最初,我使用自定义视图,但在尝试在 UI 线程中下载位图并收到 NetworkOnMainThreadException
后被阻止。所以我尝试对视图的整个 onDraw() 部分使用 AsyncTask
。但是,视图仍然是空白的,AsyncTask
完成后我无法更新它。 AsyncTask
完成后,我试图在视图上调用 invalidate(),但它导致了 onDraw() 的无限循环。然后我创建了一个布尔变量来停止这个循环并只渲染一次视图,但它以我开始的方式结束:一个空白视图。
现在我正在尝试使用 SurfaceView
因为我阅读了
One of the purposes of this class is to provide a surface in which a secondary thread can render into the screen
我认为我应该使用它,因为我正在使用单独的线程来下载位图。
现在我实现了 SurfaceView
,它无法按照我想要的方式工作,因为它在我滚动时闪烁黑色。我已经记录在这里:https://youtu.be/o5j9s4XF65E
这里有错误代码的 Pastebin:https://pastebin.com/g61aSNM2
我要问的问题:
我应该为此目的使用
SurfaceView
吗?如果没有,那么实现这个的正确方法是什么?我应该使用
Thread
而不是AsyncTask
从 url 下载位图吗?为什么 SurfaceView 会闪烁,我该怎么办?
好吧,我花了一些时间重新考虑我的视图结构并意识到我不应该使用 SurfaceView
。
我制作了我的 CustomView,TextMessage
,扩展了 ImageView
,在 onDraw()
期间,我调用了我的自定义 AsyncTask<TextMessage, Void, Bitmap>
,它只是创建了一个 View 应该是什么的位图。 AsyncTask
完成后,在 onPostExecute()
方法期间,我在 TextMessage
上调用了 setImageBitmap(myBitmap)
,我首先将其作为参数传递。
这太简单了,我完全忽略了我的问题,我一开始就不应该使用 SurfaceView
。