アクティビティ遷移を実装しようとしていますが、効果を確認できません。これが私の最初のアクティビティのコードです:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_architecture);
setUpWindowAnimations();
}
private void setUpWindowAnimations() {
if (Android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "Fade called");
Fade fade = new Fade(2);
fade.setDuration(3000);
getWindow().setExitTransition(fade);
}
}
2番目のアクティビティのコードは次のとおりです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
setUpWindowAnimations();
}
private void setUpWindowAnimations() {
if (Android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "slide called");
Slide slide = new Slide(Gravity.LEFT);
slide.setDuration(3000);
getWindow().setEnterTransition(slide);
}
}
フェードアウトアニメーションを設定しましたが、フェードはありません。また、スライドはデフォルトの方法で機能します。つまり、方向は左ではなく下になります。
ここ は私のvalues/style.xml
and here is my v21/styles.xml
。
これが私のAndroidManifest.xml
:
<application
Android:name=".MyApplication"
Android:allowBackup="true"
Android:hardwareAccelerated="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:largeHeap="true"
Android:theme="@style/AppTheme">
これらのトランジションが機能しない理由と、それらを機能させる方法。 SOエディターがxmlを正しく表示していなかったため、 paste.ubuntu.com を使用しました。
_Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
this.startActivity(intent,bundle);
_
2つのアクティビティの間にインテントを設定した後、これらの2行を追加すると、これが機能します。
startActivity(intent)
メソッドを介してアクティビティを開始するだけではなく、バンドルを使用してアクティビティ間の遷移を指定する必要があります。
setContentView
の前にsetUpWindowAnimations();
を宣言します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpWindowAnimations();
setContentView(R.layout.activity_architecture);
}
private void setUpWindowAnimations() {
if (Android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "Fade called");
Fade fade = new Fade(2);
fade.setDuration(3000);
getWindow().setExitTransition(fade);
}
}
その他の解決策
xmlTransition
を作成し、このxmlコードをそこに配置します
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="1000"
Android:interpolator="@Android:interpolator/accelerate_decelerate">
<fade Android:fadingMode="fade_out"/>
<slide Android:slideEdge="bottom"/>
</transitionSet>
これはApi21
のスタイルである必要があります
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowContentTransitions">true</item>
<item name="Android:windowTransitionBackgroundFadeDuration">1000</item>
</style>
</resources>
次に、このコードをアクティビティのsetCreateView
の前に配置します
if (Build.VERSION.SDK_INT >= 21) {
TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.transition_a);
getWindow().setExitTransition(transition);
}
これは、setCreateView
の前に他のアクティビティに含める必要があります
if(Build.VERSION.SDK_INT >= 21){
Slide slide = new Slide();
slide.setDuration(1000);
getWindow().setEnterTransition(slide);
}