我是靠谱客的博主 魁梧学姐,最近开发中收集的这篇文章主要介绍自定义Selector篇,改变样式,绘制图案和背景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有些时候需要对一些控件的样式进行自定义,但是控件自带的属性修改的效果并不理想,这就需要我们自定义一些样式去修改控件样式,下面介绍自定义样式的方法。

以Button为例,我们可以修改Button的形状,颜色,圆角,甚至是渐变色,下面一一介绍。

  • 首先,在drawable资源文件夹里新建一个style.xml的资源文件,res/drawable右键/new/Drawable resource file/命名为style/ok,即可。

  • 下面我们看一下selector下面的item的各个属性:

    属性解释
    android:color颜色值
    android:state_pressed是否可以触摸
    android:state_focused是否能获取焦点
    android:state_hovered鼠标(指针)移动到该位置时是否触发事件
    android:state_checkable“true”表示可勾选状态时使用;“false”表示非可 勾选状态使用、(只对能切换可勾选—非可勾选的构件有用
    android:state_checked“true”表示已经被勾选状态时;“false”表示没有被勾选状态使用、(只对能切换可勾选—非可勾选的构件有用
    android:state_first
    android:state_middle
    android:state_last
    android:state_activated-true 被激活时显示图片 ;false未激活时图片
    android:state_active被激活的条件,true为可以被激活,false是不可以被激活
    android:state_selected是否被选择状态
    android:drawable如果引用的话,selector必须是一个@drawable引用,代码中也必须是R.drawable
    android:state_window_focused是否窗口聚焦
    android:state_accelerated硬件加速为true的图片
    android:state_enabled是否可用,不可用状态则不可对其操作
    android:state_singletrue 只有一个元素显示图片
    android:state_drag_can_accepttrue 能够drop 或者 drag 时图片

下面代码可以用于Button的点击效果样式的改变

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 当前窗口失去焦点时 -->
    <item android:color="@android:color/black" android:state_window_focused="false" />
    <!-- 不可用时 -->
    <item android:color="@android:color/background_light" android:state_enabled="false" />
    <!-- 按压时 -->
    <item android:color="@android:color/holo_blue_light" android:state_pressed="true" />
    <!-- 被选中时 -->
    <item android:color="@android:color/holo_green_dark" android:state_selected="true" />
    <!-- 被激活时 -->
    <item android:color="@android:color/holo_green_light" android:state_activated="true" />
    <!-- 默认时 -->
    <item android:color="@android:color/white" />
</selector>
  • shape的属性
    android:shape=[“rectangle” | “oval” | “line” | “ring”]
    shape的形状,默认为矩形,可以设置为矩形(rectangle)、椭圆形(oval)、线性形状(line)、环形(ring)
    下面的属性只有在android:shape=”ring”时可用:

    • android:innerRadius 尺寸,内环的半径。

    • android:innerRadiusRatio 浮点型,以环的宽度比率来表示内环的, 例如,如果android:innerRadiusRatio,表示内环半径等于环的宽度除以5,这个值是可以被覆盖的,默认为9.

    • android:thickness 尺寸,环的厚度

    • android:thicknessRatio 浮点型,以环的宽度比率来表示环的厚度,例如,如果android:thicknessRatio=”2”,
      那么环的厚度就等于环的宽度除以2。这个值是可以被 android:thickness覆盖的,默认值是3.

    • android:useLevel boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.

  • corners 圆角设置

    • android:radius 整型 半径
    • android:topLeftRadius 整型 左上角半径
    • android:topRightRadius 整型 右上角半径
    • android:bottomLeftRadius 整型 左下角半径
    • android:bottomRightRadius 整型 右下角
  • gradient 渐变色

    • android:startColor 颜色值 起始颜色

    • android:endColor 颜色值 结束颜色

    • android:centerColor 整型 渐变中间颜色,即开始颜色与结束颜色之间的颜色

    • android:angle 整型 渐变角度(PS:当angle=0时,渐变色是从左向右。 然后逆时针方向转,当angle=90时为从下往上。angle必须为45的整数倍)

    • android:type [“linear” | “radial” | “sweep”] 渐变类型(取值:linear、radial、sweep)

    • linear 线性渐变,这是默认设置

    • radial 放射性渐变,以开始色为中心。

    • sweep 扫描线式的渐变。
      这里写图片描述

    • android:useLevel [“true” | “false”] 如果要使用LevelListDrawable对象,就要设置为true。设置为true无渐变。false有渐变色

    • android:gradientRadius 整型 渐变色半径.当 android:type=”radial” 时才使用。单独使用 android:type=”radial”会报错。

    • android:centerX 整型 渐变中心X点坐标的相对位置

    • android:centerY 整型 渐变中心Y点坐标的相对位置

  • padding 内边距,即内容与边的距离

    • android:left 整型 左内边距
    • android:top 整型 上内边距
    • android:right 整型 右内边距
    • android:bottom 整型 下内边距
  • size 大小

    • android:width 整型 宽度
    • android:height 整型 高度
  • solid 填充

    • android:color 颜色值 填充颜色
  • stroke 描边

    • android:width 整型 描边的宽度

    • android:color 颜色值 描边的颜色

    • android:dashWidth 整型 表示描边的样式是虚线的宽度, 值为0时,表示为实线。值大于0则为虚线。

    • android:dashGap 整型 表示描边为虚线时,虚线之间的间隔 即“ - - - - ”

简单代码示例

<shape shape="要绘制的形状" >

    <!-- 圆角 -->
    <corners
        android:radius="9dp"
        android:topLeftRadius="2dp"
        android:topRightRadius="2dp"
        android:bottomLeftRadius="2dp"
        android:bottomRightRadius="2dp"/><!-- 设置圆角半径 -->

    <!-- 渐变 -->
    <gradient
        android:startColor="@android:color/white"
        android:centerColor="@android:color/black"
        android:endColor="@android:color/black"
        android:useLevel="true"
        android:angle="45"
        android:type="radial"
        android:centerX="0"
        android:centerY="0"
        android:gradientRadius="90"/>

    <!-- 间隔 -->
    <padding
        android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp"/><!-- 各方向的间隔 -->

    <!-- 大小 -->
    <size
        android:width="50dp"
        android:height="50dp"/><!-- 宽度和高度 -->

    <!-- 填充 -->
    <solid
        android:color="@android:color/white"/><!-- 填充的颜色 -->

    <!-- 描边 -->
    <stroke
        android:width="2dp"
        android:color="@android:color/black"
        android:dashWidth="1dp"
        android:dashGap="2dp"/>

</shape>
  • 有时候会使用多个item去绘制一种效果,比如Button的自定义阴影效果
    下面看一下代码示例,这个就不多说了
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true">
  <layer-list>
   <!-- 相当于padding -->
   <item android:left="4dp" android:top="4dp">
    <shape>
     <solid android:color="#ff58bb52" />
     <corners android:radius="30dip"/>
    </shape>
   </item>
  </layer-list>
 </item>
 <item>
  <layer-list>
   <!-- SHADOW LAYER -->
   <item android:left="4dp" android:top="4dp">
    <shape>
     <solid android:color="#66000000" />
     <corners android:radius="30dip"/>
    </shape>
   </item>
   <!-- CONTENT LAYER -->
   <!-- 相当于padding -->
   <item android:bottom="4dp" android:right="4dp">
    <shape>
     <solid android:color="#ff58bb52" />
     <corners android:radius="30dip"/>
    </shape>
   </item>
  </layer-list>
 </item>
</selector>

感兴趣的朋友可以试一试,自定义阴影比较麻烦,而且效果不是特别好,简单的阴影效果实现可以试试。

先写到这里,累了歇一会,以后再对这篇博客进行扩展

最后

以上就是魁梧学姐为你收集整理的自定义Selector篇,改变样式,绘制图案和背景的全部内容,希望文章能够帮你解决自定义Selector篇,改变样式,绘制图案和背景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部