android gridview多個或單個選中,自定義圓型imageview

//Activity
package com.example.activity;

import java.util.ArrayList;
import java.util.List;

import com.example.adapter.MyAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;

public class MyActivity extends Activity {
    /** Called when the activity is first created. */
	private GridView grid;
	private MyAdapter adapter;
	private ImageView imageview;
	private ImageView imageviews;
	private Boolean bl = true;
	private List<Item> datas;
	public Integer[] myImageIds = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
    public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		datas = new ArrayList<Item>();
    		for (int i = 0; i < myImageIds.length; i ++){
    			Item tempItem = new Item();
    			tempItem.setId(i);
    			tempItem.setSelect(false);
    			datas.add(tempItem);
    		}
    		grid = (GridView) findViewById(R.id.grid);
    		adapter = new MyAdapter(MyActivity.this, datas);
    		grid.setAdapter(adapter);
    		grid.setOnItemClickListener(new OnItemClickListener() {
    			public void onItemClick(AdapterView<?> parent, View v,
    					int position, long id) {
    				Item tempItem = datas.get(position);
    				tempItem.setSelect(!tempItem.isSelect());
    				adapter.notifyDataSetChanged();
    			}
    		});

    	}

    }

//Adapterhtml

package com.example.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import com.example.activity.CircularImageView;
import com.example.activity.Item;
import com.example.activity.R;



public class MyAdapter extends BaseAdapter{

	private LayoutInflater inflater;
	private CircularImageView imageview;//圓圖
	private int clickTemp = -1;
	private Context context;
	private List<Item> datas;
	
	public MyAdapter(Context context, List<Item> datas){
		this.context=context;	
		this.datas = datas;
		this.inflater = LayoutInflater.from(context);
	}
	public int getCount() {
		// TODO Auto-generated method stub
		return datas.size();
	}

	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
	
	public void setSeclection(int position) {
		clickTemp = position;
		}



	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = inflater.inflate(R.layout.image, null);
		Item tempItem = datas.get(position);
		imageview=(CircularImageView)convertView.findViewById(R.id.ImageView);
		if (tempItem.isSelect()){
			imageview.setImageDrawable(context.getResources().getDrawable(R.drawable.right));
		} else {
			imageview.setImageDrawable(context.getResources().getDrawable(R.drawable.kong));
		}
		
		return convertView;
	}

}

//圓圖

package com.example.activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class CircularImageView extends ImageView {
	private int borderWidth = 6;
	private int viewWidth;
	private int viewHeight;
	private Bitmap bitmap;
	private Paint paint;
	private Paint paintBorder;
	private BitmapShader shader;
	private int action;

	public CircularImageView(Context context) {
		super(context);
		init();
	}

	public CircularImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public CircularImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	private int measureWidth(int measureSpec) {
		int specMode = View.MeasureSpec.getMode(measureSpec);
		int specSize = View.MeasureSpec.getSize(measureSpec);
		if (specMode == MeasureSpec.EXACTLY)
			return specSize;
		return viewWidth;
	}

	private int measureHeight(int measureSpecHeight, int measureSpecWidth) {
		int specMode = View.MeasureSpec.getMode(measureSpecHeight);
		int specSize = View.MeasureSpec.getSize(measureSpecHeight);
		if (specMode == MeasureSpec.EXACTLY)
			return specSize;
		return viewHeight;
	}

	private void init() {
		paint = new Paint();
		paint.setAntiAlias(true);
		paintBorder = new Paint();
		paintBorder.setAntiAlias(true);
		setBorderColor(Color.WHITE);
	}

	public void setBorderColor() {
		setBorderColor(Color.TRANSPARENT);
	}

	public void setBorderColor(int rscId) {
		if (this.paintBorder != null)
			this.paintBorder.setColor(rscId);
		invalidate();
	}

	@SuppressLint({"DrawAllocation"})
	public void onDraw(Canvas canvas) {
		try {
			Drawable drawable = getDrawable();
			if (drawable instanceof BitmapDrawable) {
				BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
				if (bitmapDrawable != null) {
					bitmap = bitmapDrawable.getBitmap();
				}
			} else if (drawable instanceof TransitionDrawable) {
				TransitionDrawable transitionDrawable = (TransitionDrawable) drawable;
				BitmapDrawable bitmapDrawable = (BitmapDrawable) transitionDrawable
						.getDrawable(transitionDrawable.getNumberOfLayers() - 1);
				if (bitmapDrawable != null) {
					bitmap = bitmapDrawable.getBitmap();
				}

			}
			if (bitmap != null) {
				shader = new BitmapShader(Bitmap.createScaledBitmap(bitmap,
						viewWidth, viewHeight, false), Shader.TileMode.CLAMP,
						Shader.TileMode.CLAMP);
				paint.setShader(shader);
				int circleCenter = viewWidth / 2;
				canvas.drawCircle(circleCenter, circleCenter, circleCenter,
						paintBorder);
				canvas.drawCircle(circleCenter, circleCenter, circleCenter
						- borderWidth, paint);
			}
			switch (this.action) {
				case MotionEvent.ACTION_DOWN :
					setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
				default :
			}
			clearColorFilter();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		viewWidth = measureWidth(widthMeasureSpec);
		viewHeight = measureHeight(heightMeasureSpec, widthMeasureSpec);
		setMeasuredDimension(viewWidth, viewHeight);
	}

	public boolean onTouchEvent(MotionEvent ev) {
		action = ev.getAction();
		return super.onTouchEvent(ev);
	}

	public void setBorderWidth(int borderWidth) {
		this.borderWidth = borderWidth;
		invalidate();
	}
}