zoukankan      html  css  js  c++  java
  • Android自定义drawable(Shape)详解

    在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来解决。不过这种方式可能需要多个图片,比如一个按钮,需要点击时的式样图片,默认的式样图片。 这样就容易使apk变大。

       那么除了使用drawable这样的图片外,还有其他方法吗?

       本次就谈一下自定义图形shape,Android上支持以下几种属性shape、gradient、stroke、corners、padding、solid等。

    先来看两个例子:

    1. <shape  
    2.     xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:shape="rectangle">  
    4.     <gradient android:startColor="#FFFF0000"  
    5.         android:endColor="#80FF00FF"  
    6.         android:angle="270" />  
    7.     <padding android:left="50dp"  
    8.         android:top="20dp" android:right="7dp"  
    9.         android:bottom="7dp" />  
    10.     <corners android:radius="8dp" />  
    11. </shape>  

    效果:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <shape android:shape="rectangle"  
    3.     xmlns:android="http://schemas.android.com/apk/res/android">  
    4.     <solid android:color="#b4000000" />  
    5.     <stroke android:width="2.0dip"  
    6.         android:color="#b4ffffff"  
    7.         android:dashWidth="3.0dip"  
    8.         android:dashGap="0.0dip" />  
    9.     <padding android:left="7.0dip"  
    10.         android:top="7.0dip" android:right="7.0dip"  
    11.         android:bottom="7.0dip" />  
    12.     <corners android:radius="8.0dip" />  
    13. </shape>  

    效果:

    总结一下Shape的所有子属性,如图:

    简单说明一下:

    gradient   -- 对应颜色渐变。 startcolor、endcolor就不多说了。 android:angle 是指从哪个角度开始变。

    solid      --  填充。

    stroke   --  描边。

    corners  --  圆角。

    padding   -- 定义内容离边界的距离。 与android:padding_left、android:padding_right这些是一个道理。


    上面这些不是本讲重点。 本讲的重点是这些xml中属性,与Java类的对应关系, 以及如何使用Java类写出上面一样的效果!

    首先来看对应关系:

    在官方API介绍中:

    ShapeDrawable :This object can be defined in an XML file with the <shape> element(这个对象可以用<shape>元素在xml文件中定义)

    GradientDrawable :This object can be defined in an XML file with the <shape> element(这个对象可以用<shape>元素在xml文件中定义)

     

     [父节点] shape   --   ShapeDrawable

     [子节点] gradient   --  

     [子节点] padding   --   

     [子节点] corners   --   setCornerRadius 、setCornerRadii 

     [子节点] solid       --    

     [子节点]  stroke   --   setStroke 

     [子节点]  size --   setSize

    发现只有几个是可以对应的~~ 看来通过Java代码来实现上述是行不通的..

  • 相关阅读:
    罗辑思维 140 认钱不认人(刚需是扯淡,一切都是稀缺,人生全是选择)——理性永远都是最珍贵的
    程序最多能new多少内存(2G内存里要放程序的5大区,HeapAlloc比new要快多了,而且超过2G的时候会告诉你)
    Qt中使用ActiveX(3篇)
    windows下的socket网络编程(入门级)
    网络数据包发送工具PacketSender中文源码
    avalon.js实现一个简易日历
    avalonJS入门(一)
    JS中的模块规范(CommonJS,AMD,CMD)
    程序员必看的书
    简单的语音聊天室
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3730568.html
Copyright © 2011-2022 走看看