android,View不能自己写一个myPaint方法在子线程中画图吗
问个幼稚的问题,就是在surfaceView里面可以新开一个线程并且在子线程里面调用自己写的onPaint方法来实现独立画图,为什么在继承View的类MyView里面不能...
问个幼稚的问题,就是在surfaceView里面可以新开一个线程并且在子线程里面调用自己写的onPaint方法来实现独立画图,为什么在继承View的类MyView里面不能在新开的线程里面也写个onPaint方法来实现画图呢,而是必须用它的onDraw呢
是因为holder = getHolder();这个方法么 展开
是因为holder = getHolder();这个方法么 展开
2个回答
展开全部
不可以,onDraw是父类方法,系统自动回调,一般是在view刷新的时候调用。你可以把你的onPaint方法放到onDraw方法里面调用,在别的地方调用validate方法(也可以是别的刷新view的方法),不过这样就没意义了。而且增加代码的冗余。也就是说画图是通过onDraw方法来显示的,onDraw只有一个参数Canvas就是画布的意思,画布当然就是把图像显示这块画布上的意思。serfaceview也是继承view,所以跟getHolder没关系。
追问
serfaceview里面的Canvas是通过Holder来锁定的,想把画图的动作放到哪个线程里就调用 holder.lockCanvas()来实现,然后这些线程便独立于UI线程,这也算是没关系么
追答
如果你的surfaceview是在UI线程下面定义的,那么你在子线程里面更新surfaceview便会报错,因为android里,在子线程中更新ui线程的组件是不允许的,违反了android单线程模型。所以我觉得你这个开启子线程来画图没什么必要,因为你这个画图的结果是要实时显示在surfaceview上面的。假如是开启子线程来播放媒体文件,那么开启子线程就非常必要了。
展开全部
surfaceView是专用的绘图容器,你自定义的继承自view的不是
追问
在surfaceView里面也是自定义一个画图的方法onPaint(),在新的线程里面
我以同样的方法来通过View实现,试过了不行,只能调用它自己的onDraw()
追答
我想view作为一种容器应该是可以容纳特定的对象的(比如你的自定义组件,button等),但是你在它里面画图,,“画图”是对象吗?而专门的绘图容器应该能够接收“画图”动作,并转化为对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询