<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle"
    >
    <stroke android:color="@color/colorBlack"
        android:width="2dp"
        android:dashGap="0dp"
        android:dashWidth="40dp"/>

    <padding android:left="130dp"
        />

    <solid android:color="@color/warning_stroke_color"/>

</shape> 

Android技能树 — Drawable小结,进阶学习资料

<ImageView
        android:id="@+id/logo"
        android:layout_width="300dp"
        android:layout_height="300dp"     
        android:background="@drawable/bg"/> 

Android技能树 — Drawable小结,进阶学习资料

然后我们会发现,what啥都没变啊。其实我们要知道是内容离边界的距离。比如我们这里换成TextView就知道了:

<TextView
        android:id="@+id/logo"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:text="aaaaaaaaaaaaaaaaaaaa"
        android:background="@drawable/sdf"/> 

Android技能树 — Drawable小结,进阶学习资料

文字距离左边padding了130dp了。

  1. 标签的作用: 我们知道图片的话,有自己的固有宽/高,但是像这种ShapeBitmap,没有固有宽/高,getIntrinsicWidth/height获取到的是-1,所以我们如果设置了标签,获取到的就是你设置的值了。
<size 
     android:width="100dp"
     android:height="100dp"/> 
InsetDrawable:

Android技能树 — Drawable小结,进阶学习资料

可以把其他的Drawable内嵌到自己里面,然后在可以设置四周的距离。

比如我们有时候在状态栏处,点击返回按钮,但是美工切图的返回键有点小,直接设置进去,有时候用户按返回键会按不到,一种是把ImageView的宽高设置的大一点,另外一种可以使用这个InsetDrawable

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/back"
    android:insetLeft="20dp"
    android:insetTop="20dp"
    android:insetRight="20dp"
    android:insetBottom="20dp"
    >

</inset> 

<ImageView


我们可以查看设置了`InsetDrawable`和直接设置返回按钮图片的样子:

![](https://s2.51cto.com/images/20210917/1631867942271829.jpg)

##### ScaleDrawable:

![](https://s2.51cto.com/images/20210917/1631867942416355.jpg)

可以缩放的Drawable,效果如下:

![](https://s2.51cto.com/images/20210917/1631867943156996.jpg)

具体的使用可以参考这篇文章:[Android Drawable - Scale Drawable使用详解](

)

##### ClipDrawable:

![](https://s2.51cto.com/images/20210917/1631867944556853.jpg)

可裁剪的Drawable,效果如下:

![](https://s2.51cto.com/images/20210917/1631867944270327.jpg)

具体的使用可以参考这篇文章:[ClipDrawable让开发变得更简单](

)

![](https://s2.51cto.com/images/20210917/1631867945580691.jpg)

#### Drawable集合

![](https://s2.51cto.com/images/20210917/1631867946207690.jpg)

Drawable集合的意思是这些Drawable可以放多个Drawable,比如可以放多个图片资源在里面。

##### LayerDrawable

![](https://s2.51cto.com/images/20210917/1631867946730678.jpg)

它是一种层次化的Drawable集合,通过不同的Drawable放置在不同的层上面达到了叠加后的效果。并且下面的item覆盖上面的item。

![](https://s2.51cto.com/images/20210917/1631867947119324.jpg)

比如这个图片上的搜索框:

![](https://s2.51cto.com/images/20210917/1631867948501831.jpg)

我们可以使用LayerDrawable来实现,只需要把中间的放大镜和文字变成一个图片,比如

![](https://s2.51cto.com/images/20210917/1631867949340644.jpg)

然后背景为:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="
http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<corners android:radius="20dp"/>
<solid android:color="@color/colorWhite"/>

</shape>


![](https://s2.51cto.com/images/20210917/1631867952950765.jpg)

最后使用LayerDrawable:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android”&gt;

<item
    android:drawable="@drawable/search_bg"/>

<item android:drawable="@drawable/search"
    android:right="60dp"
    android:left="60dp"
    android:top="10dp"
    android:bottom="10dp"
    />

</layer-list>



效果图为:

![](https://s2.51cto.com/images/20210917/1631867953151560.jpg)

具体可以参考以下文章:

[Android Drawable - Layer Drawable使用详解](

)

[layer-list -- layer-list的基本使用介绍](

)

### 最后

**我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!**
以下是总结出来的**字节经典面试题目**,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

# **字节高级Android经典面试题和答案**

![](https://s2.51cto.com/images/20210917/1631867953362941.jpg)
![](https://s2.51cto.com/images/20210917/1631867954670995.jpg)

**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://ali1024.coding.net/public/P7/Android/git)**