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>

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>

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/108254104
今日推荐