• DataPath实现渐变效果


            Android的vector矢量图很好用,可以画出保证清晰度的任意图形。但是Android Nougat之前的VectorDrawable不支持渐变色,如果要使用渐变色就要使用png图片或者自定义GradientDrawable。这么明显的不足,肯定是要修补上呀,API 24中的VectorDrawable可以支持了gradient了。

            下面是我用vector画的渐变图形,linear、radical、sweep三种形式的渐变都画了。使用vector画渐变,总体就是设置渐变类型、渐变开始和结束颜色、渐变位置坐标即可。其中线性渐变要设置startX,startY坐标、endX,endY坐标,并且根据这两个坐标就可以确定渐变方向;放射性渐变需要设置centerX和centerY坐标以及渐变半径;扫描性渐变只需要设置centerX和centerY坐标即可。如果需要多种颜色渐变,则添加item,设置颜色和偏移量(从0到1)即可。

        

    代码如下:

    1. <vector xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:aapt="http://schemas.android.com/aapt"
    3. android:width="24dp"
    4. android:height="24dp"
    5. android:viewportWidth="28"
    6. android:viewportHeight="28">
    7. <!-- linear 线性渐变 -->
    8. <path android:pathData="M0,0h6v6h-6z">
    9. <aapt:attr name="android:fillColor">
    10. <gradient
    11. android:endColor="#ff0000"
    12. android:endX="0"
    13. android:endY="0"
    14. android:startColor="#00ff00"
    15. android:startX="6"
    16. android:startY="6"
    17. android:type="linear" />
    18. </aapt:attr>
    19. </path>
    20. <path android:pathData="M0,7h6v6h-6z">
    21. <aapt:attr name="android:fillColor">
    22. <gradient
    23. android:endColor="#ff0000"
    24. android:endX="0"
    25. android:endY="7"
    26. android:startColor="#00ff00"
    27. android:startX="0"
    28. android:startY="13"
    29. android:type="linear" />
    30. </aapt:attr>
    31. </path>
    32. <path android:pathData="M0,14h6v6h-6z">
    33. <aapt:attr name="android:fillColor">
    34. <gradient
    35. android:endColor="#ff0000"
    36. android:endX="6"
    37. android:endY="14"
    38. android:startColor="#00ff00"
    39. android:startX="0"
    40. android:startY="14"
    41. android:type="linear" />
    42. </aapt:attr>
    43. </path>
    44. <path android:pathData="M0,21h6v6h-6z">
    45. <aapt:attr name="android:fillColor">
    46. <gradient
    47. android:endColor="#ff0000"
    48. android:endX="0"
    49. android:endY="27"
    50. android:startColor="#00ff00"
    51. android:startX="0"
    52. android:startY="21"
    53. android:type="linear" >
    54. <item
    55. android:color="#00ff00"
    56. android:offset="0.0" />
    57. <item
    58. android:color="#0000ff"
    59. android:offset="0.5" />
    60. <item
    61. android:color="#ff0000"
    62. android:offset="0.5" />
    63. <item
    64. android:color="#ffff00"
    65. android:offset="1.0" />
    66. </gradient>
    67. </aapt:attr>
    68. </path>
    69. <!-- radial 放射性渐变 -->
    70. <path android:pathData="M7,5a1,1 0 0 1 10,0a1,1 0 0 1 -10,0">
    71. <aapt:attr name="android:fillColor">
    72. <gradient
    73. android:centerX="12"
    74. android:centerY="5"
    75. android:endColor="#ff0000"
    76. android:gradientRadius="5"
    77. android:startColor="#00ff00"
    78. android:type="radial" />
    79. </aapt:attr>
    80. </path>
    81. <path android:pathData="M18,5a1,1 0 0 1 10,0a1,1 0 0 1 -10,0">
    82. <aapt:attr name="android:fillColor">
    83. <gradient
    84. android:centerX="23"
    85. android:centerY="5"
    86. android:endColor="#ff0000"
    87. android:gradientRadius="5"
    88. android:startColor="#00ff00"
    89. android:type="radial" >
    90. <item
    91. android:color="#00ff00"
    92. android:offset="0.0" />
    93. <item
    94. android:color="#ff0000"
    95. android:offset="0.2" />
    96. <item
    97. android:color="#ffff00"
    98. android:offset="0.4" />
    99. </gradient>
    100. </aapt:attr>
    101. </path>
    102. <!-- sweep 扫描性渐变 -->
    103. <path android:pathData="M7,16a1,1 0 0 1 10,0a1,1 0 0 1 -10,0">
    104. <aapt:attr name="android:fillColor">
    105. <gradient
    106. android:centerX="12"
    107. android:centerY="16"
    108. android:endColor="#ff0000"
    109. android:startColor="#00ff00"
    110. android:type="sweep" />
    111. </aapt:attr>
    112. </path>
    113. <path android:pathData="M18,16a1,1 0 0 1 10,0a1,1 0 0 1 -10,0">
    114. <aapt:attr name="android:fillColor">
    115. <gradient
    116. android:centerX="23"
    117. android:centerY="16"
    118. android:endColor="#ff0000"
    119. android:startColor="#00ff00"
    120. android:type="sweep" >
    121. <item
    122. android:color="#00ff00"
    123. android:offset="0.0" />
    124. <item
    125. android:color="#ff0000"
    126. android:offset="0.2" />
    127. <item
    128. android:color="#ffff00"
    129. android:offset="0.4" />
    130. </gradient>
    131. </aapt:attr>
    132. </path>
    133. <path android:pathData="M9,22h6v6h-6z">
    134. <aapt:attr name="android:fillColor">
    135. <gradient
    136. android:centerX="12"
    137. android:centerY="25"
    138. android:endColor="#ff0000"
    139. android:startColor="#00ff00"
    140. android:type="sweep" />
    141. </aapt:attr>
    142. </path>
    143. <path android:pathData="M20,22h6v6h-6z">
    144. <aapt:attr name="android:fillColor">
    145. <gradient
    146. android:centerX="23"
    147. android:centerY="25"
    148. android:endColor="#ff0000"
    149. android:startColor="#00ff00"
    150. android:type="sweep" >
    151. <item
    152. android:color="#00ff00"
    153. android:offset="0.0" />
    154. <item
    155. android:color="#ff0000"
    156. android:offset="0.4" />
    157. <item
    158. android:color="#ffff00"
    159. android:offset="0.4" />
    160. <item
    161. android:color="#00ffff"
    162. android:offset="1" />
    163. </gradient>
    164. </aapt:attr>
    165. </path>
    166. </vector>

  • 相关阅读:
    客户端架构
    Helloworld 驱动模块加载
    云存储架构框架设计 | 最佳实践
    Python+高光谱数据预处理-机器学习-深度学习-图像分类-参数回归
    前端技能树,面试复习—— 模拟题+真题系列(2): 单例模式 | 大文件上传 | SSR 原理 | 收集依赖 | HOOK 原理 | Worker 等等
    LeetCode42:接雨水
    Leetcode1128. 等价多米诺骨牌对的数量
    在nodejs中实现双重身份验证机制
    get请求接收JSON格式数据
    linux 安装docker
  • 原文地址:https://blog.csdn.net/Ryfall/article/details/133794464