android xml animated-rotate,Android Drawable介绍

1.Drawable简介

Android系统中将可绘制对象被抽象为Drawable,不同的绘制资源对应着不同的Drawable类型。Android FrameWork提供了常用的Drawable,Android控件的绘制资源基本都是通过Drawable形式实现的。一般情况下,开发者是不会直接接触Drawable的具体实现的,Drawable资源一般都放在res/drawable目录下,用户通过图片,xml格式的Drawable资源来使用。

Android内置的比较常用的Drawable类型包括:ColorDrawable、GradientDrawable、ShapeDrawable、BitmapDrawable、 NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、RotateDrawable、AnimationDrawable、LayerDrawable、LevelListDrawable、StateListDrawable、TransitionDrawable。

2.Drawable 特性

Drawable 比 View 更轻量级,它只是 View 绘制中过程被调用的一个东西(背景,前景)。

自定义 View 的时候,如果只要改变背景的话,最好不要去重写 draw 函数,Drawable 这个类已经被抽象出来负责背景的绘制了。

Drawable 有许许多多的子类,但最复杂的还是 Drawable 本身,作为父类的它要考虑到方方面面。

1).setBounds

最基本的形状是什么,是矩形。

无论 Drawable 最终呈现在画布上是什么形状的,它总是被限定在一个矩形当中。void setBackgroundBounds() {

if (mBackgroundSizeChanged && mBackground != null) {

mBackground.setBounds(0, 0, mRight - mLeft, mBottom - mTop);

mBackgroundSizeChanged = false;

rebuildOutline();

}

}

在绘制背景时,会将 View 的坐标转换为 bounds,所以 Drawable 都会被拉伸至 View 的大小。canvas.drawRect(getBounds(), mPaint);

2).setCallBackpublic static interface Callback {

public void invalidateDrawable(Drawable who);

public void scheduleDrawable(Drawable who, Runnable what, long when);

public void unscheduleDrawable(Drawable who, Runnable what);

}

View 在设置背景时,drawable 会把 callback 指向 View。background.setCallback(this);

Drawable 在需要重绘时,会调用:public void invalidateSelf() {

final Callback callback = getCallback();

if (callback != null) {

callback.invalidateDrawable(this);

}

}@Override

public void invalidateDrawable(@NonNull Drawable drawable) {

if (verifyDrawable(drawabl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值