📜  android gridview item 点击效果波纹 - Java (1)

📅  最后修改于: 2023-12-03 14:59:15.034000             🧑  作者: Mango

Android GridView Item 点击效果波纹

在 Android 应用中,为了让用户有更好的操作体验,经常需要在用户点击某个控件时出现视觉效果,比如水波纹效果,使用户感受到点击事件确实发生了。

在 GridView 中,实现点击效果波纹可以通过 Selector + RippleDrawable 的方式实现。

Selector

Selector 是一个 XML 文件,它可以根据控件的状态改变控件的背景。可以根据需要配置以下状态:

  • state_pressed:当控件被按下时触发;
  • state_focused:当控件获得焦点时触发;
  • state_enabled:当控件可用时触发;
  • state_checked:当控件被选中时触发。

下面是一个 Selector 的示例:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#f44336" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <solid android:color="#008577" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#3F51B5" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</selector>

这个 Selector 定义了三个状态的视觉效果,分别是按下、获取焦点、正常状态。当控件处于不同状态时会自动切换 Selector 中定义的背景。

RippleDrawable

RippleDrawable 是 Android 5.0 的新特性,它提供了水波纹效果。使用 RippleDrawable 前需要注意:

  • RippleDrawable 只能在 Android 5.0 以上版本使用;
  • RippleDrawable 属性并不是任何控件都可以使用,建议在需要水波纹效果的地方使用 Button、TextView 等按钮控件。

下面是一个 RippleDrawable 的示例:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="#64B5F6">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item android:drawable="@drawable/my_selector" />
</ripple>

这个 RippleDrawable 定义了两个 item,一个是 mask,用于定义水波纹的范围和形状;另一个是 drawable,用于定义水波纹生效时的背景。

在 GridView 中应用

在 GridView 中使用实现点击效果波纹也很简单,只需要在 Adapter 中设置每个 item 的背景为上面定义的 RippleDrawable 即可。

public class MyAdapter extends BaseAdapter {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        if (convertView == null) {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
        } else {
            view = convertView;
        }

        view.setBackgroundResource(R.drawable.my_ripple);

        return view;
    }
}

这样,在 GridView 中点击每个 item 时,就会出现水波纹效果了。

总结

通过 Selector + RippleDrawable 的方式,在 Android GridView 中实现点击效果波纹非常容易。只需要在 Adapter 中设置每个 item 的背景选项,即可让用户感到点击事件的发生。