Android-Shape搞起B_ShapeDrawable

作者: MonkeyLei | 来源:发表于2019-07-12 09:35 被阅读10次

Go go go....看下官方文档先https://developer.android.google.cn/reference/android/graphics/drawable/GradientDrawable?hl=zh-cn

A Drawable with a color gradient for buttons, backgrounds, etc.

It can be defined in an XML file with the <shape> element. For more information, see the guide to Drawable Resources.

胡乱拨弄一下: 这是一个给按钮,背景等使用的带颜色渐变的一个Drawable.它可以在xml以shape方式定义。想要看更多信息,看Drawable Resources指导教程。

我的理解就是说这个其实是一个资源对象,你可以去动态创建和使用这个资源对象。当然也可以在布局文件里面以shape的方式去定义它。当然你xml定义了,会去创建 <u style="text-decoration: none; border-bottom: 1px dashed grey;">ShapeDrawable 这种对象来渲染你设置的效果。(暂时就是这么理解哈,,错了再悔过....)</u>

Now,我们到可绘制对象资源 | Android Developers 去看下相关介绍吧。大体看下。。。开始有段介绍,如下:

    可绘制对象资源
可绘制对象资源是一般概念,是指可在屏幕上绘制的图形,以及可以使用 getDrawable(int) 等 API 检索或者应用到具有 android:drawable 和 android:icon 等属性的其他 XML 资源的图形。共有多种不同类型的可绘制对象:

位图文件
位图图形文件(.png、.jpg 或 .gif)。创建 BitmapDrawable。
九宫格文件
具有可拉伸区域的 PNG 文件,允许根据内容调整图像大小 (.9.png)。创建 NinePatchDrawable。
图层列表
管理其他可绘制对象阵列的可绘制对象。它们按阵列顺序绘制,因此索引最大的元素绘制在顶部。创建 LayerDrawable。
状态列表
此 XML 文件为不同状态引用不同位图图形(例如,按下按钮时使用不同的图像)。创建 StateListDrawable。
级别列表
此 XML 文件用于定义管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量。创建 LevelListDrawable。
转换可绘制对象
此 XML 文件用于定义可在两种可绘制对象资源之间交错淡出的可绘制对象。创建 TransitionDrawable。
插入可绘制对象
此 XML 文件用于定义以指定距离插入其他可绘制对象的可绘制对象。当视图需要小于视图实际边界的背景可绘制对象时,此类可绘制对象很有用。
裁剪可绘制对象
此 XML 文件用于定义对其他可绘制对象进行裁剪(根据其当前级别值)的可绘制对象。创建 ClipDrawable。
缩放可绘制对象
此 XML 文件用于定义更改其他可绘制对象大小(根据其当前级别值)的可绘制对象。创建 ScaleDrawable
形状可绘制对象
此 XML 文件用于定义几何形状(包括颜色和渐变)。创建 ShapeDrawable。
另请参阅动画资源文档,了解如何创建 AnimationDrawable。

注:颜色资源也可用作 XML 中的可绘制对象。例如,在创建状态列表可绘制对象时,可以引用 android:drawable 属性的颜色资源 (android:drawable="@color/green")。

以前我们经常用xml,drawable, mipmap等,很少去说关注这个东西最后怎么去渲染的妮? 看上面介绍,应该有了大体的了解....就像Java万物皆为Object一样.....

当然具体的我们可以利用AS简单跟踪下流程:

image image image image image

最后会返回一个Drawable对象处理....当然具体的很多东西目前还不懂。后面空了就稍微仔细分析下渲染流程....所以,现在我们知道xml布局什么的被android解析后做渲染,分别内部做了很多事情就可以了。。

回过头来我们再看下ShapeDrawable,为什么突然想到要看这个。 因为Shape稍微做了总结后突然想到之前修改过一个第三方库的源码(为了实现一个原本的库没有的渐变效果),而它内部绘制用的就是ShapeDrawable来绘制的这种圆角控件....所以就想顺便记录一下。

这个库我们要宣传一下就是FlycoTabLayout_Lib,Flyco大神的...哇咔咔。我还提交了我修改的issue希望可以扩展该效果。

What功能?

image

本来的效果不带渐变

image

我就去下载源码导入模块来使用了。改了下源码,增加了点渐变效果(其实并没有什么的,只是我觉得如增加这样的配置会更方便使用)

image
    //mIndicatorDrawable.setColor(mIndicatorColor);
        ///< @hl 自定义渐变
        if (null == mIndicatorDrawable){
            int colors[] = { Color.parseColor("#28b3ff"), Color.parseColor("#3a91fd")}; ///< @hl 分别为开始颜色,中间夜色,结束颜色
            mIndicatorDrawable = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, colors);
            mIndicatorDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
            mIndicatorDrawable.setGradientCenter(0.02f, 1.0f);
            mIndicatorDrawable.setGradientRadius(180);
        }

So,基本上就是创建GradientDrawable,然后通过相关方法动态设置渐变类型,渐变起点终点,渐变半径,渐变颜色啥的。和xml配置无太大差别。。。

看官方也是提供了很多xml参考属性和相关的方法

image

感觉是不是还可以。又多了解了一些或许自己并不了解的东西.....学习总是需要积累的,不对“积累总是需要不断学习的”.... 有深入的再继续...

相关文章

  • Android-Shape搞起B_ShapeDrawable

    Go go go....看下官方文档先https://developer.android.google.cn/re...

  • Android-Shape搞起来A

    大部分初学者做Android项目基本都是搬效果,搬库,各种搬。基本小点的项目,搬搬也就差不多了。所以一段时候,甚至...

  • Android-Shape

    Android-Shape shape一个用来定义形状的工具,或者说使用画图的,图片用于做背景图。 shape定义...

  • Android-shape属性

    一、shape属性 1.shape属性基本语法: 1)基本属性 Shape可以定义控件的一些展示效果,例如圆角,渐...

  • 搞起

  • 搞起

    不怕告诉你们,我准备来简书混了。

  • Android-Shape标签使用

    前言 工作随笔,方便记起 1.shape的属性 2.shape有6个子标签,各属性如下

  • node搞起

    早就开始研究node,只不过天天在也业务上混,很少有时间搞这个,打算动手就被打断。好了废话不多说了,开始吧!我是m...

  • 搞起来搞起来

    哼哼,我准备实施一个计划,就是一口气码几篇,再定时更新。 因为每天先写先更,我总是心里搁着这事儿,生怕忘了、过点儿...

  • 干起来

    干活干活搞起来!

网友评论

    本文标题:Android-Shape搞起B_ShapeDrawable

    本文链接:https://www.haomeiwen.com/subject/ibiskctx.html