2014-12-31 10 views
5

Sto provando a trasferire un'immagine da un elenco in un'attività a un'attività di dettaglio.Elementi condivisi Android con Picasso

Nell'attività di dettaglio l'immagine è più grande della lista e sto utilizzando Picasso per recuperare l'immagine dal server.

Il problema è che la prima volta che avvio l'attività di dettaglio, l'immagine transita bene ma non è ridimensionata né centrata. Quando torno indietro, l'immagine viene ridimensionata all'istante e se torno alla stessa attività di dettaglio, funziona come previsto.

Il particolare metodo di chiamata di attività:

public static void launch(Activity activity, View transitionView, 
          StoreProduct storeProduct) { 

    ActivityOptionsCompat options = 
      ActivityOptionsCompat.makeSceneTransitionAnimation(
        activity, transitionView, activity.getString(R.string 
          .transition_product_image)); 
    Intent intent = new Intent(activity, ProductDetailActivity.class); 
    intent.putExtra(PARAM_STORE_PRODUCT, storeProduct); 
    ActivityCompat.startActivity(activity, intent, options.toBundle()); 
} 

Il caricamento delle immagini Picasso nell'attività dettagli:

Picasso.with(this).load(product.imageUrl).fit().centerInside() 

Grazie per il vostro aiuto

risposta

0

tenta di utilizzare la trasformazione in base alle proprie esigenze.

Transformation transformation = new Transformation() { 

     @Override 
     public Bitmap transform(Bitmap source) { 
      int targetWidth = context.getResources().getDisplayMetrics().widthPixels - lessWidth; 
      if (source.getWidth() > targetWidth) { 
       double aspectRatio = (double) source.getHeight() 
         /(double) source.getWidth(); 
       int targetHeight = (int) (targetWidth * aspectRatio); 
       Bitmap result = Bitmap.createScaledBitmap(source, 
         targetWidth, targetHeight, false); 
       if (result != source) { 
        source.recycle(); 
       } 
       return result; 
      } 
      return source; 
     } 

     @Override 
     public String key() { 
      return "transformation" + " desiredWidth"; 
     } 
    }; 

questo oggetto può essere utilizzato come di seguito:

Picasso.with(context).load(strImageUrl).transform(transformation) 
      .into(imageView, new com.squareup.picasso.Callback() { 

       @Override 
       public void onSuccess() { 
        Log.d("Picasso", "ImageLoadSuccess");      
       } 

       @Override 
       public void onError() { 
        Log.d("PicassoHelper", "ImageLoadError"); 
        if (imageView!=null&&defaultBitmap!=null) { 
         imageView.setImageBitmap(defaultBitmap); 
        }      
       } 
      }); 

speranza che questo vi aiuterà nel vostro problema.

+0

Grazie per il suggerimento. L'ho implementato, ma ottengo sempre esattamente lo stesso risultato. L'immagine non viene ridimensionata, sebbene la bitmap restituita dal metodo di trasformazione sia correttamente dimensionata. – Leguman

+0

puoi cambiare il codice all'interno del metodo ** transform ** secondo le tue esigenze –

Problemi correlati