2014-12-31 13 views
5

Ich versuche, ein Bild Transit von einer Liste in einer Aktivität zu einer Detailaktivität zu machen.Android freigegebene Elemente mit Picasso

In der Detailaktivität ist das Bild größer als in der Liste und ich benutze Picasso, um das Bild vom Server abzurufen.

Das Problem ist, dass das erste Mal, wenn ich die Detailaktivität starte, das Bild gut durchläuft, aber nicht verkleinert oder zentriert wird. Wenn ich zurück gehe, wird das Bild sofort skaliert, und wenn ich zu der gleichen Detailaktivität zurückkomme, funktioniert es wie erwartet.

Die Detail Aktivität Call-Methode:

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

Der Picasso-Bild Laden im Detail Aktivität:

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

Danke für Ihre Hilfe

Antwort

0

try Transformation auf Ihrem Bedarf zu verwenden, basieren.

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

hoffen, dass diese in Ihrem Problem helfen:

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"; 
     } 
    }; 

dieses Objekt kann wie folgt verwendet werden.

+0

Danke für Ihren Vorschlag. Ich habe es implementiert, aber ich bekomme immer noch genau das gleiche Ergebnis. Das Bild wird nicht in der Größe geändert, obwohl die von der Transformationsmethode zurückgegebene Bitmap korrekt bemessen ist. – Leguman

+0

Sie können den Code innerhalb dieser ** transform ** -Methode gemäß Ihren Anforderungen ändern –

Verwandte Themen