随机图像在listview中获得颜色变化

时间:2014-12-25 11:29:34

标签: android image listview picasso

我的活动是 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;

}

我做错了什么?

感谢。

2 个答案:

答案 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);
}
希望它有所帮助..