>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21890 个阅读者 刷新本主题
 * 贴子主题:  Android中shape的使用 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-05-15 11:59:46     消息  查看  搜索  好友  邮件  复制  引用

  
        本人在美工方面一直是比较白痴的,对于一些颜色什么乱七八糟的非常头痛,但是在Android编程中这又是经常涉及到的东西,没办法,只有硬着头皮上。

        Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:

        先看下面的代码:
             <shape>

                 <!-- 实心 -->

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

                <!-- 渐变 -->

                <gradient

                    android:startColor="#ff8c00"

                    android:endColor="#FFFFFF"

                    android:angle="270" />

                <!-- 描边 -->

                <stroke

                    android:width="2dp"

                    android:color="#dcdcdc" />

                <!-- 圆角 -->

                <corners

                    android:radius="2dp" />

                <padding

                    android:left="10dp"

                    android:top="10dp"

                    android:right="10dp"

                    android:bottom="10dp" />

            </shape>

     solid:实心,就是填充的意思

     android:  color指定填充的颜色

    gradient:渐变

    android:  startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度, 必须为45的整数倍。

    另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

    stroke:描边

    android:width="2dp" 描边的宽度,android:color 描边的颜色。

    我们还可以把描边弄成虚线的形式,设置方式为:

    android:dashWidth="5dp"

    android:dashGap="3dp"

    其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

    corners:圆角

    android:radius为角的弧度,值越大角越圆。

    我们还可以把四个角设定成不同的角度,方法为:

    <corners

            android:topRightRadius="20dp"    右上角

            android:bottomLeftRadius="20dp"    右下角

            android:topLeftRadius="1dp"    左上角

            android:bottomRightRadius="0dp"    左下角

     />

    这里有个地方需要注意, bottomLeftRadius是右下 角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。

    还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

    padding:间隔

    这个就不用多说了,XML布局文件中经常用到。

   大体的就是这样,以下是一个使用的具体示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:

                 main.xml:

     <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="TestShapeButton"

        android:background="@drawable/button_selector"

        />

                 button_selector.xml:

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

    <selector

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

        <item android:state_pressed="true" >

            <shape>

                <!-- 渐变 -->

                <gradient

                    android:startColor="#ff8c00"

                    android:endColor="#FFFFFF"

                    android:type="radial"

                    android:gradientRadius="50" />

                <!-- 描边 -->

                <stroke

                    android:width="2dp"

                    android:color="#dcdcdc"

                    android:dashWidth="5dp"

                    android:dashGap="3dp" />

                <!-- 圆角 -->

                <corners

                    android:radius="2dp" />

                <padding

                    android:left="10dp"

                    android:top="10dp"

                    android:right="10dp"

                    android:bottom="10dp" />

            </shape>

        </item>

                    <item android:state_focused="true" >

            <shape>

                <gradient

                    android:startColor="#ffc2b7"

                    android:endColor="#ffc2b7"

                    android:angle="270" />

                <stroke

                    android:width="2dp"

                    android:color="#dcdcdc" />

                <corners

                    android:radius="2dp" />

                <padding

                    android:left="10dp"

                    android:top="10dp"

                    android:right="10dp"

                    android:bottom="10dp" />

            </shape>

        </item>

                    <item>      

            <shape>

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

                <stroke

                    android:width="2dp"

                    android:color="#fad3cf" />

                <corners

                    android:topRightRadius="5dp"

                    android:bottomLeftRadius="5dp"

                    android:topLeftRadius="0dp"

                    android:bottomRightRadius="0dp"

                />

                <padding

                    android:left="10dp"

                    android:top="10dp"

                    android:right="10dp"

                    android:bottom="10dp" />

            </shape>

        </item>

    </selector>

         运行效果如下图:

         一般状态:

         点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

         获得焦点状态:

        点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

         按下状态:

         点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

                                    

----------------------------
原文链接:https://blog.51cto.com/kofi1122/521605

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 sunweiqin 在 2020-05-20 11:21:13 重新编辑]
  Java面向对象编程-->Lambda表达式
  JavaWeb开发-->Web运作原理(Ⅳ)
  JSP与Hibernate开发-->通过JPA API检索数据
  Java网络编程-->安全网络通信
  精通Spring-->绑定表单
  Vue3开发-->绑定CSS样式
  Android基础之用Eclipse搭建Android开发环境和创建第一个And...
  Android自定义组件
  Android开发随想:iPhone和Android之间的对话
  浅析Android的通知系统
  Android网络开发-请求队列-性能提升解决方案
  Android UI学习 - Tab的学习和使用
  Android带有粘性头部的ScrollView
  Android 使用SQLite数据库
  Android多屏幕适配
  Android 消息推送
  Android--Widget开发
  Android SDCard Mount 流程分析
  安卓sqlite和Listview
  Android-商品展示案例
  Android Resource介绍和使用-学习Android
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。