您的位置:首页 > 产品设计 > UI/UE

【Android UI】 Shape详解

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

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

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

先来看两个例子:

view
plainprint?

<shape

xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle">

<gradient android:startColor="#FFFF0000"

android:endColor="#80FF00FF"

android:angle="270" />

<padding android:left="50dp"

android:top="20dp" android:right="7dp"

android:bottom="7dp" />

<corners android:radius="8dp" />

</shape>

效果:



view
plainprint?

<?xml version="1.0" encoding="UTF-8"?>

<shape android:shape="rectangle"

xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="#b4000000" />

<stroke android:width="2.0dip"

android:color="#b4ffffff"

android:dashWidth="3.0dip"

android:dashGap="0.0dip" />

<padding android:left="7.0dip"

android:top="7.0dip" android:right="7.0dip"

android:bottom="7.0dip" />

<corners android:radius="8.0dip" />

</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 -- setCornerRadius 、setCornerRadii

[子节点] solid --

[子节点] stroke -- setStroke

[子节点] size -- setSize

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

==============================

以下一個簡單的單選框樣式:

checkbox_unchecked.xml

<?xml version="1.0" encoding="UTF-8"?>

<shape android:shape="rectangle"

xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="#ffecf6fb" />

<stroke android:width="1.0dip" android:color="#ffb3cad9" />

<!-- <padding android:left="5.0dip" android:top="5.0dip" android:right="5.0dip" android:bottom="5.0dip" /> -->

<size android:height="18.0dip" android:width="18.0dip" />

</shape>

checkbox_checked.xml

<?xml version="1.0" encoding="UTF-8"?>

<layer-list

xmlns:android="http://schemas.android.com/apk/res/android">

<item>

<shape>

<solid android:color="#ffecf6fb" />

<stroke android:width="1.0dip" android:color="#ffb3cad9" />

<padding android:left="5.0dip" android:top="5.0dip" android:right="5.0dip" android:bottom="5.0dip" />

</shape>

</item>

<item>

<shape>

<solid android:color="#ff99c308" />

<padding android:left="5.0dip" android:top="5.0dip" android:right="5.0dip" android:bottom="5.0dip" />

</shape>

</item>

<item>

<shape>

<solid android:color="#ffffffff" />

</shape>

</item>

</layer-list>

selector_checkbox.xml

<?xml version="1.0" encoding="UTF-8"?>

<selector

xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="false" android:drawable="@drawable/checkbox_unchecked" />

<item android:state_checked="true" android:drawable="@drawable/checkbox_checked" />

</selector>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: