граница и значок при выборе элемента в GridView

#android #gridview

#Android #gridview

Вопрос:

Я провел некоторое исследование, чтобы сделать это. я хочу, чтобы у меня были GridView элементы с разными цветами фона и закругленными углами. когда пользователь нажимает на любой элемент, в центре элемента сетки отображается значок галочки и белая рамка. также пользователь может выбирать только по одному за раз, что означает, что если они нажимают на другой элемент, отметка и граница должны быть скрыты для текущего элемента.

Это то, что я пробовал до сих пор:

MianActivity:

 //somecode
    setContentView(R.layout.activity_main);
            final GridView gridview = (GridView) findViewById(R.id.gridview);
            gridview.setAdapter(new ImageAdapter(this));
  

ImageAdapter.java

     public class ImageAdapter extends BaseAdapter {
        private Context mContext;

        // Constructor
        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mThumbIds.length;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            final MarkableImageView imageView;

            if (convertView == null) {
                imageView = new MarkableImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
                imageView.setPadding(20, 20, 20, 20);
            }
            else
            {
                imageView = (MarkableImageView) convertView;
            }
//setting rounded corners on every item
            imageView.setBackgroundResource(R.drawable.bg);
            final GradientDrawable drawable = (GradientDrawable) imageView.getBackground();
//setting bacground colour every item based on array
            drawable.setColor(Color.parseColor(mThumbIds[position]));
//tick mark and border
            imageView.setChecked(true);
            return imageView;
        }

        // Keep all Background Colors in array
        public String[] mThumbIds = {"#9e9d25","#9c26b0","#c62828","#01bcd4","#4e342e","#ffeb3b","#9c26b0","#2f7d32","#ffeb3b","#ff5722","#673ab7"
        };

        public class MarkableImageView extends ImageView {
            private boolean checked = true;

            public MarkableImageView(Context context) {
                super(context);
            }

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

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

            public void setChecked(boolean checked) {
                this.checked = checked;
                invalidate();
            }

            public boolean isChecked() {
                return checked;
            }

            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                if(checked) {
                    Bitmap check = BitmapFactory.decodeResource(
                            getResources(), R.drawable.tick);
                    canvas.drawBitmap(check, 50, 50, new Paint());

                }
            }
  

Проблема в том, что на каждом элементе сетки будет отображаться галочка, а границ тоже нет.Я делаю что-то не так? и самое главное, как я могу заставить пользователя ca выбирать один элемент за раз? если они нажимают на другой элемент, текущая галочка должна быть скрыта. Любая помощь будет оценена! Спасибо!

Комментарии:

1. Кто-нибудь? Любая помощь будет оценена.

2. Может быть, вы можете попробовать: 1. добавить «gridview.setChoiceMode (GridView. CHOICE_MODE_SINGLE);» перед установкой Adapter(). 2. Внутри getView() поместите «ImageView.setCheked (true)» внутри if-else, например, «if(gridview.isItemChecked(position)){imageView.setChecked(true);}else{imageView.setChecked(false);}. Надеюсь, это поможет!