以编程方式将transitionName添加到工具栏标题(Android)

是否可以以编程方式将xml属性transitionName设置为Toolbar标题,然后使用ActivityOptionsCompat将其用于动画?

这就是我声明Toolbar

  Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); myToolbar.setTitle("title"); 

这是我的xml声明:

  

为了添加动画,我必须使用以下代码:

 ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, albumCoverImageView, // The view which starts the transition (Should be myToolbar title) transitionName // The transitionName of the view ); ActivityCompat.startActivity(activity, intent, options.toBundle()); 

如何将ToolbarTextView ?)标题传递给makeSceneTransitionAnimation函数?

是的,这是可能的:

扩展ViewCompat类能够调用setTransitionName(String name)

例如:

 myToolbar.setTransitionName("ToolbarTransition"); 

更新似乎你特意尝试分享标题,所以我会做类似以下的事情:

MainActivity的示例xml:

        

然后在您的Activity引用中查看该视图:

 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); } } }); } } 

然后在你的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"); } } } 

使用这个xml:

     

如您所见,您可以使用ViewCompat视图以编程方式调用setTransitionName(String name)

祝你好运,快乐的编码!

您可以通过以下代码获取Toolbar标题的TextView实例并设置转换:

 private Toolbar mToolbar; private TextView mTextViewToolbarTitle; @Override protected void onCreated(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); mToolbar = (Toolbar) findViewById(R.id.your_toolbar_id); setSupportActionBar(mToolbar); mTextViewToolbarTitle = getTextViewTitle(mToolbar); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mTextViewTitle.setTransitionName(getString(R.string.your_transition_name)); } } 

在您的活动中复制此方法:

 public static TextView getTextViewTitle(Toolbar toolbar){ TextView textViewTitle = null; for(int i = 0; i 

然后通过以下方式开始您的新活动:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, mTextViewToolbarTitle, getString(R.string.your_transition_name)) .toBundle()); } else { startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle()); }