android 使用Xml文件定义Shape方式

在res目录下建一个drawable文件夹,注意文件夹名字一定要是drawable,否则在xml模板中你是找不到shape的

下图就通过一个xml文件自定义一个shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">

  <stroke
    android:width="5dp"
    android:color="#1f000000"
     />
  <solid android:color="#FF0000" />

</shape>

下图是布局文件

最后运行的效果如下:

下面这个shape文件,定义一个方形

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

  <stroke
    android:width="0.5dp"
    android:color="#1f000000"
     />
  <solid android:color="#ffffff" />
  <corners android:radius="10dp" />

</shape>

上面的shape的效果如下:

补充知识:AndroidStudio XML文件之shape标签使用详解

前言:

shape标签可以很方便的得到一些矩形、圆、椭圆、圆环,可以实现圆角、渐变,shape编写出来的资源,可以作为View的背景,减少View使用图片作为背景图的概率,从而减少apk体积,相对比图片要更节省内存,shape标签编写出来的资源一般放到drawable文件目录下。

shape标签如何使用:

shpae标签的载体是一个xml文件,一个xml里同时只能存在一个shape标签,在shape标签里声明一些属性和嵌套标签组合起来,可以得到一个视图资源,利用该资源可以填充View的属性

示例:

<!-- 圆环-流线型渐变 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="ring"
  android:innerRadius="20dp"
  android:thickness="6dp"
  android:useLevel="false">
  <size
    android:width="60dp"
    android:height="60dp" />

  <!--扫描渐变shape不能设置角度 #00ff0000 #80ff0000 ffff0000 -->
  <gradient
    android:centerColor="@color/colorCyan"
    android:endColor="@color/colorGreen"
    android:startColor="@color/colorCyanine"
    android:type="sweep" />
</shape>

shape标签里面的属性:

android:shape="XXX"

方型:rectangle,这也是默认的形状
圆型:oval
线形:line
环形:ring,上面示例就为环形

如果android:shape="ring",以下属性定义才会生效:

android:innerRadius : 环内部(中间的孔)的半径,以dp表示
android:innerRadiusRatio : 环内部的半径,浮点型。以环宽度的比率表示。此值被 android:innerRadius覆盖。默认值为 9。
android:thickness : 环的厚度,以dp表示。
android:thicknessRatio : 环的厚度,浮点型。表示为环宽度的比率。此值被 android:innerRadius 覆盖。默认值为 3。
android:useLevel : 布尔值。如果这用作 LevelListDrawable,则此值为“true”。这通常应为“false”,否则形状不会显示。

shape标签里可以嵌套的标签:

solid标签的属性: 用于填充形状的内部颜色

android:color"XX"

corners标签的属性:为形状产生圆角。仅当形状为矩形时适用

android:radius : 所有角都进行圆角处理半径,如果有单独设置某个角,单独设置的优先级最高
android:topLeftRadius : 左上圆角
android:topRightRadius : 右上圆角
android:bottomLeftRadius : 左下圆角
android:bottomRightRadius : 右下圆角

padding标签的属性:内边距

android:left : 左内边距
android:top : 上内边距
android:right :右内边距
android:bottom :下内边距

size标签的属性:形状的大小,可以通过这里来设置形状大小

android:height="XX"
android:width="XX"

stroke标签的属性: 描边,可以是实线也可以是虚线

android:width :线宽
android:color :颜色
android:dashWidth :虚线的间距。仅在设置了 android:dashGap 时有效
android:dashGap : 虚线的厚度大小。仅在设置了 android:dashWidth 时有效

gradient标签的属性:形状渐变颜色

android:angle : 整型。渐变的角度(度)。0 为从左到右,90 为从上到上。必须是 45 的倍数。默认值为 0。
android:centerX : 浮点型。渐变颜色的位置 (0 - 1.0)。
android:centerY : 浮点型。渐变颜色的位置 (0 - 1.0)。
android:centerColor :颜色。起始颜色与结束颜色之间的可选颜色
android:endColor : 颜色。结束颜色
android:gradientRadius : 浮点型。渐变的半径。仅在 android:type="radial" 时适用。
android:startColor : 颜色。起始颜色
android:type :要应用的渐变图案的类型
linear :线性渐变。这是默认值
radial : 径向渐变。起始颜色为中心颜色。
sweep : 流线型渐变

动态创建GradientDrawable并使用:

