关于xml自定义形状的一点发现

 

这篇文章应该是前天(2015-4-7)发表的,由于最近项目比较紧,晚上回去的比较晚,所以之前的文章在这里补上,也作为记录之用

PS:话说节后上班第一天就有这么神奇的发现,想想还真是令人兴奋哪大笑

好了,言归正传。抛砖引玉,更多好玩的东西有待各位看官继续研究。 

 关于在xml文件中自定义形状作为按钮背景的用法相信做过一两个正式的app的开发人员应该都是熟悉的,在此简单提下。

   1.layer-list      

    顾名思义,就是层叠的意思,将多个颜色或者图片按照顺序叠加起来,使用方法和引用正常图片一样。具体的例子大家可以百度,有不会的或者不懂的可以留言。虽然我自己用的不多,不过原    理还是理解的。

    基本语法:

      <layer-list xmlns:android="http://schemas.android.com/apk/res/android">     

          <item android:drawable="@android:color/white" />  

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

    </layer-list>  

2.shape

     shape算是笔者在这段时间的工作中用的比较多的了,用法也比较灵活。

     介绍下shape相关的属性:

         1.<shape xmlns:android="http://schemas.android.com/apk/res/android"
                         android:shape="rectangle" >

             通过shape属性设置形状,一共有四个选项rectangle(矩形)、oval(椭圆)、line(线)、ring(圆环)

        2.<corners   android:topLeftRadius="2dp  android:topRightRadius="2dp"
                            android:bottomLeftRadius="2dp"  android:bottomRightRadius="2dp"/>

            在corners标签中设置各个角的圆角半径值,如果都相等的话可以通过radius统一设置。

        3. padding标签与corner类似 设置的是top/left/right/bottom 四个边的padding值。

        4.  stroke 表示边线。可以通过color设置颜色,通过width设置宽度。

        5.  solid   表示填充颜色,相当于背景

        6.  gradient 表示渐变色,可以设置的属性相对较多,一般设置startColor起始颜色,endColor结束时候的颜色,angle表示角度。具体的效果大家可以自己尝试。

简单的介绍到此为止,有问题的可以留言继续讨论。

下面才是重点。

     在开发中遇到这样一种情况:需要设置颜色为循环颜色,当然如果拿图片做背景进行循环也可以,这里提供另外一种思路----GradientDrawable

     官方解释是:A Drawable with a color gradient for buttons, backgrounds, etc.    一张通过颜色渐变实现的图片用来作为按钮或者背景等。

                                  It can be defined in an XML file with the<shape> element.     可以在xml中通过shape元素进行定义。(话说当时看到这句话真的是豁然开朗,犹如醍醐灌顶。)

       没错就是它。在代码中修改属性的也全是靠它完成的。

     比如在drawable文件夹中通过shape标签定义了一个btn_bgxml文件作为按钮的背景,如果修改它的背景颜色的话,也就相当于修改xml中的solid属性,可以通过下面两行代码实现。

       GradientDrawable  drawable = context.getResources().getDrawable(R.drawable.btn_bg);

     drawable.setColor(Color.parseColor(colorList.get(position%colorList.size())));

     其中的colorList就是要循环的颜色列表啦,字符串类型的list。需要说明的是与shape标签对应的是GradientDrawable,与layerList标签对应的是LayerDrawable,不做赘述。

     相信看到这里,大家应该能明白一二了。更多属性和好玩的东西希望大家能够亲自去尝试,去发现。

     再举个例子,如果要实现三个角是圆角一个角是直角的矩形效果的话,也可以采用这种方式。这里留个悬念,大家可以自行尝试。下篇文章会进行解答和说明。

     限于篇幅,本篇文章到此为止,多谢大家细心阅读完~

  

      







 





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泽济天下

你的鼓励是我最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值