带"叉叉"的GridView

由于需要用到“删除图片”的功能,需要写这样一个小demo:


对之前博文的修改

发现imageView监听点击事件 效果实在不敢恭维,因此换个方式:设置Touch的监听函数, 下面的Demo没有改过来哈,自行更改哈~~~

注意当你点击的时候会产生两个Touch,一个Down,一个Up,只要处理一个就可以了~~~

imageView2.setOnTouchListener(new OnTouchListener() {
				
				@Override
				public boolean onTouch(View v, MotionEvent event) {
					// TODO Auto-generated method stub
					if (event.getAction() == MotionEvent.ACTION_DOWN)
					{
						Log.d("dsd", "被点了");
						Log.d("dsd", "data的大小: " + data.size() + ", position: " + position);
						data.remove(position);
						simpleAdapter.notifyDataSetChanged();
						//gridView.setAdapter(simpleAdapter);
						return true;
					}
					return false;
				}
			});



效果图:点击右上方的“X”即可将图片从GridView中删除



其实每个Item的布局文件时个FrameLayout, 里面有两个ImageView,一个在底一个在上

/gridviewtest/res/layout/gridview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <ImageView 
        android:id="@+id/imageview1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
        android:background="#F12A3A"
        />

	<ImageView
	    android:id="@+id/imageview2"
	    android:layout_width="40dip"
	    android:layout_height="40dip"
	    android:layout_gravity="right|top"
	    
	    />

</FrameLayout>


主activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <GridView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         android:id="@+id/my_gridview"
         android:listSelector="@android:color/black"
         android:verticalSpacing="10dp"
         android:horizontalSpacing="10dip"
         android:numColumns="3"
         android:stretchMode="columnWidth"
         />

</RelativeLayout>


MainActivity.java

package com.example.gridviewtest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

	private List<Map<String, Object>> data = null;
	private GridViewAdapter simpleAdapter = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		GridView gridView = (GridView) findViewById(R.id.my_gridview);
		
		data = new ArrayList<Map<String,Object>>();
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("imageview1", R.drawable.tt);
		map.put("imageview2", R.drawable.cha);
		data.add(map);
		data.add(map);
		data.add(map);
		data.add(map);
		data.add(map);
		data.add(map);
		data.add(map);

		simpleAdapter = new GridViewAdapter(getApplicationContext()
								, data
								, R.layout.gridview_item
								, new String[]{"imageview1","imageview2"}
								, new int[]{R.id.imageview1,R.id.imageview2});

		gridView.setAdapter(simpleAdapter);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	public void addItem(Bitmap bitmap) {
		Map<String, Object> item = new HashMap<String, Object>();
		item.put("imageview1", bitmap);//添加图像
		item.put("imageview2", R.drawable.cha);
		data.add(item);
		simpleAdapter.notifyDataSetChanged();
	}
	
	private class GridViewAdapter extends SimpleAdapter
	{
		private Context context = null;
		private int pos;
		public GridViewAdapter(Context context,
				List<? extends Map<String, ?>> data, int resource,
				String[] from, int[] to) {
			super(context, data, resource, from, to);
			this.context = context;
			// TODO Auto-generated constructor stub
		}
		@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			View view = super.getView(position, convertView, parent);
			
			ImageView imageView = (ImageView) view.findViewById(R.id.imageview2);
			imageView.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					Toast.makeText(context, "我被点击了", Toast.LENGTH_SHORT).show();
					data.remove(position);
					simpleAdapter.notifyDataSetChanged();
				}
			});
			
			return view;
		}
	}
}


demo源码http://download.csdn.net/detail/u011133213/5914887




原文地址:https://www.cnblogs.com/james1207/p/3253758.html