drawable源码分析

public abstract void draw(@NonNull Canvas canvas);
----子类需要继承的方法
public void setBounds(int left, int top, int right, int bottom)
----为当前Drawable实例设置一个矩形范围,在draw方法调用时候,Drawable实例将被绘制到这个矩形范围内。
public void setBounds(@NonNull Rect bounds)
----为当前Drawable实例设置一个矩形范围,在draw方法调用时候,Drawable实例将被绘制到这个矩形范围内。
public final void copyBounds(@NonNull Rect bounds)
----将当前Drawable实例通过setBounds设置的绘制范围拷贝到客户端提供的Rect实例中返回
public final Rect copyBounds()
----将当前Drawable实例通过setBounds设置的绘制范围拷贝到客户端提供的Rect实例中返回
public final Rect getBounds()
---- 返回当前Drawable实例的矩形绘制范围。注:返回的矩形就是当前Drawable实际的绘制范围矩形,
-----所以如果是需要一个拷贝的矩形范围,应该调用copyBounds来代替。调用getBounds,你不能修改返回的矩形,
-----会影响Drawable实例。
public Rect getDirtyBounds()
-----返回当前Drawable实例的模糊绘制范围矩形。注:返回的矩形和当前Drawable绘制返回矩形是同一个对象。
public void setChangingConfigurations(@Config int configs)
public @Config int getChangingConfigurations()
public void setDither(boolean dither)
-----当设置为true,该Drawable实例在绘制到一个低于8-bits每单位色值的设备上时候颜色将发生‘抖动’?
public void setFilterBitmap(boolean filter)
public boolean isFilterBitmap()
-----当设置为true,则该Drawable实例在缩放或者旋转时候将对它关联的bitmap进行滤波过滤。可以提升旋转时的绘
-----制效果。如果该Drawable实例未使用bitmap,这个方法无作用。
public @View.ResolvedLayoutDir int getLayoutDirection()
----- 获取当前Drawable实例的布局方向。
public final boolean setLayoutDirection(@View.ResolvedLayoutDir int layoutDirection)
-----设置当前Drawable实例的布局方向。
public boolean onLayoutDirectionChanged(@View.ResolvedLayoutDir int layoutDirection)
-----当调用setLayoutDirection方法,Drawable布局方向发生变化后调用
public abstract void setAlpha(@IntRange(from=0,to=255) int alpha)
public int getAlpha()
-----设置Drawable实例的透明度。0:完全透明 255:完全不透明
public abstract void setColorFilter(@Nullable ColorFilter colorFilter)
public void setColorFilter(@ColorInt int color, @NonNull PorterDuff.Mode mode)
-----为当前Drawable实例设置颜色滤镜
public void setTint(@ColorInt int tintColor)
-----为当前Drawable实例着色
public void setTintList(@Nullable ColorStateList tint)
-----根据ColorStateList对当前Drawable实例进行着色这个一个空方法!!!Drawabld的子类实现了这个方法。
public void setTintMode(@NonNull PorterDuff.Mode tintMode)
-----设置当前Drawable实例着色的过滤模式
public void clearColorFilter()
----- 取消当前Drawable实例的滤镜。
public void setHotspot(float x, float y)
----- 设置当前Drawable实例热点区域的中心点坐标
public void setHotspotBounds(int left, int top, int right, int bottom)
public void getHotspotBounds(@NonNull Rect outRect)
----- 设置当前Drawable实例的热点区域的边界
public boolean isStateful()
------  标示当前Drawable实例的外观是否要根据state进行变更。客户端可以用这个方法判断是否有必要计算
------  state并调用setState。
public boolean setState(@NonNull final int[] stateSet)
public @NonNull int[] getState()
------   为当前Drawable实例设置一个状态值集合。当现有状态和stateSet不同时候,触发onStateChange(stateSet)方法。
public void jumpToCurrentState()
------ 如果当前Drawable实例在执行过渡动画,要求当前实例立即跳转到当前状态并跳过任何正在执行的动画。
public @NonNull Drawable getCurrent()
------  返回当前Drawable实例正在使用的Drawable实例,对于一般单个Drawable,返回值就是自身,对于像StateListDrawable
------  这样的复合Drawable实例,则返回其持有的一个子Drawable实例。
public final boolean setLevel(@IntRange(from=0,to=10000) int level)
ublic final @IntRange(from=0,to=10000) int getLevel()
------  为当前Drawable实例设置图像级别,从0到10000。setLevel使得Drawable实例可以通过一个不断变化的控制器来变
------  更它的图像,例如音量等级或者进度。
public boolean setVisible(boolean visible, boolean restart)
------  设置当前Drawable实例是否可见,并不会影响Drawable实例的行为,但是可以被某些Drawable来控制是否执行动画。
------   例如:AnimationDrawable可以通过这个方法启动或者停止动画,
public void setAutoMirrored(boolean mirrored)
public boolean isAutoMirrored()
------ 设置当前Drawable实例是不是自动被“镜像”/左右对调当它的布局模式是从右到左
public void applyTheme(@NonNull @SuppressWarnings("unused") Theme t)
public boolean canApplyTheme()
------为当前Drawable实例和它的子实例应用指定的主题
public abstract @PixelFormat.Opacity int getOpacity()
------返回当前Drawable实例的透明或者不透明。返回值是其中之一:
------{@link android.graphics.PixelFormat#UNKNOWN}-透明度未知
------{@link android.graphics.PixelFormat#TRANSLUCENT}-半透明
------{@link android.graphics.PixelFormat#TRANSPARENT}-完全透明
------{@link android.graphics.PixelFormat#OPAQUE}-完全不透明
------如果Drawable中的内容可见性不确定,最安全的方是返回TRANSLUCENT/半透明
public @Nullable Region getTransparentRegion()
------ 返回在当前Drawable实例中完全透明的一个区域。这个区域可以用来影响绘制操作,定义当前Drawable实例的目标
------ 在渲染当前Drawable实例时候哪个区域不需要改变。
protected boolean onStateChange(int[] state)
------ 如果子类需要根据state来变更Drawable实例的外观,则需要重写该方法。如果state的变更引起了Drawable实例外
------ 观变化,则返回true,否则返回false;
protected boolean onLevelChange(int level)
------ 如果子类需要根据level来变更Drawable实例的外观,则需要重写该方法。如果level的变更引起了Drawable实例外
------ 观变化,则返回true,否则返回false;
protected void onBoundsChange(Rect bounds)
------ 如果子类实例需要在绘制范围发生变化后变更Drawable实例的外观,则需要重写该方法。
public int getIntrinsicWidth()
public int getIntrinsicHeight()
------ 返回当前Drawable实例的实质宽度。实质宽度是Drawable实例占据的宽度,包含padding值。
------ 如果Drawable实例没有实际宽度,例如是一个颜色,则返回-1
public int getMinimumWidth()
public int getMinimumHeight()
------ 返回当前Drawable建议的最小高度。如果一个View实例用当前Drawable当做背景,那么建议该View实例高度最小为这个值。
public boolean getPadding(@NonNull Rect padding)
------ 将当前Drawable实例的padding值作为参数设置为Recti实例padding的边界值。如果当前实例有padding值,返回true,
------ 否则返回false;当返回false,则Recti实例padding的边界值都设置为0;
public void getOutline(@NonNull Outline outline)
------ 调用此方法获取当前Drawable实例的绘制区域轮廓。这个方法默认被ViewOutlineProvider调用去定义View实例的轮廓。
public @NonNull Drawable mutate()
调用mutate(),使当前Drawable实例mutable,这个操作不可逆。
------ 一个mutable的Drawable实例不会和其他Drawable实例共享它的状态。当你需要修改一个从资源文件加载的Drawable实例时,
------ mutate()方法尤其有用。默认情况下,所有加载同一资源文件生成的Drawable实例都共享一个通用的状态,
------ 如果你修改了其中一个Drawable实例,所有的相关Drawable实例都会发生同样的变化。
public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser,@NonNull AttributeSet attrs, @Nullable Theme theme)
------ 从XML文件中加载Drawable实例,Drawable实例接受主题设置的风格
void inflateWithAttributes(@NonNull @SuppressWarnings("unused") Resources r,
            @NonNull @SuppressWarnings("unused") XmlPullParser parser, @NonNull TypedArray attrs,
            @AttrRes int visibleAttr) throws XmlPullParserException, IOException
------ 从XML文件中加载Drawable实例
@Nullable PorterDuffColorFilter updateTintFilter(@Nullable PorterDuffColorFilter tintFilter,
            @Nullable ColorStateList tint, @Nullable PorterDuff.Mode tintMode)
------ 确保色彩过滤器和当前色彩与色彩模式一致
static @NonNull TypedArray obtainAttributes(@NonNull Resources res, @Nullable Theme theme,
            @NonNull AttributeSet set, @NonNull int[] attrs)
------ 如果主题有效,则从中获取样式属性,如果主题无效,则返回没有样式的资源。
static float scaleFromDensity(float pixels, int sourceDensity, int targetDensity)
------ 根据 原始像素值,资源单位密度和目标设备单位密度 获得一个float像素值
static int resolveDensity(@Nullable Resources r, int parentDensity)
------ /获取单位密度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值