Pracuję nad proof-of-concept, w którym mam kilka niestandardowych widoków w TableLayout. Po kliknięciu jednego z widoków chcę animować widok rozszerzający na nową aktywność. Efekt, który chcę osiągnąć, jest podobny do tego, co jest widoczne: here.Używanie współdzielonych operacji przejścia z niestandardowym widokiem
Z moich badań wydaje się, że sposób jest to zrobić z shared element Transitions. Jednak nie mogę go uruchomić poprawnie i zastanawiam się, czy to dlatego, że używam własnego widoku niestandardowego.
W szczególności dochodzi do zaników, ale ruchy skalujące i translacyjne nie są. Sprawdź GIF poniżej, aby zobaczyć, gdzie jestem. W tym przykładzie klikam lewy górny okrąg, który chcę przekształcić w pełne koło w nowym działaniu. Problem można również zauważyć po naciśnięciu przycisku Wstecz.
Uważam, że jest błędna, ponieważ widok musi być sporządzony, ale czy jest jakiś sposób, aby dostosować moim zdaniem dodatkowo do tej pracy? Wszystkie przykłady, które udało mi się znaleźć w tego rodzaju przejściu, zawierały ImageViews, Buttons i TextViews.
Poniżej znajduje się odpowiednie źródło. Mój widok niestandardowy jest duży i nie zawiera żadnego specjalnego kodu, po prostu przesłania onDraw() i 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>