Как реализовать выбор нескольких элементов в GridView с изменением цвета ImageView на синий?

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

введите здесь описание изображения

Мой вид сетки:

   <GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="3"
    android:scrollbarStyle="insideOverlay"
    android:scrollbars="vertical"
    android:listSelector="@null" />

Imem в GridView:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/userLikesimg"
  android:layout_width="100dp"
  android:layout_height="100dp"
  android:background="@color/blu_facebook_transparent"
  android:scaleType="centerCrop" />

person alfo888_ibg    schedule 28.05.2014    source источник


Ответы (2)


Вы можете создать OnItemClickListener, который изменяет флаг элемента с 0 на 1 или true на false.

boolean isSelected = 0;

как стандартное значение.

в OnItemClickListener вы можете изменить это на

boolean isSelected=1;

затем после того, как они завершат действие, вы можете проанализировать объекты в представлении сетки/списка и посмотреть, у кого есть isSelected=1, и выполнить любое действие на основе этого.

person Sean C.    schedule 28.05.2014

Я решил unisng LayerDrawable в своем адаптере:

numElement имеет значение int и определяет число выбранных элементов.

selectedElements – массив логических значений с выбранными элементами позиции.

public boolean[] selectedElements= new boolean[n];
    private int selectedElements= m;

 public View getView(final int position, View amico, ViewGroup parent) {
      ...
      viewHolder.userImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (selectedElements[position] == false) {
                    if (numElementi == 0) {
                        Toast.makeText(mContext, R.string.error, Toast.LENGTH_LONG).show();
                    } else {
                        BitmapDrawable bd = new BitmapDrawable(mContext.getResources(), viewHolder.userImage.getDrawingCache())userUrl;
                        //you can check if the bd is null (if it is null I download image again -it is in cache- and I add blue trasparency like bellow                                 
                        //R.drawable.blue is image with trasparency
                        LayerDrawable d = new LayerDrawable(new Drawable[] { bd, mContext.getResources().getDrawable(R.drawable.blue) });
                        viewHolder.userImage.setImageDrawable(d);
                        selectedElements[position] = true;
                        numElementi--;
                    }

                } else {
                    String imgUserurl = userUrl;
                    Picasso.with(mContext).load(imgUserurl).placeholder(R.drawable.ll_friend_placeholder).into(viewHolder.userImage);
                    viewHolder.userImage.setDrawingCacheEnabled(true);
                    selectedElements[position] = false;
                    numElementi++;
                }
            }
        });
      ...
  }

  public boolean[] getSelectedElements()
  {
     return selectedElements;
  }

В моей деятельности или фрагменте:

    boolean[] selectedElement = adapter.getSelectedElements();

(Мне нужна позиция выбранного элемента)

person alfo888_ibg    schedule 29.05.2014