ShapeDrawable做放大镜效果

简介: 引用一下ShapeDrawable的类的说明:   java.lang.Object    ? android.graphics.drawable.Drawable      ? android.graphics.drawable.ShapeDrawable Class Overview

引用一下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>  
  37.    
[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>  
  37.    

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>  
目录
相关文章
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
94283 33
超详细Netty入门,看这篇就够了!
|
11月前
|
SQL 编解码 搜索推荐
R中单细胞RNA-seq分析教程 (10)
R中单细胞RNA-seq分析教程 (10)
|
Android开发
Android 数据传递的几种方式,HttpLoggingInterceptor消息拦截器
Android 数据传递的几种方式,HttpLoggingInterceptor消息拦截器
|
XML Android开发 数据格式
android 9 Systemui 动态隐藏导航栏
android 9 Systemui 动态隐藏导航栏
457 0
|
机器学习/深度学习 人工智能 自动驾驶
构建未来:AI技术在智能交通系统中的应用
【5月更文挑战第20天】 随着人工智能技术的飞速进步,其在现代交通系统中的应用日益广泛,从智能导航到自动车辆调度,AI正逐步改变我们的出行方式和交通管理。本文深入探讨了AI技术在智能交通系统中的多种应用,分析了其提升交通效率、增强安全性及减少环境影响的潜在能力。同时,讨论了实施这些技术所面临的挑战和未来的发展方向,为读者提供了一个关于AI如何塑造未来交通网络的全面视角。
|
机器学习/深度学习 并行计算 编译器
AVX 指令集简介及其与 SSE 的对比
本文介绍了AVX指令集在高性能计算中的重要性,它是Intel于2011年推出的一种SIMD技术,扩展了SSE指令集,将向量宽度增至256位,支持更多数据类型和浮点精度控制。主要差异包括向量宽度、数据类型扩展、指令集增加和精度控制。文中通过C代码示例展示了如何使用AVX进行向量加法。AVX对科学计算、图像处理和机器学习等领域提供了显著的性能提升。编译时需确保编译器支持AVX标志。
|
XML 存储 测试技术
Android系统 添加动态控制SystemUI状态栏、导航栏和下拉菜单
Android系统 添加动态控制SystemUI状态栏、导航栏和下拉菜单
3272 2
|
网络协议 C语言
【开源视频联动物联网平台】libmodbus库写一个Modbus TCP客户端
【开源视频联动物联网平台】libmodbus库写一个Modbus TCP客户端
310 0
|
Prometheus 监控 Cloud Native
SpringBoot3 整合Prometheus + Grafana
SpringBoot3 整合Prometheus + Grafana
SpringBoot3 整合Prometheus + Grafana

热门文章

最新文章