我的活动是 listView ,我使用扩展 BaseAdapter 的 MyAdapter 进行充气。我的列表视图显示了多个图像,我想添加一个彩色滤镜效果,即。颜色的变化,已经点击的图像。
首先,所有图像都按原样显示,但是当用户点击图像时,其颜色会发生变化,这对图像的影响较小,因此用户可以知道他们之前已经看过这个图像。我通过使用setColorFilter
方法实现了这一目标。
点击后图像正在变化。
我的问题是,当我向下滚动列表时,之前未点击过的几个图像也显示出这种效果。而我希望此效果仅显示在点击的图像上。
我的代码: -
public class MyAdapter extends BaseAdapter {
public class ViewHolder{
ImageView image;
}
@Override
public View getView( final int arg0, View arg1, ViewGroup arg2)
{
View vi = arg1;
final ViewHolder holder;
final int type = getItemViewType(arg0);
if(arg1==null)
{
holder = new ViewHolder();
switch(type)
{
case 0:
LayoutInflater inflater = (LayoutInflater) itemlist.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.items, arg2,false);
holder.image = (ImageView)vi.findViewById(R.id.list_image);
holder.image.getLayoutParams().height=(int) (height/dpi);
break;
}
vi.setTag(holder);
}
else{
holder=(ViewHolder)vi.getTag();
}
Picasso.with(getApplicationContext())
.load(data.get(arg0).get(3))
.fit().centerCrop().into(holder.image);
holder.image.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
holder.image.setColorFilter(0x70C6C6C6, PorterDuff.Mode.MULTIPLY);
Toast.makeText(getApplicationContext(), "Item"+arg0+" selected", Toast.LENGTH_SHORT).show();
}});
}
return vi;
}
我做错了什么?
感谢。
答案 0 :(得分:0)
维持点击图像的状态,如下所示。
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.check, null);
holder.mTextView = (TextView) view.findViewById(R.id.textView1);
holder.mImageView = (ImageView) view.findViewById(R.id.checkBox1);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
final MyDataBean mDataBean = arrayList.get(position);
holder.mTextView.setText(mDataBean.getmString());
if (mDataBean.isIschecked()) {
holder.mImageView.setBackgroundColor(mContext.getResources().getColor(R.color.red));
} else {
holder.mImageView.setBackgroundColor(mContext.getResources().getColor(R.color.black));
}
holder.mImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDataBean.setIschecked(true);
holder.mImageView.setBackgroundColor(mContext.getResources().getColor(R.color.red));
}
});
return view;
}
答案 1 :(得分:0)
我不知道数据数组的类型,但您可以尝试在数据数组中添加一些布尔值,例如 isAlreadySeen 由 onItemClickListener 方法更改。因此,如果您的列表项除了图像之外没有其他内容,我建议您在适配器之外使用 onItemClickListener 而不是 holder.image.setOnClickListener 。然后你可以替换你的
holder.image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
holder.image.setColorFilter(0x70C6C6C6, PorterDuff.Mode.MULTIPLY);
}
});
以下代码
if(data.get(arg0).isAlreadySeen){
holder.image.setColorFilter(0x70C6C6C6, PorterDuff.Mode.MULTIPLY);
}
希望它有所帮助..