如何检测Gridview中点击位置的imageview? [英] How to detect the imageview of clicked position in Gridview?

查看:256
本文介绍了如何检测Gridview中点击位置的imageview?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里获得了GridViewAdapter的View方法。

我在这里想要的是,每当我点击gridview中的项目时,我点击的位置的图像应该缩小以显示它被添加到购物车的效果。但是,在单击位置缩小图像的同时,缩小了单元格的其他图像(在滚动视图的同时从Viewholder创建的最后一个图像),而不是缩小图像的大小。任何帮助是极大的赞赏。感谢!!!

  @Override 
public View getView(int position,View convertView,ViewGroup parent){
查看行= convertView;
持有人= null;

Product productItem =(Product)productList.get(position);

if(row == null){


LayoutInflater inflater =((Activity)context).getLayoutInflater();
row = inflater.inflate(R.layout.products_grid_item_layout,parent,false);
holder = new ViewHolder();
holder.productImage =(ImageView)row.findViewById(R.id.productImage);
holder.detailsIcon =(ImageView)row.findViewById(R.id.detailsIcon);
holder.productTitle =(TextView)row.findViewById(R.id.productTitle);
holder.productSubTitle =(TextView)row.findViewById(R.id.productSubTitle);
holder.productQuantity =(TextView)row.findViewById(R.id.productQuantity);
holder.priceDollar =(TextView)row.findViewById(R.id.priceDollar);
holder.priceCent =(TextView)row.findViewById(R.id.priceCent);
holder.productCount =(TextView)row.findViewById(R.id.productCount);
holder.productGridLayout =(RelativeLayout)row.findViewById(R.id.productGridLayout);

row.setTag(holder);

} else {
holder =(ViewHolder)row.getTag();
}



字符串价格= productItem.getPrice()。toString();

String [] pricearray;
pricearray = price.split(\\\。);

holder.productTitle.setText(productItem.getTitle()。toString());
holder.productSubTitle.setText(productItem.getSubtitle()。toString());
holder.productQuantity.setText(productItem.getVolume()。toString());
holder.priceDollar.setText(pricearray [0] +。);
holder.priceCent.setText(pricearray [1]);


if(productItem.getInCart()){
holder.productCount.setVisibility(View.VISIBLE);
holder.productCount.setText(productItem.getVolume());


Picasso.with(上下文)
.load(productItem.getImageUrl())
.placeholder(R.drawable.favourites)
。错误(R.drawable.favourites)
.into(holder.productImage);

urlSlug = productItem.getUrlSlug();

holder.detailsIcon.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

final int position = currentGridView.getPositionForView(v);
Log.e(grid position,position +);

意图productDetailIntent = new Intent(context,ProductDetailActivity.class);
productDetailIntent.putExtra(url_slug,productList.get(position).getUrlSlug());

context.startActivity(productDetailIntent);
}

} );

holder.productGridLayout.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

final int position = currentGridView.getPositionForView(v);
Log.e(grid position,position +);


shrinkImage();
}

});


返回行;



$ b public void shrinkImage(){
// first 0f,1f表示从X轴到X轴的缩放,意思是缩放从0-100%
//第一个0f,1f表示从Y轴到Y轴的缩放,意思是从0-100%缩放
//两个0.5f平均动画将从50% X轴& Y轴的50%,即从中心


ScaleAnimation fade_in = new ScaleAnimation(1f,0f,1f,0f,Animation.RELATIVE_TO_SELF,1f,Animation.RELATIVE_TO_SELF,1f);
fade_in.setDuration(1000); //动画持续时间(以毫秒为单位)
fade_in.setFillAfter(true); //如果fillAfter为true,则此动画执行的转换在完成时将保持不变。
holder.productImage.startAnimation(fade_in);

Log.e(淡出,淡出);
}


解决方案

OnClickListener,你可以将每个gridview的每个onclick的id / tag / position关联起来。

  item.setOnclickListener(new GridItemClick位置)); 

以下自定义点击事件类:

  Class GridItemClick实现了View.OnClickListener 
{
int position;
Public GridItemClick(int position)
{
this.position = position;
}
@Override
public onClick(View v)
{
//您可以使用您在构造函数中传递的每个项目的位置为每个项目添加逻辑
}

}

