android selector之按钮点击变暗变大、背景半透明、圆角和动态添加selector

selector的巧用

selector一般都是在backgroup中使用,可以是button、imageview的backgroup,下面来看看有哪些可以实现的效果

1、一张图片实现点击变暗,松开变亮的效果

在这里插入图片描述

<!--?xml version="1.0" encoding="utf-8"?-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item android:drawable="@drawable/test" />
            <item>
                <shape android:shape="oval" >
                    <solid android:color="#51000000" />
                </shape>
            </item>
        </layer-list>

   </item>

   <item android:drawable="@drawable/test" />
</selector>

2、一张图片实现点击变小,松开变大的效果

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item android:drawable="@drawable/test"
                android:top="3dp"
                android:bottom="3dp"
                android:left="3dp"
                android:right="3dp"/>
        </layer-list>
    </item>
    <item android:drawable="@drawable/test" />
</selector>

3、背景半透明,圆角

在这里插入图片描述

shape_card.xml,直接在backgroup里面使用就可以

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 设置圆角半径 -->
    <corners android:radius="10dp" />
    <!-- 设置半透明 -->
    <solid android:color="#33DCDCDC" />
</shape>

设置半透明示例:

    <solid android:color="#88ffffff" />

5、动态的给button(其他控件)添加selector

  1. 动态在button中添加backgroup的selector,使得按下按钮换图片
 /**
     * 动态在button中添加backgroup的selector,使得按下按钮换图片
     * @param context 调用方法的 Activity
     * @param idNormal 默认图片的 id
     * @param idPress  点击图片的 id
     * @param button   点击的 view
     */
    fun addSelectorFromDrawable(
        context: Context,
        idNormal: Int,
        idPress: Int,
        button: Button
    ) {
        val drawable = StateListDrawable()
        val normal: Drawable? = getDrawable(idNormal)
        val press: Drawable? = getDrawable(idPress)
//        val normal: Drawable = context.getResources().getDrawable(idNormal)//旧版写法
//        val press: Drawable = context.getResources().getDrawable(idPress)//旧版写法
        drawable.addState(intArrayOf(android.R.attr.state_pressed), press)//按下
        drawable.addState(intArrayOf(-android.R.attr.state_pressed), normal)//松开
//        button.setBackgroundDrawable(drawable)//旧版写法
        button.background=drawable
    }

以上代码改成静态写法为:
selector_1.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/shoes" android:state_pressed="false" />
    <item android:drawable="@mipmap/shoes_press" android:state_pressed="true" />
</selector>
  1. 动态在button中添加backgroup,使得选中之后 按钮换图片(动态修改selector)
/**
     * 动态在button中添加backgroup,使得选中之后 按钮换图片(动态修改selector)
     * @param context 调用方法的 Activity
     * @param idNormal 默认图片的 id
     * @param idPress  点击图片的 id
     * @param button   点击的 view
     */
    fun addSelectorCheck(
        context: Context,
        idNormal: Int,
        idPress: Int,
        button: Button
    ) {//这里可以换其他的控件
        val drawable = StateListDrawable()
        val normal: Drawable? = getDrawable(idNormal)
        val press: Drawable? = getDrawable(idPress)
//        val normal: Drawable = context.getResources().getDrawable(idNormal)//旧版写法
//        val press: Drawable = context.getResources().getDrawable(idPress)//旧版写法
        drawable.addState(intArrayOf(android.R.attr.state_checked), press)//选中(这里可以改成其他属性)
        drawable.addState(intArrayOf(-android.R.attr.state_checked), normal)//未选中
//        button.setBackgroundDrawable(drawable)//旧版写法
        button.background=drawable
    }

以上代码改成静态写法为:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/shoes" android:state_checked="false" />

    <item android:drawable="@mipmap/shoes_press" android:state_checked="true" />
</selector>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值