android,View不能自己写一个myPaint方法在子线程中画图吗

问个幼稚的问题,就是在surfaceView里面可以新开一个线程并且在子线程里面调用自己写的onPaint方法来实现独立画图,为什么在继承View的类MyView里面不能... 问个幼稚的问题,就是在surfaceView里面可以新开一个线程并且在子线程里面调用自己写的onPaint方法来实现独立画图,为什么在继承View的类MyView里面不能在新开的线程里面也写个onPaint方法来实现画图呢,而是必须用它的onDraw呢
是因为holder = getHolder();这个方法么
展开
 我来答
JulioHu706
2014-06-23 · TA获得超过653个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:428万
展开全部
不可以,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上面的。假如是开启子线程来播放媒体文件,那么开启子线程就非常必要了。
北斗星444
2014-06-22 · TA获得超过118个赞
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:80.3万
展开全部
surfaceView是专用的绘图容器,你自定义的继承自view的不是
追问
在surfaceView里面也是自定义一个画图的方法onPaint(),在新的线程里面

我以同样的方法来通过View实现,试过了不行,只能调用它自己的onDraw()
追答
我想view作为一种容器应该是可以容纳特定的对象的(比如你的自定义组件,button等),但是你在它里面画图,,“画图”是对象吗?而专门的绘图容器应该能够接收“画图”动作,并转化为对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式