用shape标签定义的xml,最终都会转化为GradientDrawable对象,所以创建GradientDrawable对象和定义shape文件是一样的

   //创建GradientDrawable
    GradientDrawable gd = new GradientDrawable();
    //对应形状
    gd.setShape(GradientDrawable.RING);
    //对应内部填充颜色
    gd.setColor(Color.parseColor("#FFFF0000"));
    //对应圆角
    gd.setCornerRadius(5);
    //对应xml的stroke
    gd.setStroke(3, Color.parseColor("#FFFF0000"));
    //给某个view使用
    view.setBackgroundDrawable(gd);

    //如果要设置渐变颜色,方法一
    int colors[] = { 0xff255779 , 0xff3e7492, 0xffa6c0cd };//分别为开始颜色,中间夜色,结束颜色
    GradientDrawable gradientDrawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);
    //设置中间渐变颜色的位置
    gradientDrawable.setGradientCenter(1,2);
    //渐变type
    gradientDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
    //动态改变GradientDrawable的属性
    GradientDrawable drawable =(GradientDrawable)view.getBackground();
    drawable.setColor(fillColor); // 设置填充色
    drawable.setStroke(strokeWidth, strokeColor); // 设置边框宽度和颜色
    drawable.setColors(colors);  // 设置渐变颜色数组

把资源文件转换成Java对象:

    GradientDrawable d = (GradientDrawable) context.getResources().getDrawable(R.drawable.loading_shape);
    d.setColors(PublicLibraryStyle.colorThemes);
    bindId(R.id.iv_loading).setBackground(d);

以上这篇android 使用Xml文件定义Shape方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 玩转Android之Drawable的使用

    Drawable天天用,可你是否对Drawable家族有一个完整的认知?今天我们就来系统的学习一下Drawable的使用. 1.概述 用过Drawable的筒子都知道Drawable有很多种,有的时候Drawable是一张图片,有的时候Drawable是我们通过颜色构造出来的某种图形.最常见的自己构造的Drawable图形莫过于ShapeDrawable,我们在开发中可能经常需要自己绘制一个矩形.圆形.椭圆等等各种各样的图形.一般来说,Drawable并没大小的概念(虽然可以通过getIntri

  • android studio xml文件实现添加注释

    即只能在组件布局代码后,或者在组件的前面添加注释. #注释格式: Android的XML文件注释一般采用 <!--注释内容 -->的方式进行 在XML中,形如 <Button /> 的表示方式,其中"/>"的含义表示这个XML中没有内文,他是一个最小组成单元,也就是说他的中间不能包含其他任何< >的代码,所以在<Button />中间注释会出现错误 例如: <?xml version="1.0" encod

  • Android自定义控件样式实例详解

    本文实例讲述了Android自定义控件样式的方法.分享给大家供大家参考,具体如下: Android控件样式自定义是用定义在drawable文件夹下的XML文件实现,在布局文件中通过设置控件的background属性达到效果. 一.控件常见状态:在XML文件中用到了selector节点,selector可以理解为状态切换器,不同的状态下切换不同的样式,各种状态用Item节点表示,以下为一些常见的状态(注意:statelist中第一个匹配当前状态的item会被使用.因此,如果第一个item没有任何状

  • android 使用Xml文件定义Shape方式

    在res目录下建一个drawable文件夹,注意文件夹名字一定要是drawable,否则在xml模板中你是找不到shape的 下图就通过一个xml文件自定义一个shape <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval&

  • Android解析XML的三种方式SAX、Pull、Dom

    在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id=&quo

  • Android实现动态改变shape.xml中图形的颜色

    在Android开发过程中我们常遇到将某个图形的颜色改变(例如用圆点的不同颜色来代表不同的状态) 像这样的需求,一般我们使用android的shape就可以实现,比如 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval&qu

  • Android使用xml文件资源定义菜单实现方法示例

    本文实例讲述了Android使用xml文件资源定义菜单实现方法.分享给大家供大家参考,具体如下: 使用 XML 文件定义菜单 Android 提供了创建菜单的方式,一种是在 Java 代码中创建,一种是使用XML 文件定义.上面的实例都是 Java 创建菜单,在 Java 存在如下大学. 实现效果如下: 具体实现: 一.在 /res 下建立 /menu文件夹 二.在menu文件夹下建立:menu_main.xml: <?xml version="1.0" encoding=&qu

  • Android实现三角形气泡效果方式汇总

    在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡由正三角形和圆角长方形组成,于是可以通过组合来形成三角形气泡的效果,下面我们通过三种方式进行实现. 实现方式: 1.通过.9图进行实现: 2.通过shape方式实现: 3.通过自定义view的方式实现: 实现逻辑: 1.通过.9图进行实现 这种方式就不用说了吧,找你们UI小姐姐切一个.9图,使用即可

  • Android开发教程之shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和selector在美化控件中的作用是至关重要的. 1.Shape 简介 作用:XML中定义的几何形状 位置:res/drawable/文件的名称.xml 使用的方法: Java代码中:R.drawable.文件的名称 XML中:android:background="@drawable/文件的名称&

  • Android使用xml自定义图片实例详解

    Android使用xml自定义图片实例详解 实现效果图: 白色圆角图片 bg_round_rectangle_white.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-

  • Android开发笔记之Android中数据的存储方式(一)

    对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理,有实时性的需求等.

  • android操作XML的几种方法总结

    XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现.其标准型,可靠性,安全性......毋庸置疑.在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件. 小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等. 在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等.

随机推荐