引用一下ShapeDrawable的类的说明:

java.lang.Object

   ?

android.graphics.drawable.Drawable

 

   ?

android.graphics.drawable.ShapeDrawable

Class Overview

    A Drawable object that draws primitive shapes. A ShapeDrawable takes a Shape object and manages its presence on the screen. 

If no Shape is given, then the ShapeDrawable will default to a RectShape.

    It can be defined in an XML file with the <shape> element. 

file location:

    res/drawable/filename.xml

    The filename is used as the resource ID.

compiled resource datatype:

    Resource pointer to a ShapeDrawable.

resource reference:

    In Java: R.drawable.filename

    In XML: @[package:]drawable/filename

Android中,利用ShapeDrawable来绘制图像,ShapeDrawable可以设置画笔的形状。通过geiPaint方可以得到Paint对象。

利用ShapeDrawable在代码中画图像的步骤如下:

1.       实例化ShapeDrawable对象,并说明绘制的形状;

a)         形状可以是矩形,椭圆,线和环(例如椭圆:)

  1. myShapeDrawable = new ShapeDrawable(new OvalShape());
  2. //得到画笔Paint对象并设置其颜色
  3. myShapeDrawable.getPaint().setColor(Color.GREEN);
  4. myShapeDrawable.setBounds(70,250,150,280);
  5. //绘制图像
  6. myShapeDrawable.draw(canvas);
[java] view
plain
copy

  1. myShapeDrawable = new ShapeDrawable(new OvalShape());
  2. //得到画笔Paint对象并设置其颜色
  3. myShapeDrawable.getPaint().setColor(Color.GREEN);
  4. myShapeDrawable.setBounds(70,250,150,280);
  5. //绘制图像
  6. myShapeDrawable.draw(canvas);

2.       得到画笔对象并设置其颜色;

3.       利用setBounds方法来设置图像显示的区域;

4.       在画布上绘制图像。

当然,也可以使用XML文件来定义画图,就是利用XML文件来定义一个图像。

具体语法如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shape=["rectangle" | "oval" | "line" | "ring"] >
  5. <corners
  6. android:radius="integer"
  7. android:topLeftRadius="integer"
  8. android:topRightRadius="integer"
  9. android:bottomLeftRadius="integer"
  10. android:bottomRightRadius="integer" />
  11. <gradient
  12. android:angle="integer"
  13. android:centerX="integer"
  14. android:centerY="integer"
  15. android:centerColor="integer"
  16. android:endColor="color"
  17. android:gradientRadius="integer"
  18. android:startColor="color"
  19. android:type=["linear" | "radial" | "sweep"]
  20. android:usesLevel=["true" | "false"] />
  21. <padding
  22. android:left="integer"
  23. android:top="integer"
  24. android:right="integer"
  25. android:bottom="integer" />
  26. <size
  27. android:width="integer"
  28. android:height="integer" />
  29. <solid
  30. android:color="color" />
  31. <stroke
  32. android:width="integer"
  33. android:color="color"
  34. android:dashWidth="integer"
  35. android:dashGap="integer" />
  36. </shape>
