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

标签 android gridview onclicklistener grayscale

我有 GridView ,其中显示一些使用毕加索库下载的图片。我的目标是:当我单击某些图片时,其他图片应该变为灰度。但我不知道如何实现这一目标。

我的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 fragment 中。我也知道如何使 imageView 灰度,但我不知道更改 mGridView.setOnItemClickListener() (位于 gridView fragment 中)内的 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;
    }


}

然后,当您想要将它们全部重置回颜色时,可以使用 -1 调用 itemClicked

关于android - GridView OnItemClickListener - 如何对其他项目进行灰度化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32123670/

相关文章:

c# - 更改 GridView 中列的标题文本

android - 为 GridView 子级设置动画

android - 如何在 Android Studio 中设置外部文档?

android - VideoView无法打开下载目录中的视频文件(权限被拒绝)

java - 带开关的 Android 编码(字符串)

android - 自定义 Sipdroid

asp.net - Gridview ItemTemplate中的多个评估字段的最佳技术?

android - 单击 android 小部件上的监听器按钮不起作用

android - 如何将参数传递给 OnClickListener?

java - MotionEvent.ACTION_UP 未被调用