[摘]Android开发之Shape详细解读

Android  2020年6月26日 pm12:18发布4年前 (2020)更新 城堡大人
123 0 0

这篇文章总结得很详细,因此摘抄于此,以便自己查询和学习。

原文如下

日常开发中,我们会遇到一些Button、Textview...等控件的背景是圆角矩形、圆形...等,和android默认的控件背景矩形不一致,此时shape的作用就体现出来了,我们可以根据shape属性画出很多我们意想不到的背景图案,下面我会把所有shape的属性都介绍一下。

shape标签:

android:shape:

rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等

oval: 椭圆形,用得比较多的是画正圆

line: 线形,可以画实线和虚线

ring: 环形,可以画环形进度条

android:tint:

给shape着色

android:tintMode:

着色模式

android:dither:

将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;

值为“false”时则停用抖动。

默认值为 true。

android:visible:

暂时还不清楚控制什么隐藏。

android:useLevel:

如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。

android:thickness:

环的厚度,指内环与外环的环间距。(只适用于shape为ring)

android:thicknessRatio:

浮点型,以环的宽度比率来表示环的厚度,默认为9,表示环的厚度为环的宽度除以9,该值会被android:thickness覆盖(只适用于shape为ring)

android:innerRatio:

内环半径(只适用于shape为ring)

android:innerRadiusRatio:

浮点型,以环的宽度比率来表示内环的半径,默认为3,表示内环半径为环的宽度除以3,该值会被android:innerRadius覆盖(只适用于shape为ring)

shape下size标签:

设置shape宽高值

android:height:高度

android:width:宽度

注意事项:只有控件宽高设置成wrap_content时,此处宽高才起作用,但是起到的却是最小宽高值。也就是说,当控件宽高超过你此处指定的值时,它会变化(wrap_content!!!)

shape下solid标签:

设置形状填充颜色

android:color:指定色值

shape下padding标签:

设置内容与边界的距离

android:left:左内边距

android:top:上内边距

android:right:右内边距

android:bottom:左内边距

shape下corners标签:

设置四个角的圆角

android:radius:       四个角圆角

android:topLeftRadius:   左上角的圆角

android:topRightRadius:   右上角的圆角

android:bottomLeftRadius:  左下角的圆角

android:bottomRightRadiusleft:右下角的圆角

注意事项:radius属性值可以被其他四个属性覆盖。

shape下stroke标签:

设置shape的外边界线

android:color:     边界线的颜色

android:width:    边界线的宽度      

android:dashWidth:  段虚线的宽度(可以将边界线理解成一段段线无间隔的连接)

android:dashGap:   段虚线的间隔

shape下的gradient标签:设置形状渐变

android:type:渐变的类型

    linear:线性渐变,默认的渐变类型
    radial:放射渐变,设置该项时,必须设置android:gradientRadius渐变半径属性
    sweep:扫描性渐变                            

android:angle:渐变的角度,线性渐变时(linear也是默认的渐变类型)才有效,必须是45的倍数,0表示从左到右,90表示从下到上    

android:centerX:渐变中心的相对X坐标,放射渐变时(radial)才有效,在0.0到1.0之间,默认为0.5,表示在正中间  

android:centerY:渐变中心的相对X坐标,放射渐变时(radial才有效,在0.0到1.0之间,默认为0.5,表示在正中间

android:useLevel:如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。

android:startColor:渐变开始的颜色

android:centerColor:渐变中间的颜色

android:endColor:渐变结束的颜色

android:gradientRadius:渐变的半径,只有渐变类型为radial时才使用

至此,所有有关shape属性以及子标签的属性全部介绍完毕。

注释事项

下面让我们看一下,实际应用时候的注意事项

画虚线时,有几点特性必须要知道的:

  1. 只能画水平线,画不了竖线;
  2. 线的高度是通过stroke的android:width属性设置的;
  3. size的android:height属性定义的是整个形状区域的高度;(前提是控件view没有设置layout_height属性值,即为wrap_content)
  4. size的height必须大于stroke的width,否则,线无法显示;(与3同前提,否则就是size的height必须大于控件的height)
  5. 线在整个形状区域中是居中显示的;
  6. 线左右两边会留有空白间距,线越粗,与stroke的dashWidth的值相关。
  7. 引用虚线的view必须添加属性android:layerType,值设为"software",否则显示不了虚线。

画圆环时,有几点特性必须要知道的:

  1. 必须在shape根标签下指定shape的类型为ring。
  2. 默认情况下,innerRadiusRatio值为3,thicknessRatio值为9,但是这两个比率可以分别被innerRadius、thickness覆盖。
  3. 默认情况下,圆环内径是圆环厚度的三倍。
  4. 当只指定了圆环内径或者圆环厚度其中的任何一个属性时,两者之间的3倍关系都将不在存在,另一个属性仍会用默认情况下的值。(画圆环必须同时指定圆环内径和圆环厚度)
  5. 当同时指定了圆环内径和圆环厚度时,那么这两者默认的3倍关系将不存在了,而是按照你指定的属性值画圆环。

来源

  1. Android开发之Shape详细解读

 历史上的今天

  1. 2024: 林语堂:有丰富的心灵才有悠闲的生活(0条评论)
  2. 2023: MediaProvider源码分析(0条评论)
  3. 2021: Android调试,删除adb devices显示的多余设备(0条评论)
  4. 2021: 席慕容 :盼望(0条评论)
  5. 2019: 龙应台:目送(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

删除开机动画bootanimation

推荐使用 读书导航 极客导航 :125啦极客导航(http://www.biumall.com/jike.html)Android开机动画有2种模式,一种是使用两张图片利用某种效果来造成动态,另一种则是用一个图包循环显示的方式来形成动态。当然,这时因为mediaplayer已经起来,播放...

Android Socket之客户端封装

前言之前记录了Android中Socket的简单使用,也就是对数据的简单收发操作。这简单的对Socket客户端进行封装。记录于此,方便自己查阅。正文主要socket通信很多地方用,比他Tbox啊,我们作为客户端进行绑定通信。隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付...

BiuTextView替代TextView

前言Android 高版本后,TextView走马灯耗CPU。使用BiuTextView替代TextView来实现跑马灯。注意,下面测试还要其他应用使用surfaceflinger,所以很高,我们只是对比同一环境下,BiuTextView和TextView跑马灯的情况。正文说明:D...

木心 :至少,每天要看书

不要讲文学是崇高伟大的。文学可爱。大家课后不要放弃文学。文学是人学。至少,每天要看书,开始读书,要浅,浅到刚开始就可以居高临下。一上来听勃拉姆斯第一交响乐,你会淹死。一开始听《圣母颂》、《军队进行曲》,很好。我小时候听这些,后来到杭州听贝多芬的《月光奏鸣曲》,居然完全不懂,对西方,一开始从基督教...

Android触摸事件简单分析

这篇文章以前写的,后来博客清空重新开始了。最近看到,因此摘抄于此,以便查阅。在开始分析之前,大家可以先记几个结论,这样便于理解。  结论1:事件一定是先到达父控件上。  结论2:事件简单来说可以分为三种:Down事件、Move事件、Up事件。PS:(1) 为了让读者看得更清晰,在代码中只打...

[摘]SeekBar的thumbOffset属性

Android的控件SeekBar中有个android:thumbOffset的属性,这个属性的作用是指示thumb(滑块)在拖动条的进度最大值与最小值时相对于拖动条的偏移量。thumbOffset值1、thumbOffset:0px最小值时thumb位置:thumb的最左端与SeekBar的...