[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shape=["rectangle" | "oval" | "line" | "ring"] >
  5. <corners
  6. android:radius="integer"
  7. android:topLeftRadius="integer"
  8. android:topRightRadius="integer"
  9. android:bottomLeftRadius="integer"
  10. android:bottomRightRadius="integer" />
  11. <gradient
  12. android:angle="integer"
  13. android:centerX="integer"
  14. android:centerY="integer"
  15. android:centerColor="integer"
  16. android:endColor="color"
  17. android:gradientRadius="integer"
  18. android:startColor="color"
  19. android:type=["linear" | "radial" | "sweep"]
  20. android:usesLevel=["true" | "false"] />
  21. <padding
  22. android:left="integer"
  23. android:top="integer"
  24. android:right="integer"
  25. android:bottom="integer" />
  26. <size
  27. android:width="integer"
  28. android:height="integer" />
  29. <solid
  30. android:color="color" />
  31. <stroke
  32. android:width="integer"
  33. android:color="color"
  34. android:dashWidth="integer"
  35. android:dashGap="integer" />
  36. </shape>

AndroidSDK中定义的规则:

elements:                   

    <shape>

        The shape drawable. This must be the root element.

        attributes:

        xmlns:android

            String. Required. Defines the XML namespace, which must be "http://schemas.android.com/apk/res/android". 

        android:shape

            Keyword. Defines the type of shape. Valid values are:

Value

Desciption

"rectangle"

A rectangle that fills the containing View. This is the default shape.

"oval"

An oval shape that fits the dimensions of the containing View.

"line"

A horizontal line that spans the width of the containing View. This shape requires the <stroke> element to define the width of the line.

"ring"

A ring shape.

矩形"rectangle",椭圆"oval",线"line"和环"ring"

当是线"line"的时候一定要定义<stroke> element

        The following attributes are used only when android:shape="ring":

下面的属性只有在android:shape="ring"时才在有意义

        android:innerRadius

            Dimension. The radius for the inner part of the ring (the hole in the middle),

            as a dimension value or dimension resource.

        android:innerRadiusRatio

            Float. The radius for the inner part of the ring, expressed as a ratio of the ring's width.

             For instance, if android:innerRadiusRatio="5", then the inner radius equals the ring's width divided by 5. 

             This value is overridden by android:innerRadius. Default value is 9.

        android:thickness

            Dimension. The thickness of the ring, as a dimension value or dimension resource.

        android:thicknessRatio

            Float. The thickness of the ring, expressed as a ratio of the ring's width. 

            For instance, if android:thicknessRatio="2", then the thickness equals the ring's width divided by 2. 

            This value is overridden by android:innerRadius. Default value is 3.

        android:useLevel

            Boolean. "true" if this is used as a LevelListDrawable. This should normally be "false" or your shape may not appear.

    <corners>

        Creates rounded corners for the shape. Applies only when the shape is a rectangle.

该属性只有android:shape="rectangle";才有意义

        attributes
:

        android:radius

            Dimension. The radius for all corners, as a dimension value or dimension resource. 

            This is overridden for each corner by the following attributes.

默认情况下四个角的半径,如果为0则表示直角

        android:topLeftRadius

            Dimension. The radius for the top-left corner, as a dimension value or dimension resource.

左上角的半径

        android:topRightRadius

            Dimension. The radius for the top-right corner, as a dimension value or dimension resource.

右上角的半径

        android:bottomLeftRadius

            Dimension. The radius for the bottom-left corner, as a dimension value or dimension resource.

左下角的半径

        android:bottomRightRadius

            Dimension. The radius for the bottom-right corner, as a dimension value or dimension resource.

右下角的半径

        Note: Every corner must (initially) be provided a corner radius greater than 1, or else no corners are rounded. 

        If you want specific corners to not be rounded, a work-around is to use android:radius to 

        set a default corner radius greater than 1, but then override each and every corner with the values you really want, 

        providing zero ("0dp") where you don't want rounded corners.

    <gradient>

        Specifies a gradient color for the shape.

该系列属性对线"line"没有意义。

attributes:

        android:angle

            Integer. The angle for the gradient, in degrees. 0 is left to right, 90 is bottom to top.

            It must be a multiple of 45. Default is 0.

                        颜色的变化方式,0表示从左到右,90表示从下到上,45表示在从左到右和从下到上同时进行

                        发现该属性只有android:type="linear"才有用。

        android:centerX

            Float. The relative X-position for the center of the gradient (0 - 1.0). Does not apply when android:type="linear".

                中心点在x方向上的值,其值为0-1.0

                其x=x0+(x1-x0)*centerX.

                当android:type="linear"时没有意义

        android:centerY

            Float. The relative Y-position for the center of the gradient (0 - 1.0). Does not apply when android:type="linear".

                中间点在y方向上的值,其值为0-1.0

                其y=y0+(y1-y0)*centerY.

                当android:type="linear"时没有意义

        android:centerColor

            Color. Optional color that comes between the start and end colors, as a hexadecimal value or color resource.

       中间点的Color

        android:endColor

            Color. The ending color, as a hexadecimal value or color resource.

        终点的gradient颜色

        android:gradientRadius

            Float. The radius for the gradient. Only applied when android:type="radial".

        中心园的半径,只有当android:type="radial"时有意义

        android:startColor

            Color. The starting color, as a hexadecimal value or color resource.

        起始点gradient的颜色

        android:type

            Keyword. The type of gradient pattern to apply. Valid values are:

            Value    Description

            "linear"     A linear gradient. This is the default.线性

            "radial"     A radial gradient. The start color is the center color.发射型

            "sweep"     A sweeping line gradient.

         gradient有两个或三个颜色值

         startColor 中心区域的颜色

         centerColor 中心区域的外环区域(中间)的颜色。它是可选的。

         endColor 其他区域颜色

         startColor和endColor的使用见实例2

startColor,centerColo和endColor的使用见实例4

        android:useLevel

            Boolean. "true" if this is used as a LevelListDrawable.

            当为LevelListDrawable时其值为true否则为false

    <padding>

        Padding to apply to the containing View element (this pads the position of the View content, not the shape).

         该属性用于设置ShapeDrawable的content区域的Padding。

          ShapeDrawable的content区域用于确定他所在控件的content(通常是文本)的区域

        attributes:

        android:left

            Dimension. Left padding, as a dimension value or dimension resource.

        android:top

            Dimension. Top padding, as a dimension value or dimension resource.

        android:right

            Dimension. Right padding, as a dimension value or dimension resource.

        android:bottom

            Dimension. Bottom padding, as a dimension value or dimension resource.



    <size>

        The size of the shape.



        attributes:



        android:height

            Dimension. The height of the shape, as a dimension value or dimension resource.

该属性对线"line"没有意义。

        android:width

            Dimension. The width of the shape, as a dimension value or dimension resource.



        Note: The shape scales to the size of the container View proportionate to the dimensions defined here, by default.

        When you use the shape in an ImageView, you can restrict scaling by setting the android:scaleType to "center".

    ShapeDrawable的大小

    注意当是线的时候<size>只有android:width属性意义了。

<solid>

        A solid color to fill the shape.

        attributes:

        android:color

            Color. The color to apply to the shape, as a hexadecimal value or color resource.

        <solid>用(a hexadecimal value or color resource)来填充ShapeDrawable,这时gradient属性无意义

    <stroke>

        A stroke line for the shape.

        attributes:

        android:width

            Dimension. The thickness of the line, as a dimension value or dimension resource.

        android:color

            Color. The color of the line, as a hexadecimal value or color resource.

        android:dashGap

            Dimension. The distance between line dashes, as a dimension value or dimension resource. Only valid if android:dashWidth is set.

        android:dashWidth

            Dimension. The size of each dash line, as a dimension value or dimension resource. Only valid if android:dashGap is set.

android:width表示边框线的宽度。边框是向里外同时扩展的。

android:color表示边框线的颜色

android:dashGap表示dash线之间的长度

android:dashWidth表示dash线的长度

注意:当android:shape="line"时必须定义<stroke>。这时ShapeDrawable的边框就只有一个边(line)

This layout XML applies the shape drawable to a View:



    <TextView

        android:background="@drawable/gradient_box"

        android:layout_height="wrap_content"

        android:layout_width="wrap_content" />



    This application code gets the shape drawable and applies it to a View:



    Resources res = getResources();

    Drawable shape = res. getDrawable(R.drawable.gradient_box);



    TextView tv = (TextView)findViewByID(R.id.textview);

    tv.setBackground(shape);

举几个例子:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <gradient
  5. android:startColor="#FF0000FF"
  6. android:centerColor="#FF00FF00"
  7. android:endColor="#FFFF0000"
  8. android:type="radial"
  9. android:gradientRadius="100"
  10. android:angle="90"/>
  11. <padding android:left="0dp"
  12. android:top="0dp"
  13. android:right="0dp"
  14. android:bottom="0dp" />
  15. <corners android:radius="0dp" android:topLeftRadius="0dp"/>
  16. </shape>
  17. 实例2
  18. drawable下的gradient_box.xml
  19. <?xml version="1.0" encoding="utf-8"?>
  20. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  21. android:shape="rectangle">
  22. <gradient
  23. android:startColor="#FF0000FF"
  24. android:endColor="#FFFF0000"
  25. android:type="sweep"
  26. android:angle="90"/>
  27. <padding android:left="0dp"
  28. android:top="0dp"
  29. android:right="0dp"
  30. android:bottom="0dp" />
  31. <corners android:radius="80dp" android:topLeftRadius="10dp"/>
  32. </shape>
  33. 实例3
  34. drawable下的gradient_box.xml
  35. <?xml version="1.0" encoding="utf-8"?>
  36. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  37. android:shape="rectangle">
  38. <gradient
  39. android:startColor="#FF0000FF"
  40. android:centerColor="#FF00FF00"
  41. android:endColor="#FFFF0000"
  42. android:type="sweep"
  43. android:angle="90"/>
  44. <padding android:left="0dp"
  45. android:top="0dp"
  46. android:right="0dp"
  47. android:bottom="0dp" />
  48. <corners android:radius="80dp" android:topLeftRadius="10dp"/>
  49. </shape>
  50. 实例4
  51. stroke的使用
  52. drawable下的gradient_box.xml
  53. <?xml version="1.0" encoding="utf-8"?>
  54. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  55. android:shape="rectangle">
  56. <gradient
  57. android:startColor="#FF0000FF"
  58. android:centerColor="#FF00FF00"
  59. android:endColor="#FFFF0000"
  60. android:type="radial"
  61. android:gradientRadius="100"/>
  62. <padding android:left="0dp"
  63. android:top="0dp"
  64. android:right="0dp"
  65. android:bottom="0dp" />
  66. <corners android:radius="10dp" android:topLeftRadius="0dp"/>
  67. <size
  68. android:width="150dp"
  69. android:height="150dp" />
  70. <stroke
  71. android:width="20dp"
  72. android:color="#FF0000FF"
  73. android:dashWidth="1dp"
  74. android:dashGap="1dp" />
  75. </shape>
  76. 实例5
  77. 椭圆
  78. drawable下的gradient_box.xml
  79. <?xml version="1.0" encoding="utf-8"?>
  80. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  81. android:shape="oval">
  82. <gradient
  83. android:startColor="#FF0000FF"
  84. android:centerColor="#FF00FF00"
  85. android:endColor="#FFFF0000"
  86. android:type="radial"
  87. android:gradientRadius="100"/>
  88. <padding android:left="0dp"
  89. android:top="0dp"
  90. android:right="0dp"
  91. android:bottom="0dp" />
  92. </shape>
  93. 实例6
  94. 线"line"的使用
  95. <?xml version="1.0" encoding="utf-8"?>
  96. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  97. android:shape="line">
  98. <size android:width="300dp"/>
  99. <stroke
  100. android:width="10dp"
  101. android:color="#FF0000FF"
  102. android:dashWidth="1dp"
  103. android:dashGap="1dp" />
  104. </shape>

ShapeDrawable做放大镜效果的更多相关文章

  1. Unity中做放大镜 效果

    孙广东  2015.8.16 事实上和 小地图都几乎相同了. 还是要借助 还有一个相机 目的: 这篇文章的主要目的是  要给你一个想法  怎样做放大境效果 . 在unity中能够简单的实现放大镜效果啊 ...

  2. 基于Jquery的商城商品图片的放大镜效果(非组件)

    在开发商城的时候,往往会用到图片的放大功能,这里把自己在近期项目中使用的放大镜特效做一下总结(非插件). 放大镜效果 常用的js组件jquery.imagezoom,jquery.jqzoom,jqu ...

  3. 照着别人的demo自己试着做了个放大镜效果

    原理: A:放大镜   B:小图片 C:大图片可视区域 D:大图片 鼠标的位置应该在放大镜的中央,所以鼠标位置为:clientX=A.offsetLeft()+B.offsetLeft+1/2*A.o ...

  4. 关于jQuery中实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  5. 原生js实现放大镜效果

    今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...

  6. jQuery实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  7. JS 文本输入框放大镜效果

    JS 文本输入框放大镜效果 今天下午研究了下 "文本输入框放大镜效果" 当然KISSY官网也有这种组件 请看kissy demo 其实这种效果 对于很多童鞋来说 应该并不陌生!我今 ...

  8. WPF设置VistualBrush的Visual属性制作图片放大镜效果

    原文:WPF设置VistualBrush的Visual属性制作图片放大镜效果 效果图片:原理:设置VistualBrush的Visual属性,利用它的Viewbox属性进行缩放. XAML代码:// ...

  9. 使用jquery实现放大镜效果

    原文:使用jquery实现放大镜效果 实现原理 首先,我们讲解一下放大镜效果的实现方式: 方法一:准备一张高像素的大图,当鼠标放到原图上,加载显示大图的对应位置. 方法二:对原图片进行放大,也就是调整 ...

随机推荐

  1. PHP 安装

    PHP 安装 您需要做什么? 为了开始使用 PHP,您可以: 找一个支持 PHP 和 MySQL 的 Web 主机 在您自己的 PC 机上安装 Web 服务器,然后安装 PHP 和 MySQL 使用支 ...

  2. PHP $_POST 变量

    $_POST 变量 预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值. 从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏 ...

  3. SQL Server AlwaysON从入门到进阶(3)——基础架构

    本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本文将更加深入地讲解WSFC所需的核心组件.由于AlwaysOn和FCI都需要基于WSFC之上,因此我们首先要了解在Wind ...

  4. 两个activity之间透明过渡效果和经验

    来看下效果图: 大致效果解释: 1. 当用户点击登录时logo下滑一定距离 2. 下滑后旋转90时 变化图标 3. 继续旋转90度 4. 然后移动到左上角 透明度渐变到上个activity 最后销毁当 ...

  5. RX系列一 | ReactiveX根源 | 观察者模式分析

    RX系列一 | ReactiveX根源 | 观察者模式分析 Rx的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的 ...

  6. 准备在CSDN知识库建立一个Ext JS的知识库

    CSDN近期正在建立一个知识库,目标是打造身边的技术百科全书 ,我觉得这创意挺好,就像stackoverflow一样,常见的问题在里面基本都有了,只要通过搜索就能找到所需的答案. 现在,大家对于Ext ...

  7. Android studio 中引用jar的其实是Maven?(二)

    上一篇:Android studio 中引用jar的其实是Maven?(一) 搭建maven仓库: 去了解一个新的事物的时候,最好的方式就是去使用它.例如去了解一座城市的时候,最好的方式就是乘坐公共交 ...

  8. GitLab服务器IP地址设置

    最近使用GitLab 搭建了Git的私有仓库,但是发现私有仓库的地址居然是localhost,不是本机的IP地址,最后百度了一下,找了很久才找到,特此记录一下. 首先说明一下,我linux虚拟机的IP ...

  9. 剑指Offer——“你最大的缺点是什么”回答技巧及范例

    剑指Offer--"你最大的缺点是什么"回答技巧及范例   问题分析:认识自己的缺点是一个巨大的优点, 当HR问到你缺点的时候, 你的机会来了, 请快展示你的自知之明吧!你想把优点 ...

  10. ubuntu蓝牙音响配对成功但在声音设置中无法设置 解决

    ubuntu蓝牙音响配对成功但在声音设置中无法设置 解决 首先,连接蓝牙 但是,在声音设置中如下: 都没有发现设备??? 打开终端输入: ~$ pactl load-module module-blu ...