如何实现与ImageView的changind颜色以蓝色突出的GridView多项目选择? [英] How to implement multi item selection in a GridView with ImageView changind color to blue highlight?

查看:216
本文介绍了如何实现与ImageView的changind颜色以蓝色突出的GridView多项目选择?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现在 GridView控件多项目选择与的ImageView 改变颜色为蓝色。
我的意思是我有一个 GridView控件的ImageView ,我从URL加载用户的图像。
在我的 GridView控件我想强调的多重选择图像画面(ES蓝)像

我的GridView的:

 < GridView控件
    机器人:ID =@ + ID / GridView控件
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    机器人:为numColumns =3
    机器人:scrollbarStyle =insideOverlay
    机器人:滚动条=垂直
    机器人:listSelector =@空/>

IMEM在GridView:

 < ImageView的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
  机器人:ID =@ + ID / userLikesimg
  机器人:layout_width =100dp
  机器人:layout_height =100dp
  机器人:背景=@彩色/ blu_facebook_transparent
  机器人:scaleType =centerCrop/>


解决方案

我解决unisng LayerDrawable 在我的适配器:

numElement 的数据类型为int,并确定选择将num元素

selectedElements 的是布尔阵列选定的位置元素

 公共布尔[] = selectedElements新的布尔[N];
    私人INT selectedElements =米; 公共查看getView(最终诠释的立场,观点埃美柯,父母的ViewGroup){
      ...
      viewHolder.userImage.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                如果(selectedElements [位置] == FALSE){
                    如果(numElementi == 0){
                        Toast.makeText(mContext,R.string.error,Toast.LENGTH_LONG).show();
                    }其他{
                        BitmapDrawable BD =新BitmapDrawable(mContext.getResources(),viewHolder.userImage.getDrawingCache())userUrl;
                        //你可以检查BD为null(如果是空我重新下载图像 - 它是的cache,我加蓝trasparency像波纹管
                        //R.drawable.blue是trasparency形象
                        LayerDrawable D =新LayerDrawable(新绘制对象[] {BD,mContext.getResources()getDrawable(R.drawable.blue)});
                        viewHolder.userImage.setImageDrawable(四);
                        selectedElements [位置] =真;
                        numElementi--;
                    }                }其他{
                    字符串imgUserurl = userUrl;
                    Picasso.with(mContext).load(imgUserurl).placeholder(R.drawable.ll_friend_placeholder).into(viewHolder.userImage);
                    viewHolder.userImage.setDrawingCacheEnabled(真);
                    selectedElements [位置] = FALSE;
                    numElementi ++;
                }
            }
        });
      ...
  }  公共布尔[] getSelectedElements()
  {
     返回selectedElements;
  }

在我的活动或片段:

 布尔[] = selectedElement adapter.getSelectedElements();

(我需要选定元素的位置)

I would like to implement multi item selection in a GridView with ImageView changing color to blue. I mean I have a GridView with ImageView where I load user's image from url. In my GridView I would like to highlight the multiple selection image (es blue) like in picture

My 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 in a 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" />

解决方案

I solved unisng LayerDrawable in my adapter:

numElement is int and define num elements chosen

selectedElements is array of boolean with position elements chosen

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;
  }

In my activity or fragment:

    boolean[] selectedElement = adapter.getSelectedElements();

(I need position of selected element)

这篇关于如何实现与ImageView的changind颜色以蓝色突出的GridView多项目选择?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