[关闭]
@linux1s1s 2017-01-22T16:43:06.000000Z 字数 2569 阅读 2021

Android Shape 初步

AndroidDrawable 2016-06


Shape基础

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shape=["rectangle" | "oval" | "line" | "ring"] > --- 默认为rectangle
  5. <corners -- shape=“rectangle”时使用,
  6. android:radius="integer" -- 半径,会被下边的属性覆盖,默认为1dp
  7. android:topLeftRadius="integer"
  8. android:topRightRadius="integer"
  9. android:bottomLeftRadius="integer"
  10. android:bottomRightRadius="integer" />
  11. <gradient -- 渐变
  12. android:angle="integer"
  13. android:centerX="integer"
  14. android:centerY="integer"
  15. android:centerColor="integer"
  16. android:endColor="color"
  17. android:gradientRadius="integer"
  18. android:startColor="color"
  19. android:type=["linear" | "radial" | "sweep"]
  20. android:useLevel=["true" | "false"] />
  21. <padding
  22. android:left="integer"
  23. android:top="integer"
  24. android:right="integer"
  25. android:bottom="integer" />
  26. <size -- 指定大小,一般用在imageview配合scaleType属性使用。大小一般会适配滴
  27. android:width="integer"
  28. android:height="integer" />
  29. <solid -- 填充颜色,可是是十六进制颜色。(比如想设置半透明效果,直接使用十六就只就OK
  30. android:color="color" />
  31. <stroke -- 指定边框,borderdashWidthdashGap有一个为0dp则为
  32. android:width="integer"
  33. android:color="color"
  34. android:dashWidth="integer" -- 虚线宽度
  35. android:dashGap="integer" /> -- 虚线间隔宽度
  36. </shape>

以上为Shape属性的详细解释,了解上面的属性以后,我们就可以实战了。

Shape实例

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="#FFFFFFFF" />
  4. <corners android:radius="50dp" />
  5. <stroke android:width="1px" android:color="#ff00ee00" />
  6. </shape>

solid 表示 填充颜色 (英文意思是 实心的, 表示填充)
corners 表示半径值 (英文意思是 圆角)
stroke 表示边框的属性,比如边框的宽度,边框的颜色 (英文意思是 在..上划线)

当然中间的Hint和搜索logo是没有的,现在如果加入当用户点击后,边框改变颜色的需求,该如何做?

很明显会在第一时间想到selector

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true">
  4. <shape>
  5. <solid android:color="@android:color/white"/>
  6. <corners android:radius="20dp"/>
  7. <stroke android:width="2dp" android:color="#00ff00"/>
  8. </shape>
  9. </item>
  10. <item >
  11. <shape>
  12. <solid android:color="@android:color/white"/>
  13. <corners android:radius="20dp"/>
  14. <stroke android:width="2dp" android:color="#00aa00"/>
  15. </shape>
  16. </item>
  17. </selector>

但是有些人这么做:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="#FFFFFFFF" />
  4. <corners android:radius="50dp" />
  5. <stroke android:width="1px" android:color="@drawable/test_color_bg_for_shape" />
  6. </shape>

test_color_bg_for_shape.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_focused="true" android:color="#00ff00"/>
  4. <item android:state_checkable="true" android:color="#00ff00"/>
  5. <item android:color="#00ee00"/>
  6. </selector>

试问,这么做可以实现相同的效果吗,为什么?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注