【问题标题】:Android Shared Element Transitions not working only activity blinksAndroid共享元素转换不起作用仅活动闪烁
【发布时间】:2018-07-24 17:03:56
【问题描述】:

我正在研究 android 共享元素转换。我尝试了下面的代码,只有第二个活动会闪烁打开。我在两个图像视图中都传递了相同的转换名称,但仍然无法正常工作。

 imageview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            View imageView = findViewById(R.id.imageView);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                Intent intent = new Intent(StartActivity.this, EndActivity.class);
                Pair<View, String> pair1 = Pair.create(imageView, imageView.getTransitionName());

                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(StartActivity.this, pair1);
                startActivity(intent, options.toBundle());
            } else {
                Intent intent = new Intent(StartActivity.this, EndActivity.class);
                startActivity(intent);
            }


        }
    });

【问题讨论】:

  • 只是为了弄清楚是哪一个问题?共享元素过渡是不工作还是工作但闪烁?
  • 活动闪烁并进入第二个活动,图像视图也没有进行任何转换。
  • 您是否也为第二个活动的共享元素设置了TransitionName?
  • 不,我在 xml 中使用属性 android:transitionName 定义它。
  • 使用此方法stackoverflow.com/a/9166354/12464160 使用 1000ms 延迟启动活动

标签: android android-animation


【解决方案1】:

您需要压缩并以捆绑包的形式将图像从一个活动传递到另一个活动。确保两个图像视图(在活动 A 和活动 B 中)具有相同的 android:transitionName。

在imageview的onClick方法里面的Activity A里面做这个:

Intent intent = new Intent(MainActivity.this, DetailActivity.class);
            ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(MainActivity.this,
                            imageView,
                            "trans");
            imageView.buildDrawingCache();
            Bitmap image = Bitmap.createScaledBitmap(imageView.getDrawingCache(), 300, 300, true);
            Bundle extras = new Bundle();
            extras.putParcelable("imagebitmap", image);
            intent.putExtras(extras);
            startActivity(intent, options.toBundle());

给图像视图一个过渡名称。这里我给出了 android:transitionName = "trans"。

<ImageView
            android:id="@+id/country_photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            android:contentDescription="@string/action_settings"
            android:transitionName="trans"
            tools:ignore="UnusedAttribute"
             />

然后在Activity B的onCreate()方法中:

        imageView = findViewById(R.id.iv_detail_image);
        Bundle extras = getIntent().getExtras();
        Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");
        imageView.setImageBitmap(bmp);

确保Activity B中imageview的android:transitionName属性相同。这意味着对于 Activity B 中的图像视图,android:transitionName 应该是“trans”。

 <ImageView
        android:id="@+id/iv_detail_image"
        android:transitionName="trans"
        android:scaleType="fitCenter"
        android:layout_width="match_parent"
        tools:ignore="UnusedAttribute"
        android:layout_height="380dp"
       />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多