2016-10-04 57 views
0

我在這裏得到了GridViewAdapter的查看方法。如何在Gridview中檢測點擊位置的imageview?

我在這裏想要的是,每當我點擊gridview中的項目時,我點擊的位置圖片應該縮小以產生它被添加到購物車的效果。

但是,在單擊位置縮小圖像的同時,縮小了單元格的其他圖像(在滾動視圖時從Viewholder創建的最後一個圖像)。任何幫助是極大的讚賞。謝謝!!!

@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"); 
    } 
+0

http://stackoverflow.com/questions/29957414/expand-an-image-in-gridview-when-clicked-in-android –

+0

請給我圖片視圖實際上你想實現什麼? – dipali

回答

1

您可以實現自己的自定義OnClickListener,並且可以將每個gridview項的每個onclick的id/tag/position關聯起來。下面

item.setOnclickListener(new GridItemClick(position)); 

自定義Click事件類:

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 
    } 

} 

我開始有同樣的問題,要解決這個我創建的自定義clickListener的觀點,如上所述。

1

這是因爲默認行爲重新使用虛擬視圖而發生的。採取臨時數組列表存儲點擊位置,並確認相同的ArrayList它是否包含在getView方法中的特定位置或不

ArrayList<String> selectedPosition = new ArrayList<String>(); 

現在更新getView()方法按如下:

@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(); 


     //Added Change here...Check if arraylist contains selectedposition or not? 

     if(selectedPosition.contains(String.valueOf(position))) 
       shrinkImage(holder.productImage); 
     else 
      //Nothing 



     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(); 


      //Simply store and check selectedPosition 

      if(selectedPosition.contains(String.valueOf(position))) 
       selectedPosition.remove(String.valueOf(position)); 
      else 
       selectedPosition.add(String.valueOf(position)); 

      //And then update adapter 
      notifyDataSetChanged(); 
     } 

    }); 


     return row; 
    } 

更新你的shirnkImage方法並使用通過參數傳遞的持有者圖像的參考。

public void shrinkImage(ImageView productImage){ 
     // 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. 
     productImage.startAnimation(fade_in); 

     Log.e("fade","fade out"); 
    } 
相關問題