我有 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/