我在开始时遇到同样的问题,为了解决这个问题,我如上所述为视图创建了自定义的clickListener。


I have getView method of GridViewAdapter here.

What I want here is, whenever I click the item in gridview, The image at which position I clicked should should shrink to give effect that it is added to cart.

But Instead of shrinking the image at the position where click, It shrinks the other image of cell( the last image created from Viewholder while scrolling the view). Any help is greatly appreciated. Thanks!!!

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

        Product productItem = (Product) productList.get(position);

        if (row == null) {


                LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                row = inflater.inflate(R.layout.products_grid_item_layout, parent, false);
                holder = new ViewHolder();
                holder.productImage = (ImageView) row.findViewById(R.id.productImage);
                holder.detailsIcon = (ImageView) row.findViewById(R.id.detailsIcon);
                holder.productTitle = (TextView) row.findViewById(R.id.productTitle);
                holder.productSubTitle = (TextView) row.findViewById(R.id.productSubTitle);
                holder.productQuantity = (TextView) row.findViewById(R.id.productQuantity);
                holder.priceDollar = (TextView) row.findViewById(R.id.priceDollar);
                holder.priceCent = (TextView) row.findViewById(R.id.priceCent);
                holder.productCount = (TextView) row.findViewById(R.id.productCount);
                holder.productGridLayout = (RelativeLayout) row.findViewById(R.id.productGridLayout);

                row.setTag(holder);

        } else {
            holder = (ViewHolder) row.getTag();
        }



        String price = productItem.getPrice().toString();

        String[] pricearray;
        pricearray =  price.split("\\.");

        holder.productTitle.setText(productItem.getTitle().toString());
        holder.productSubTitle.setText(productItem.getSubtitle().toString());
        holder.productQuantity.setText(productItem.getVolume().toString());
        holder.priceDollar.setText(pricearray[0]+".");
        holder.priceCent.setText(pricearray[1]);


        if(productItem.getInCart()) {
            holder.productCount.setVisibility(View.VISIBLE);
            holder.productCount.setText(productItem.getVolume());
        }

        Picasso.with(context)
                .load(productItem.getImageUrl())
                .placeholder(R.drawable.favourites)
                .error(R.drawable.favourites)
                .into(holder.productImage);

        urlSlug = productItem.getUrlSlug();

        holder.detailsIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final int position = currentGridView.getPositionForView(v);
                Log.e("grid position", position+"");

                Intent productDetailIntent = new Intent(context,ProductDetailActivity.class);
                productDetailIntent.putExtra("url_slug", productList.get(position).getUrlSlug());

                context.startActivity(productDetailIntent);
            }

        });

    holder.productGridLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final int position = currentGridView.getPositionForView(v);
            Log.e("grid position", position+"");


            shrinkImage();
        }

    });


        return row;
    }



public void shrinkImage(){
        // first 0f, 1f mean scaling from X-axis to X-axis, meaning scaling from 0-100%
        // first 0f, 1f mean scaling from Y-axis to Y-axis, meaning scaling from 0-100%
        // The two 0.5f mean animation will start from 50% of X-axis & 50% of Y-axis, i.e. from center


        ScaleAnimation fade_in =  new ScaleAnimation(1f, 0f, 1f, 0f, Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 1f);
        fade_in.setDuration(1000);     // animation duration in milliseconds
        fade_in.setFillAfter(true);    // If fillAfter is true, the transformation that this animation performed will persist when it is finished.
        holder.productImage.startAnimation(fade_in);

        Log.e("fade","fade out");
    }

解决方案

You can implement your own custom OnClickListener and you can associate id/tag/position for each onclick of each item of gridview.

item.setOnclickListener(new GridItemClick(position));

Custom Click event class below:

Class GridItemClick implements View.OnClickListener
{
     int position;
     Public GridItemClick(int position)
     {
         this.position = position;
     }
     @Override
     public onClick(View v)
     { 
         // You can add logic here for each item clicked using position of each item you passed in constructor
     }

}

I had same problem in beginning , to solve this I created custom clickListener for views as described above.

这篇关于如何检测Gridview中点击位置的imageview?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