我正在开发一个概念验证,其中我有几个自定义视图在TableLayout中。当其中一个视图被点击时,我希望将该视图展开成一个新的 Activity,并实现与此处所见类似的效果。
从我的研究来看,似乎使用共享元素转换是实现这一目标的方法。但是,我无法正确地使它工作,并且想知道是否是因为我正在使用自己的自定义视图。
具体而言,淡入淡出效果是发生的,但缩放和平移动作却没有发生。请查看下面的GIF以了解我的情况。在示例中,我点击了左上角的圆圈,我希望将其转换为新活动中的完整圆圈。当按下返回按钮时,问题也可以看到。
我认为这是不正确的,因为视图必须被绘制,但是否有办法进一步自定义我的视图以使其工作?我发现这种类型的转换的所有示例都包括ImageViews、Buttons和TextViews。
下面是相关源代码。我的自定义视图很大,不包含任何特殊代码,只覆盖了onDraw()和onMeasure()方法。
MainActivity.java
package com.rscottcarson.circleschedulertest;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends Activity {
private View view1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view1 = findViewById(R.id.circle1);
view1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
// create the transition animation - the images in the layouts
// of both activities are defined with android:transitionName="profile"
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(MainActivity.this, view1, "profile");
// start the new activity
startActivity(intent, options.toBundle());
}
});
}
}
详情页.java
package com.rscottcarson.circleschedulertest;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class DetailActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
}
}
更改图像转换文件 change_image_trans.xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeTransform />
</transitionSet>
样式.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowContentTransitions">true</item>
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_trans</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementExitTransition">
@transition/change_image_trans</item>
</style>
</resources>