android 实现GridView多选效果

jopen 11年前

在使用 GridView的时候,有时需要多选上面显示的类容,比如批量删除上面显示的图片,批量上传图片等。这个时候我们可以使用层叠图来实现,效果如下:

20130527091337022.png

具体代码如下:


main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        android:background="#000000"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        tools:context=".MainActivity" >       <GridView            android:layout_width="fill_parent"           android:layout_height="fill_parent"           android:id="@+id/grid"           android:verticalSpacing="3dp"           android:horizontalSpacing="3dp"           android:numColumns="3"           ></GridView>    </LinearLayout>


item.xml

 <?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" >            <ImageView         android:scaleType="fitXY"        android:padding="3dp"        android:layout_height="70dp"        android:layout_width="70dp"        android:id="@+id/image_item"        />    </LinearLayout>


mainActivity.java

package com.imageview;  import android.os.Bundle;  import android.app.Activity;  import android.view.View;  import android.widget.AdapterView;  import android.widget.GridView;  import android.widget.AdapterView.OnItemClickListener;      public class MainActivity extends Activity {  private Adpter adpter;  private GridView gridView;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  int [] image={R.drawable.dog1,R.drawable.m2,R.drawable.m3,R.drawable.m4,R.drawable.m5,R.drawable.dog2};  adpter=new Adpter(image, this);  gridView=(GridView) findViewById(R.id.grid);  gridView.setAdapter(adpter);  gridView.setOnItemClickListener(new OnItemClickListener() {                  @Override               public void onItemClick(AdapterView<?> arg0, View arg1,                                  int position, long arg3) {                  adpter.chiceState(position);              }          });      }  }


Adpter.java

package com.imageview;          import android.content.Context;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.graphics.drawable.BitmapDrawable;  import android.graphics.drawable.Drawable;  import android.graphics.drawable.LayerDrawable;  import android.util.Log;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.BaseAdapter;  import android.widget.ImageView;      public class Adpter extends BaseAdapter {  private int[] image;  private boolean isChice[];  private Context context;      public Adpter(int[] im, Context context) {  this.image = im;  Log.i("hck", im.length+"lenght");  isChice=new boolean[im.length];  for (int i = 0; i < im.length; i++) {  isChice[i]=false;  }  this.context = context;  }      @Override  public int getCount() {  return image.length;  }      @Override  public Object getItem(int arg0) {  return image[arg0];  }      @Override  public long getItemId(int arg0) {  return arg0;  }      @Override  public View getView(int arg0, View arg1, ViewGroup arg2) {  View view = arg1;  GetView getView=null;  if (view == null) {  view = LayoutInflater.from(context).inflate(R.layout.item, null);  getView = new GetView();  getView.imageView=(ImageView) view.findViewById(R.id.image_item);  view.setTag(getView);  } else {  getView = (GetView) view.getTag();  }  getView.imageView.setImageDrawable(getView(arg0));    return view;  }      static class GetView {  ImageView imageView;  }          //主要就是下面的代码了  private LayerDrawable getView(int post) {    Bitmap bitmap = ((BitmapDrawable)context.getResources().getDrawable(image[post])).getBitmap();    Bitmap bitmap2=null;  LayerDrawable la=null;  if (isChice[post]== true){     bitmap2 = BitmapFactory.decodeResource(context.getResources(),  R.drawable.editable_mode_checked_tag);  }  if (bitmap2!=null) {  Drawable[] array = new Drawable[2];  array[0] = new BitmapDrawable(bitmap);  array[1] = new BitmapDrawable(bitmap2);  la= new LayerDrawable(array);  la.setLayerInset(0, 0, 0, 0, 0);   //第几张图离各边的间距  la.setLayerInset(1, 0, 65, 65, 0);    }  else {  Drawable[] array = new Drawable[1];  array[0] = new BitmapDrawable(bitmap);  la= new LayerDrawable(array);  la.setLayerInset(0, 0, 0, 0, 0);  }  return la; // 返回叠加后的图  }  public void chiceState(int post)  {  isChice[post]=isChice[post]==true?false:true;  this.notifyDataSetChanged();  }  }


代码比较简单,就不做解释了