Je travaille sur une démonstration de faisabilité dans laquelle j'ai quelques vues personnalisées dans une TableLayout. Lorsque l'un des affichages est cliqué, je veux animer la vue en expansion dans une nouvelle activité. L'effet que je veux atteindre est similaire à ce que l'on voit here. D'après mes recherches, il semblerait que la façon de procéder soit shared element Transitions. Cependant, je ne peux pas le faire fonctionner correctement et je me demande si c'est parce que j'utilise mon propre View personnalisé. Plus précisément, les fondus se produisent, mais les mouvements de mise à l'échelle et de translation ne le sont pas. Vérifiez le GIF ci-dessous pour voir où je suis. Dans l'exemple, je clique sur le cercle supérieur gauche, que je veux transformer en cercle complet dans la nouvelle activité. Le problème peut également être vu lorsque le bouton de retour est pressé.Utilisation des transitions d'activité SharedElement avec une vue personnalisée
je crois qu'il est incorrect parce que la vue doit être établi, mais est-il un moyen de personnaliser mon point de vue plus pour faire ce travail? Tous les exemples que j'ai trouvés de ce type de transition ont consisté en ImageViews, Boutons et TextViews.
Vous trouverez ci-dessous la source appropriée. Ma vue personnalisée est grande et ne contient aucun code spécial, elle remplace simplement onDraw() et 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());
}
});
}
}
DetailActivity.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>
styles.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>