Android 活动之间的缩放图像视图转换

Android 活动之间的缩放图像视图转换,android,Android,我试图在两个活动之间创建共享的ImageView(例如,从活动A到活动B)。 以下步骤后会出现问题: 将图像共享到活动中 活动B中放大的图像 从B活动返回到A活动 观看视频 没有缩放没有问题:你可以观看 我的风格-v21: <style name="AppTheme.NoActionBar" > <item name="android:colorEdgeEffect">@color/primary</item> <item name="w

我试图在两个活动之间创建共享的ImageView(例如,从活动A到活动B)。 以下步骤后会出现问题:

  • 将图像共享到活动中
  • 活动B中放大的图像
  • 从B活动返回到A活动
  • 观看视频
  • 没有缩放没有问题:你可以观看

    我的风格-v21:

    <style name="AppTheme.NoActionBar" >
        <item name="android:colorEdgeEffect">@color/primary</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:buttonStyle">@style/MyButtonStyle</item>
    
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowExitTransition">@android:transition/explode</item>
    
        <item name="android:windowSharedElementEnterTransition">@transition/change_image_transform</item>
        <item name="android:windowSharedElementExitTransition">@transition/change_image_transform</item>
    </style>
    
    我的意图从活动A到活动B(影像活动)

    我知道发生这种情况是因为活动A上的图像大小和缩放类型不同,活动A上的it中心裁剪和固定大小,活动B上的it maxtrix和match_父对象。 如何在转换中调整动画大小?
    在我的例子中,在图像移动到它的位置后调整大小…

    你找到解决方案了吗?@gaurang不,我没有。。我只需调用
    image.resetZoom()
    将图像大小重置为
    onBackPressed()
    中的默认值,然后调用
    super.onBackPressed()你找到解决办法了吗?@gaurang不,我没有。。我只需调用
    image.resetZoom()
    将图像大小重置为
    onBackPressed()
    中的默认值,然后调用
    super.onBackPressed()
    
    <?xml version="1.0" encoding="utf-8"?>
    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <changeImageTransform/>
    </transitionSet>
    
    public class ImageActivity extends AppCompatActivity {
    
    public static String IMAGE_URL = "image_url";
    public static String TEXT = "text";
    private ProgressBar spinner;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            getWindow().setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.move));
        }
    
        setContentView(R.layout.activity_image);
    
        ImageView image = (ImageView) findViewById(R.id.image);
        TextView tvName = (TextView) findViewById(R.id.tvName);
        spinner = (ProgressBar) findViewById(R.id.pbLoading);
    
        String imageUrl = getIntent().getStringExtra(IMAGE_URL);
        String text = getIntent().getStringExtra(TEXT);
    
        if (text != null)
            tvName.setText(text);
        else tvName.setVisibility(View.GONE);
    
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)
                .displayer(new FadeInBitmapDisplayer(300))
                .imageScaleType(ImageScaleType.NONE)
                .build();
    
        ImageLoader.getInstance().displayImage(imageUrl, image, options, simpleImageLoadingListener);
    }
    
    SimpleImageLoadingListener simpleImageLoadingListener = new SimpleImageLoadingListener(){
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            spinner.setVisibility(View.VISIBLE);
        }
    
        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            String message = null;
            switch (failReason.getType()) {
                case IO_ERROR:
                    message = "Input/Output error";
                    break;
                case DECODING_ERROR:
                    message = "Image can't be decoded";
                    break;
                case NETWORK_DENIED:
                    message = "Downloads are denied";
                    break;
                case OUT_OF_MEMORY:
                    message = "Out Of Memory error";
                    break;
                case UNKNOWN:
                    message = "Unknown error";
                    break;
            }
            Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
    
            spinner.setVisibility(View.GONE);
        }
    
        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            spinner.setVisibility(View.GONE);
        }
    };
    }
    
       Intent goToImage = new Intent(InfoActivity.this, ImageActivity.class);
            goToImage.putExtra(ImageActivity.IMAGE_URL, cafe.getImageUrl());
            goToImage.putExtra(ImageActivity.TEXT, cafe.getName());
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(InfoActivity.this,
                        imgCompany, "image");
                startActivity(goToImage, options.toBundle());
            } else {
                startActivity(goToImage);
            }