网上看了好几个写法,感觉写的好复杂,自己写了一下:
先看效果:
首先是item的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
>
<ImageView
android:id="@+id/sport_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/kung_fu_0"
android:background="@drawable/kung_fu_bg"
/>
<TextView
android:id="@+id/sport_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/write"
android:textSize="@dimen/sport_title_text_size"
/>
</LinearLayout>
其中android:background="@drawable/kung_fu_bg"背景需要重写
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/kung_fu_bg_normal" />
<item android:state_pressed="true" android:drawable="@drawable/kung_fu_bg_pressed" />
<item android:state_selected="false" android:drawable="@drawable/kung_fu_bg_normal" />
<item android:state_selected="true" android:drawable="@drawable/kung_fu_bg_pressed" />
</selector>
代码里点击的时候只需要:
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ImageView sportImageView = (ImageView) view.findViewById(R.id.sport_iv); if (sportImageView.isSelected() == false) { sportImageView.setSelected(true); sportImageView.setPressed(true); } else { sportImageView.setSelected(false); sportImageView.setPressed(false); } } });