求助,熬了一夜也没搞定,imageview ondraw的onDraw函数问题

查看: 6521|回复: 4
求助 View.ondraw(Canvas)中绘制view
该用户从未签到主题帖子e币
没有eoe的账号,级别还太低,出门如何吹牛逼?
才可以下载或查看,没有帐号?
小弟目前在做一个模仿iphone的tree的组件,其中在我自定义组件中的ondraw方法里想绘制一个android自带的组件,如textview, 可是经过反复研究都没能将该组件显示出来。求各位高手指点,因为这个textview并没有加入到任何的layout中,所以没有经过测绘的过程,我自己曾经那个手动调用过测绘的方法,结果还是没能成功显示。
实例代码如下
& && &&&ondraw(Canvas canvas){
& && && && && &TextView tv = new TextView(this);
& && && && && &tv.setText(&abc&);
& && && && && &tv.draw(canvas);
& && && &}
该用户从未签到主题帖子e币
why tx.draw()?
==&canvas.drawXXX.............
TextView是用来画的?
View的 addView(tv);方法用于添加子View
该用户从未签到主题帖子e币
这个textview想覆盖绘制到我这个自定义的组件上面
该用户从未签到主题帖子e币
顶啊 同问。。
该用户从未签到主题帖子e币
我觉得你还是要看看Android中View和ViewGroup的绘制机制
如果你的自定义View需要绘制其他View,建议继承ViewGroup。这样你只要布局好子View就可以了。要是没特殊需要,基本上不需要自己绘制子View。
推荐阅读热门话题
6771698325254244226213213179170157151139127715
半小时前1&小时前1&小时前1&小时前1&小时前1&小时前1&小时前2&小时前3&小时前3&小时前3&小时前4&小时前4&小时前4&小时前4&小时前4&小时前
特别关注 /3
从基础入门到熟练精通,9个阶段知识体系图指引你逐步提升~还有技术问答+讲师互动,最新实战教程每日更新!
想学Android开发,但没有Java基础?Java体系庞大,不知道从哪学起?专门针对Android开发所需的Java基础教程,学这些,就够了!
eoe专家答疑活动开展至今有段日子了,后续也会继续开展。因此有必要把之前的专家答疑活动都汇总一下,方便大家统一查看和参与。
Powered byMFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系?_百度知道
MFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系?
尽量说得简单些
提问者采纳
一、Invalidate介绍  void Invalidate( BOOL bErase = TRUE );   该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。二、与UpdateWindow( )的区别  UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。为什么需要OnDraw呢,是为了让OnDraw一个函数服务于不同的绘图环境,比如显示器,打印机,绘图仪 ,mfc在调用OnDraw之前会把适当的CDC对象传给OnDraw函数。这样窗口的打印功能就可以和显示共用一个函数。
提问者评价
谢了,你的回答很精彩。
其他类似问题
为您推荐:
其他2条回答
OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。当没有添加WM_PAINT消息处理时,窗口重绘时,由OnDraw来进行消息响应...当添加WM_PAINT消息处理时,窗口重绘时,WM_PAINT消息被投递,由OnPaint来进行消息响应.这时就不能隐式调用OnDraw了.必须显式调用( CDC *pDC=GetDC(); OnDraw(pDC); )..隐式调用:当由OnPaint来进行消息响应时,系统自动调用CView::OnDraw(&pDC).
那Invalidate呢?调用他和OnDraw有什么区别。
Invalidate()只是一个方法,就是立即更新显示的意思。跟UpdateData()使用方法类似。在需要更新显示的位置加Invalidate();就行了~~
invalidate的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁收藏,1.5k 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
问题描述:
同一个activity中有两个fragment,这两个fragment都各自占满屏幕。程序启动时显示fragmentA,点击A中的一个按钮,显示fragmentB,点击B中的一个按钮,再显示fragmentA。
fragmentA中有一个自定义的ImageView,重写了此ImageView的onDraw方法,实现ImageView的重绘。程序启动时,此ImageView重绘效果正常。
问题是,点击B中的按钮,fragmentA第二次显示的时候,调用imageView的invalidate()函数,之后,意外的是onDraw函数并没有得到调用。所以重绘效果也没有出来。
问题可能描述的不是很清楚,但感觉这应该是一个比较常见的android问题,请熟悉android的朋友帮忙解答下,thanks a lot.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
在ImageView的构造函数中加上setWillNotDraw(false);试试
同步到新浪微博
分享到微博?
不要错过该问题的后续解决方案
如果你没找到答案,记得登录关注哦,大家会尽全力帮你解决的 ^___^
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
举报理由:
推广(招聘、广告、SEO 等)方面的内容
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复(请编辑该提问指向已有相同问题)
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:
扫扫下载 App}

我要回帖

更多关于 android imageview 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信