Drawable之ShapeDrawable

本文详细介绍了ShapeDrawable的概念及其在XML文件中的定义方式,并提供了在Java代码中实例化的示例。ShapeDrawable能够灵活地控制图形的显示状态,包括位置、圆角、渐变效果及颜色等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ShapeDrawable:用于传入一个形状shape用来控制管理该形状在屏幕上的显示状态(位置,圆角,渐变,颜色等)如未传入形状则默认为矩形

  • 1.在XML文件中定义shapeDrawable,res/drawable/下新建一个XML文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="oval"
       android:useLevel="false">//是否作为LevelListDrawable(等级列表图片,每个图片都有一个android:maxlevel大于或等于setlevel的值时就会被现实,如充电的动态图)使用,一般设置为false
       <!--传入管理的形状取值为["rectangle"(默认形状)矩形 | "oval"椭圆形 | "line"直线 | "ring"环形],在XML中只能传入这三种形状-->


    <!--corners 圆角,只有当shape是rectangle时才有效-->
    <corners
        android:bottomLeftRadius="5dp"//左上角的圆角半径
        android:bottomRightRadius="5dp"//右上角的圆角半径
        android:topLeftRadius="5dp"//左下角的圆角半径
        android:topRightRadius="5dp"//右下角的圆角半径
        android:radius="5dp"/>//所有角的圆角半径,可被分别制定的圆角半径覆盖

    <!--gradient指定shape的渐变色-->
    <gradient
        android:type="radial"//渐变类型linear(线性渐变),"radial"(径向渐变),"sweep"(扫描性渐变)
        android:angle="90"//渐变的角度水平为0,垂直为90,必须是45的整数倍数,默认为0
        android:centerX="0f"//相对于渐变中心的X方向的位置取值范围(0f,1f)
        android:centerY="0f"//相对于渐变中心的Y方向的位置取值范围(0f,1f)
        android:startColor="#FF00FF00"//渐变起始颜色(颜色模式为ARGBandroid:centerColor="#FF0000FF"//渐变中间过渡颜色
        android:endColor="#FFFF0000"//渐变结束颜色
        android:gradientRadius=""/>//渐变半径,当渐变类型为radial(径向渐变)时才有效


    <!--padding 设置视图内容与形状边界的内间距-->
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp"/>
    <!--size形状shape的宽高-->
    <size
        android:height="300dp"
        android:width="200dp"/>

    <!--solid形状shape的单色填充色-->
    <solid
        android:color="#FF00ff00"/>

    <!--storke 形状shape的描边-->
    <stroke
        android:color=""//描边颜色
        android:width=""//描边宽度
        android:dashGap=""//虚线描边的各小线段之间的距离,只有与dashwidth合用才有效
        android:dashWidth=""/>//虚线描边的宽度,只有与dashwidth合用才有效
</shape>
  • 2.在代码中实例化XML中的shapeDrawable
 Drawable drawable = getResources().getDrawable(R.drawable.cricle_drawable);//实例化drawable
 textView.setBackground(drawable);//将Drawable作为View的background
  • 3.在Java中直接定义ShapeDrawable
OvalShape circle = new OvalShape();//新建一个圆形(可以是ArcShape(弧形),OValShape(圆形),RectShape,RoundRectShape(圆角矩形))
float mDensity = getContext().getResources().getDisplayMetrics().density;//获得显示屏幕的分辨率
circle.resize(50 * mDensity, 50 * mDensity);//更改圆形的大小
ShapeDrawable shapeDrawable = new ShapeDrawable(circle);//新建一个ShapeDrawable,将圆形传入进去
shapeDrawable.draw(canvas)//将shapeDrawable在画布上画出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值