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

  
        本人在美工方面一直是比较白痴的,对于一些颜色什么乱七八糟的非常头痛,但是在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



[这个贴子最后由 flybird 在 2020-01-07 20:00:30 重新编辑]
  Java面向对象编程-->输入与输出(上)
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->持久化层的映射类型
  Java网络编程-->通过JDBC API访问数据库
  精通Spring-->Vue简介
  Vue3开发-->虚拟DOM和render()函数
  Android Gallery实现循环显示图像
  Android在SDcard建文件夹(在Android中移动文件必用)
  通过Https访问的Not trusted Server Certificate的问题的解决...
  Android JSON网络数据交换
  Android开发实践:编译VLC-for-Android
  android实用测试方法之Monkey与MonkeyRunner
  Android定义的路径全局变量
  Android UI学习 - Tab的学习和使用
  Android 解码播放GIF图像
  android 自定义view 实现定制二维码扫描框
  Matrix源码分析
  Android开发学习笔记:Intent的简介以及属性的详解-IT的点点...
  MotionLayout 运动布局入门
  Android无侵入式引导提示-一键式启动
  Android——文章详情页的处理
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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