android gridview多个或单个选中,自定义圆型imageview

来源:互联网 发布:移动网络电视好用吗 编辑:程序博客网 时间:2024/05/06 01:50
//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();    }    });    }    }

//Adapter

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 stubreturn datas.size();}public Object getItem(int position) {// TODO Auto-generated method stubreturn position;}public long getItemId(int position) {// TODO Auto-generated method stubreturn 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();}}


0 0
原创粉丝点击