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类写出上面一样的效果!

首先来看对应关系:

父节点 shape   --   ShapeDrawable

[子节点] gradient   -- 

[子节点] padding   --  

[子节点] corners   --   setCornerRadiussetCornerRadii

[子节点] solid       --   

[子节点]  stroke   --   setStroke

[子节点]  size --   setSize

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

暂时研究到这, 如果有实现的朋友,希望可以留言指点,非常感谢。


附件对android.graphics.drawable.Drawable包下的类进行了一下总结。 包括类与XML属性的对应关系。 感觉很不错! 需要的各位可以学习一下。

下载地址:  http://download.csdn.net/source/3251635

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值