zoukankan      html  css  js  c++  java
  • android:shape标签代码

    前言:就比如我们想给界面跳转的button在界面的边角处用个箭头来代替按钮,使得界面简洁;或者是给TextView加个边框时;

      我们可以通过在drawable文件夹下创建自定义的xml文件,通过shape标签来绘制需要的图案,然后作为组件的背景呈现。

    1、在介绍shape之前,先来对drawable粗糙了解一下。

      如下所示,drawable文件夹主要是一系列用来显示的视觉元素,包括位图、背景渐变等;常用来作为组件的背景使用。

      drawable文件夹下可以存放图片,然后直接作为背景调用;但更多的是在该文件夹下创建xml文件,然后作为背景调用;

      

      1.1、而drawable夹下的xml文件的类型也有许多种,

        比如selector标签,layer-list标签,shape标签、bitmap标签等;并且还可以在一种标签里嵌套另一种标签使用。

        本文主要是对其中的shape标签进行总结。但是shape标签用着用着就搭配上其他标签了,但是本文还是只介绍shape标签。

    2、如下所示是关于shape标签的知识导图。

    3、结合以上思维导图的知识点,附上使用代码。

      四个<shape属性/>分别创建了一个xml文件。

      其中<shape子标签corners、solid、stroke/>主要在rectangle.xml进行举例,<shape子标签gradient、size、padding/>主要在shape_gradient_linear.xml中进行举例。

      然后<子标签gradient/>因为有三种常用渐变方式,所以又单独加了xml举例。

      顺带着在oval.xml中使用到了layerlist和bitmap制作背景。

      3.1、rectangle.xml:包含子标签corners、solid、stroke。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="false">
            <shape android:shape="rectangle">
                <corners android:radius="10dp" />
                <gradient
                    android:type="sweep"
                    android:centerX="1"
                    android:centerY="0.5"
                    android:startColor="@color/colorMediumPurple"
                    android:endColor="@color/colorKhaki1"/>
                <stroke
                    android:width="2dp"
                    android:color="@color/colorMediumPurple"/>
            </shape>
        </item>
    
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <corners android:radius="10dp" />
                <solid android:color="@color/colorThistle" />
                <stroke
                android:width="5dp"
                android:dashWidth="10dp"
                android:dashGap="10dp"
                android:color="@color/colorMediumPurple"/>
            </shape>
        </item>
    </selector>
    <!--使用selector状态选择器,可以设置button点击前后的不同shape-->

        3.2、line.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="line">
        <stroke
            android:width="8dp"
            android:color="@color/colorTomato2"/>
        <size
            android:height="10dp"
            android:width="300dp"/>
    </shape>
    <!-- stroke的width描述stroke的宽度,size的height描述shape的宽度;
         因为stroke属于shape内的标签,所以stroke的宽度要小于shape的高度 -->
    <!--size和组件长宽不同时,显示数值大的-->

      3.3、ring.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="15dp"
        android:thickness="10dp"
        android:useLevel="false">
    
        <gradient
            android:type="sweep"
            android:startColor="@color/colorAccent"
            android:endColor="@color/colorWhite" />
    </shape>
    <!--shape是环形的,所以子标签的属性描述的是环形,而不是环心的空心部分-->
    <!--需要定义内环半径innerRadius和内环厚度thickness-->
    <!--至于属性innerRadiusRatio和thicknessRatio的比例不知道怎么计算-->
    <!--useLevel属性是必要属性,不然不显示,不知道为什么-->

      3.4、oval.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/colorgreen"/>
            </shape>
        </item>
        <item>
            <bitmap
                android:src="@drawable/pic"/>
        </item>
    </layer-list>
    
    <!--layer-list是通过层叠来自定义按钮,最先写的是最底层。-->

    4、主要是演示子标签gradient的三种渐变方式。

      4.1、shape_gradient_linear.xml 。包含子标签gradient、size、padding。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <gradient
                    android:type="linear"
                    android:angle="270"
                    android:startColor="@color/darkGrey"
                    android:endColor="@color/colorRosyBrown1" />
                <size
                    android:width="50dp"
                    android:height="50dp"/>
                <padding
                    android:top="15dp"/>
            </shape>
        </item>
        <!--线性gradient,angle属性只有线性渐变能用-->
    </selector>
        <!--总结:gradient标签使用的三步骤可以概括为先确定type,然后确定位置,最后确定颜色-->
        <!--总结:angle是linear的特有属性,gradientRadius是radial的必要属性-->

      4.2、shape_gradient_raidial.xml 

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <gradient
            android:type="radial"
            android:gradientRadius="50dp"
            android:centerX="0.5"
            android:centerY="0.5"
            android:startColor="@color/colorRosyBrown1"
            android:endColor="@color/colorgreen" />
        <size
            android:width="50dp"
            android:height="50dp"/>
        <!--gradientRadius属性是反射性渐变的半径,是必要属性-->
    </shape>

      4.3、shape_gradient_sweep.xml 

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <gradient
            android:type="sweep"
            android:centerX="0.5"
            android:centerY="0.5"
            android:startColor="@color/colorLightBlue"
            android:endColor="@color/colorRosyBrown1" />
        <size android:width="50dp"
            android:height="50dp"/>
        <!--扫描gradient,先确定类型,然后确定扫描中心点,然后确定颜色-->
    </shape>

      4.4、activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/background"
        tools:context=".MainActivity">
        <TextView
            android:id="@+id/line_name"
            android:text="line"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"/>
        <LinearLayout
            android:id="@+id/line_view"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:orientation="vertical"
            android:layout_below="@id/line_name"
            android:background="@drawable/line">
        </LinearLayout>
    
        <TextView
            android:id="@+id/btns_name"
            android:text="ring、oval、rectangle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/line_view"
            android:gravity="center"/>
        <LinearLayout
            android:id="@+id/btns_shape"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/btns_name"
            android:orientation="horizontal"
            android:gravity="center">
            <Button
                android:id="@+id/btn_ring"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_margin="10dp"
                android:background="@drawable/ring" />
            <Button
                android:id="@+id/btn_oval"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_margin="10dp"
                android:background="@drawable/oval" />
            <Button
                android:id="@+id/btn_rectangle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@drawable/rectangle"/>
        </LinearLayout>
    
        <TextView
            android:id="@+id/gradient_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/btns_shape"
            android:layout_marginTop="80dp"
            android:text="gradient"
            android:gravity="center"/>
        <TextView
            android:id="@+id/gradients_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/gradient_name"
            android:text="linear、radial、sweep"
            android:gravity="center"/>
        <LinearLayout
            android:id="@+id/gradient_btns"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_below="@id/gradients_name"
            android:orientation="horizontal"
            android:gravity="center">
            <Button
                android:id="@+id/btn4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:text="padding"
                android:textColor="@color/colorWhite"
                android:background="@drawable/shape_gradient_linear"/>
            <Button
                android:id="@+id/btn5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@drawable/shape_gradient_radial"/>
            <Button
                android:id="@+id/btn6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@drawable/shape_gradient_sweep"/>
        </LinearLayout>
    
    </RelativeLayout>

    5、最后,附上效果图,源码地址https://github.com/caesura-k/button_activity

  • 相关阅读:
    自定义Bootstrap样式弹出框
    自定义Bootstrap样式弹出框
    Java高级
    Java高级
    Java高级
    Java高级
    与jQuery的感情碰撞——由浅入深学jQuery
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/caesura-k/p/11853368.html
Copyright © 2011-2022 走看看