2014-12-31 3 views
5

Я пытаюсь сделать транзит изображения из списка в одном действии для подробного действия.Общие элементы Android с Picasso

В подробном действии изображение больше, чем в списке, и я использую Picasso для извлечения изображения с сервера.

Проблема в том, что в первый раз, когда я запускаю активность детали, изображение проходит хорошо, но не изменяется и не центрируется. Когда я вернусь, изображение будет мгновенно изменено, и если я вернусь к той же самой детализированной деятельности, она работает так, как ожидалось.

Деталь метод активности вызова:

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

Загрузка Пикассо изображение в деталях деятельности:

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

Спасибо за вашу помощь

ответ

0

попытаться использовать преобразование зависимости от ваших потребностей.

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

этот объект может быть использован, как показано ниже:

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

надеюсь, что это поможет в вашей проблеме.

+0

Спасибо за ваше предложение. Я реализовал его, но я все равно получаю точно такой же результат. Изображение не изменяется, хотя битмап, возвращенный методом преобразования, имеет правильный размер. – Leguman

+0

вы можете изменить код внутри этого метода ** transform ** в соответствии с вашими требованиями –

Смежные вопросы