Yes it is possible:
classes extending ViewCompat can call setTransitionName(String name)
eg:
myToolbar.setTransitionName("ToolbarTransition");
UPDATE seems like you are specifically trying to share the header, so I would do something like the following:
Example xml for MainActivity:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.divshark.toolbaranimation.MainActivity" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <android.support.v7.widget.AppCompatTextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/white" android:text="Activity Title" /> </android.support.v7.widget.Toolbar> <android.support.v7.widget.AppCompatButton android:id="@+id/btnNext" android:text="Next" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
Then in your Activity task, which view is:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); final AppCompatTextView mTextView = (AppCompatTextView) mToolbar.findViewById(R.id.tv_title); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mTextView.setTransitionName("SimpleTransition"); } AppCompatButton mBtnNext = (AppCompatButton) findViewById(R.id.btnNext); mBtnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent secondActivity = new Intent(MainActivity.this, SecondActivity.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, mTextView, mTextView.getTransitionName()); startActivity(secondActivity, options.toBundle()); } else { startActivity(secondActivity); } } }); } }
then in your SecondActivity:
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); AppCompatTextView mTextView = (AppCompatTextView) findViewById(R.id.tv_title); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mTextView.setTransitionName("SimpleTransition"); } } }
using this xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.AppCompatTextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:layout_centerInParent="true" android:textColor="@android:color/black" android:text="Activity Title" /> </RelativeLayout>
as you can see that you are allowed to programmatically call setTransitionName (string name) using ViewCompat views
Good luck and happy coding!
inner_class7
source share