📅  最后修改于: 2023-12-03 14:59:15.034000             🧑  作者: Mango
在 Android 应用中,为了让用户有更好的操作体验,经常需要在用户点击某个控件时出现视觉效果,比如水波纹效果,使用户感受到点击事件确实发生了。
在 GridView 中,实现点击效果波纹可以通过 Selector + RippleDrawable 的方式实现。
Selector 是一个 XML 文件,它可以根据控件的状态改变控件的背景。可以根据需要配置以下状态:
下面是一个 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 是 Android 5.0 的新特性,它提供了水波纹效果。使用 RippleDrawable 前需要注意:
下面是一个 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 中使用实现点击效果波纹也很简单,只需要在 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 的背景选项,即可让用户感到点击事件的发生。