//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(); } }