以编程方式将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());
如何将Toolbar
( TextView
?)标题传递给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()); }