GridView OnItemClickListener - 如何对其他项目进行灰度化

GridView OnItemClickListener - how to grayscale other items

我有网格视图,其中显示了一些使用 Picasso 库下载的图片。我的目标是:当我点击一些图片时,其他图片应该变成灰度。但我不知道如何实现这一目标。

我的 GridViewAdapter:

public class GridViewAvatarAdapter extends ArrayAdapter<AvatarItem> {

    private Context mContext;
    private int layoutResourceId;
    private ArrayList<AvatarItem> mGridData = new ArrayList<AvatarItem>();

    public GridViewAvatarAdapter(Context mContext, int layoutResourceId, ArrayList<AvatarItem> mGridData) {
        super(mContext, layoutResourceId, mGridData);
        this.layoutResourceId = layoutResourceId;
        this.mContext = mContext;
        this.mGridData = mGridData;
    }



    public void setGridData(ArrayList<AvatarItem> mGridData) {
        this.mGridData = mGridData;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        final ViewHolder holder;

        if (row == null) {
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageView = (ImageView) row.findViewById(R.id.grid_item_avatar_image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        AvatarItem item = mGridData.get(position);
        Picasso.with(mContext).load(item.getAvatarURL()).transform(new CircleTransform()).into(holder.imageView);

        return row;
    }

    static class ViewHolder {
        ImageView imageView;
    }


}

我知道我应该使用:

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            //Get item at position
            AvatarItem item = (AvatarItem) parent.getItemAtPosition(position);


        }
    });

在我的 GridView 片段中。我也知道如何制作 imageView 灰度,但我不知道如何在 mGridView.setOnItemClickListener() (在 gridView 片段中)

中更改 ImageView

如果你试图设置所有东西但你点击的那个我会做这样的事情

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            //Get item at position
            gridViewadapter.itemClicked(position);

        }
    });

那么你的适配器就是这个

public class GridViewAvatarAdapter extends ArrayAdapter<AvatarItem> {

    private Context mContext;
    private int layoutResourceId;
    private int currentSelectedItem = -1;
    private ArrayList<AvatarItem> mGridData = new ArrayList<AvatarItem>();

    public GridViewAvatarAdapter(Context mContext, int layoutResourceId, ArrayList<AvatarItem> mGridData) {
        super(mContext, layoutResourceId, mGridData);
        this.layoutResourceId = layoutResourceId;
        this.mContext = mContext;
        this.mGridData = mGridData;
    }

    public void itemClicked(int position)
    {
         currentSelectedItem = position;
         notifyDataSetChanged();
    }


    public void setGridData(ArrayList<AvatarItem> mGridData) {
        this.mGridData = mGridData;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        final ViewHolder holder;

        if (row == null) {
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageView = (ImageView) row.findViewById(R.id.grid_item_avatar_image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        AvatarItem item = mGridData.get(position);
        Picasso.with(mContext).load(item.getAvatarURL()).transform(new CircleTransform()).into(holder.imageView);

        if(currentSelectedItem != -1 && currentSelectedItem != position)
        {
          //MAKE IMAGE GRAYSCALE HERE
        }
        else
        {
          //MAKE IMAGE COLOR HERE
        }
        return row;
    }

    static class ViewHolder {
        ImageView imageView;
    }


}

然后你可以调用 itemClicked 与 -1 当你想要将它们全部重置回颜色

另一个没有将逻辑融入适配器的选项是:

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            int numberOfViews = parent.getCount();
            for(int i = 0; i < numberOfViews; i++) {
                //If i is not the image you clicked
                if(i != position) { 
                    AvatarItem item = (AvatarItem) parent.getItemAtPosition(i);
                    //Run whatever function that converts to greyscale
                    item.toGreyScale(); 
                }
            }
            //Get item at position
            AvatarItem item = (AvatarItem) parent.getItemAtPosition(position);

            //Run whatever function you want to on the clicked item
            item.doSomething(); 

        }
});