关于Android View与Drawable的问题
2013-05-09 13:58
453 查看
原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questions/2497
问题描述:
调用
解决方案:
1:invalidate刷新原理比较复杂
invaliddate=>父view=>Handler=>performTraversals()=>draw()=>onDraw();
2:不是为了省内存,恰恰相反,原生的drawable是共享部份数据才是省内存
其中共享部分就是constant state(常态)
你想啊,N张图片用一个常态,我若想改这个值,如Alpha那么所有图片都变了,就像
变量static变量一样了
而使用mutate以后,会复制constant state,drawable还是共享的,这也算是解决了低于1.5版本的一个"bug"
问题描述:
调用
View.invalidate()方法,就会请求
View重新
draw()。可是我看了
invalidate()与相关的方法,并没有与
draw()有直接的关系。请问
invalidate()是如何使
View重新
draw()的?
Drawable.mutate()方法为了不产生新的对象,直接返回了它自身。既然是这样,那为什么
mutate()以后同一个图像资源能够有不同的常态(比如透明度)?在
BitmapDrawable中在第一次
mutate()的时候新生成一个
BitmapState常态,后面的就是直接返回它自身了。第一次常态对象改变了倒还可以理解,可后面的我就不明白了。求高人解惑,非常感谢!
解决方案:
1:invalidate刷新原理比较复杂
invaliddate=>父view=>Handler=>performTraversals()=>draw()=>onDraw();
/* ============================detail==================================== 其继承的父views cheduleTraversals()方法向Handler发送消息 viewRoot 处理其消息 case DO_TRAVERSAL: performTraversals(); performTraversals()方法,调用private void draw(boolean fullRedrawNeeded) 其中含有 mView.draw(canvas); 接着 if (!dirtyOpaque) onDraw(canvas); */
2:不是为了省内存,恰恰相反,原生的drawable是共享部份数据才是省内存
其中共享部分就是constant state(常态)
你想啊,N张图片用一个常态,我若想改这个值,如Alpha那么所有图片都变了,就像
变量static变量一样了
而使用mutate以后,会复制constant state,drawable还是共享的,这也算是解决了低于1.5版本的一个"bug"
相关文章推荐
- Android关于TextView 宽度过大导致Drawable无法居中问题
- android关于TextView的drawableLeft,drawableTop,drawableRight,drawableRight的drawable大小及位置问题
- 关于Android View与Drawable的问题
- 关于Android Recyclerview隐藏item的所在区域显示大空白问题的解决方案
- Android:关于Viewpager中的Fragment 滑动时保存状态的问题
- 关于android webview js桥(addJavascriptInterface) 失效的问题
- 关于android videoview视频不能匹配整个videoview控件的问题
- ANDROID中使用VIEWFLIPPER类实现屏幕切换(关于坐标轴的问题已补充更改)
- android关于代码中动态设置view的高度宽度的问题
- 关于android 端,人人网以及新浪网 webview 页面缓存问题
- 关于在TextView中设置DrawableLeft,DrawableRight等不显示的问题
- [Android] 关于WebView的内存泄露问题
- 关于android Imageview 圆角圆图处理xutils兼容问题
- 关于Android的View线程安全的问题
- [android|ViewPager]关于ViewPager如何阻止其滑动和一次切换多页闪烁的问题
- Android Tabwidget关于setDividerDrawable不起作用的问题
- android textview drawableleft使用时遇到的问题
- 【TextView】Android TextView显示省略号的问题(关于TextView maxLength 和maxEms的学习)
- 关于Android图片分辨率应该放到哪个文件夹的问题(drawable-hdpi......)
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题