归志宁无五亩园,读书本意在元元。这篇文章主要讲述使用Material Design在Android Lollipop中的ListView中的活动过渡动画相关的知识,希望能为你提供帮助。
我正在使用Master / Detail模式,目前正在转向android Lollipop。如果我点击ListView中的某个项目,我想拥有一个new activity transistions。动画正在运行,但我不知道如何在共享元素(在我的情况下是ImageView)之间制作某个动画。
如果我单击自定义ListView中的一行(带有图像和文本),则转换应切换到DetailActivtiy中的图像。它应该在这个视频中看起来像:http://youtu.be/RhiPJByIMrM?t=2m41s或者这个视频:http://youtu.be/XkWI1FKKrs4
我已将此代码添加到我的两个ImageView中:
<
ImageView
android:transitionName="@string/transition_title_image"/>
【使用Material Design在Android Lollipop中的ListView中的活动过渡动画】我的ListActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >
= 21) {
//To enable window content transitions in your code instead, call the Window.requestFeature() method:
getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS);
Transition ts_enter = new Slide();
//Slide();
//Explode();
Transition ts_exit = new Explode();
ts_enter.setDuration(2000);
ts_exit.setDuration(2000);
/*
If you have set an enter transition for the second activity,
the transition is also activated when the activity starts.
*/
getWindow().setEnterTransition(ts_enter);
getWindow().setExitTransition(ts_exit);
}
super.onCreate(savedInstanceState);
使用此方法调用我的DetailActivity:
if (Build.VERSION.SDK_INT >
= 21) {
Intent intent = new Intent(ArticleListActivity.this, ArticleDetailActivity.class);
intent.putExtra("pos", id);
intent.putExtra("articleList", articleList);
String transitionName = getString(R.string.transition_title_image);
ImageView article_thumb = (ImageView) findViewById(R.id.article_thumb);
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(ArticleListActivity.this,
article_thumb,// The view which starts the transition
transitionName// The transitionName of the view we’re transitioning to
);
ActivityCompat.startActivity(ArticleListActivity.this, intent, options.toBundle());
}
我的DetailActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >
= 21) {
//To enable window content transitions in your code instead, call the Window.requestFeature() method:
getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS);
Transition ts_enter = new Slide();
//Slide();
//Explode();
Transition ts_exit = new Explode();
//Slide();
//Explode();
ts_enter.setDuration(2000);
ts_exit.setDuration(2000);
getWindow().setEnterTransition(ts_enter);
getWindow().setExitTransition(ts_exit);
}
super.onCreate(savedInstanceState)
;
答案试试这个:
- 首先,确保在第一个活动中为每个
ImageView
提供一个唯一的转换名称。如果所有图像视图具有相同的转换名称,则框架将不知道动画开始时选择哪一个,并且转换将无法正常运行。 - 单击
ImageView
时,将其唯一的转换名称作为Intent
extra传递给详细信息活动。 - 在详细信息活动的
onCreate()
方法中,从意图包中检索名称,并将其设置为ImageView
的转换名称。
推荐阅读
- 带网格标题的Android网格视图
- 如何解决Visual Studio Form Render异常(可以设计Form类,但不是文件中的第一类)
- 如何在WinForms中使用C#在Windows的System32目录中运行任何可执行文件
- 跨平台与单平台开发-这是你应该知道的
- 如何确定数字在C中是否强
- PHP 7.3提供的主要功能
- 如何解决C#异常(必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用,请确保你的Main函数已在其上标记了STAThreadAttribute)
- 如何在Symfony 4中将Twig Extension注册为不带自动接线的服务
- 如何在Symfony 4中使用服务检索项目的根目录和其他容器参数