Drawable在我们平常的开发中,根本都会用到。但它到底是什么呢?引用代码的内里解释:
可以或许在canvas上绘制的一个东西。而且相比于View,并不必要measure,layout,仅仅只要去思量怎样draw。
1 自界说Drawable时间,相比View来说,它属于轻量级的,利用也简单,以后当我们自界说一个效果的时间,可以改变一下头脑,在思量自界说View的时间,也思量下自界说Drawable能不能实现必要的效果。
2 它是一个抽象类,它仅仅是处置惩罚可以画的东西,不像View,她没有吸收事故跟用户交互的机制。
3 图片作为 View 的配景,淘汰 apk 的体积(淘汰 apk 体积最明显最有用的步调就是去掉图片)
4 图片耗内存,利用 Drawable 节流内存,Android 自己对 Drawable 做了很好的优化(内存优化必要思量)
一样平常情况下,除了直接利用放在Drawable下的图片,实在的Drawable的用法都和xml有关,我们可以利用shape,layer-list等标签绘制一些配景,还可以通过selector标签实现View的状态效果,当然我们自己也照旧可以自界说Drawable状态的。
我们的每个标签都对应于一个真正的实体类,关系如下:
下面我们来自界说Drawable来实现圆角图片,圆形图片。而且更加简单,高效,利用范围更广(可以作为任何View的配景)。
焦点代码就是:
canvas.drawRoundRect(mRectF, 100, 100, mPaint);
mRectF是在setBounds方法内里赋值的,mPaint是在构造方法内里通过BitmapShader构造赋值的。
当自界说圆形Drawable的写法:
焦点代码就是canvas.drawCircle(mWidth /2, mWidth /2, mWidth /2, mPaint);
mWidth取的是图片宽高最小的谁人,mPaint就是构造方法利用BitmapShader赋值的,BitmapShader又是通过当我们利用drawable时间传bitmap已往创建的。
总结:本篇重要是想学习自界说Drawable,学会自界说drawable,偶然在自界说View时间有这么个意识,我们代码会写的更加优雅。 |