首先是自定義的GridVIew,ListView嵌套GridVIew時必須自定義GridVIew,不嵌套時可以不用。這里的GridView會根據圖片多少自動調節大小
//自定義的GridView ,以后可以直接把這個類粘過去用
public class GridViewEx extends GridView { private OnTouchInvalidPositionListener onTouchInvalidPositionListener; public GridViewEx(Context context) { super(context); } public GridViewEx(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } @Override public boolean onTouchEvent(MotionEvent ev) { //先創建一個監聽接口,一旦點擊了無效區域,便實現onTouchInvalidPosition方法,返回true or false來確認是否消費了這個事件 if(onTouchInvalidPositionListener!=null){ if(!isEnabled()){ return isClickable()||isLongClickable(); } int motionPosition = pointToPosition((int)ev.getX(), (int)ev.getY()); if(ev.getAction()==MotionEvent.ACTION_UP&&motionPosition == INVALID_POSITION){ super.onTouchEvent(ev); return onTouchInvalidPositionListener.onTouchInvalidPosition(motionPosition); } } return super.onTouchEvent(ev); } public void setOnTouchInvalidPositionListener( OnTouchInvalidPositionListener onTouchInvalidPositionListener) { this.onTouchInvalidPositionListener = onTouchInvalidPositionListener; } public interface OnTouchInvalidPositionListener{ public boolean onTouchInvalidPosition(int motionEvent); } }
這是布局中的GridVIew:
//每張圖片寬為90dp,GirdView的大小根據圖片數量自適應,如果沒有圖片,那么GridVIew就相當於沒有了
<com.antuweb.track.tracker.ui.GridViewEx android:id="@+id/gv_squre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:columnWidth="90dp" android:focusable="false" android:gravity="center_horizontal" android:horizontalSpacing="1dip" android:numColumns="auto_fit" android:stretchMode="columnWidth" //拉伸模式 android:verticalSpacing="1dip" />
這是GridView的條目布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/iv_gv_item_squre" android:layout_width="match_parent" android:layout_height="110dp" android:scaleType="centerCrop" /> </LinearLayout>
通過這兩個布局,那么就可以很規則的顯示圖片,大圖顯示成縮略圖沒問題,但是縮略圖顯示出來就有問題,還待解決。
結果圖: