Android与Picasso的共享元素

5
我正在尝试让一张图片从一个活动的列表中转移到详细活动中。
在详细活动中,图片比列表中的图片要大,我正在使用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图像:

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

感谢您的帮助。
1个回答

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

希望这能对你的问题有所帮助。

谢谢您的建议。我已经实现了它,但是我仍然得到完全相同的结果。尽管通过transform方法返回的Bitmap大小正确,但图像未被调整大小。 - Leguman
你可以根据自己的需求更改transform方法中的代码。 - Amrut Bidri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接