Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android棒棒糖材质设计列表视图中的活动转换动画_Android_Android Listview_Android 5.0 Lollipop_Material Design_Activity Transition - Fatal编程技术网

Android棒棒糖材质设计列表视图中的活动转换动画

Android棒棒糖材质设计列表视图中的活动转换动画,android,android-listview,android-5.0-lollipop,material-design,activity-transition,Android,Android Listview,Android 5.0 Lollipop,Material Design,Activity Transition,我正在使用主/细节模式,目前正在转向Android棒棒糖。如果我单击ListView中的某个项目,我希望有一个。动画正在工作,但我不知道如何在共享元素(在我的例子中是ImageView)之间制作特定动画 如果单击自定义ListView中的一行(带有图像和文本),则转换应切换到my DetailActivtiy中的图像。在本视频中应该是这样的:或本视频: 我已将此代码添加到两个ImageView中: <ImageView android:transitionName=

我正在使用主/细节模式,目前正在转向Android棒棒糖。如果我单击ListView中的某个项目,我希望有一个。动画正在工作,但我不知道如何在共享元素(在我的例子中是ImageView)之间制作特定动画

如果单击自定义ListView中的一行(带有图像和文本),则转换应切换到my DetailActivtiy中的图像。在本视频中应该是这样的:或本视频:

我已将此代码添加到两个ImageView中:

<ImageView
            android:transitionName="@string/transition_title_image"/>
使用此方法调用my 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());
    }
@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)
我的活动:

    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());
    }
@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
    的转换名称


  • 好的,但是你没有解释问题是什么。动画现在看起来像什么?出现故障了吗?在您的代码中,您已经使用<代码> SETICANTURSTATION()/<代码>和<代码> SETXITIVITION()/代码>设置内容转换,但是您在哪里设置共享元素转换?如果您在描述您所看到的问题有困难时,您可能需要考虑张贴您自己的应用程序的视频。Android Studio有一个非常有用的视频捕获工具,可能会派上用场。可能有用。只是一个调整:您不应该在intentextra中使用唯一的转换名称。您应该使用“详细信息”活动中使用的转换名称。唯一的名称会自动关联,这样当您返回时,即使重新创建活动,框架也会知道要与共享元素关联的视图。ApiDemos有一个简单的例子应该会有所帮助。@GeorgeMount我不确定我是否完全理解你的意思。“ApiDemos”是指这个示例项目吗@乔治山我找到了阿皮德莫斯。但是,我仍然不明白为什么在这种情况下需要使用
    SharedElementCallback
    映射共享元素。。。将共享元素传递给
    Intent
    中的被调用活动会有什么问题?您的意思是说,如果系统破坏并重新创建某个活动,是否有可能出现某种与状态丢失相关的错误?我遗漏了什么吗?当您从详细信息活动转到列表活动时,框架必须知道列表活动中的哪个视图作为共享元素。当你“回头”的时候,它可以帮你找到答案,因为你在前进的过程中使用了它。继续进行时,您可能知道列表活动中的特定transitionName,但更有可能的是,您正在共享一个更通用的名称,并且由列表活动分配正确的视图。例如,如果您不在同一个应用程序中,您就无法了解远程应用程序的命名方案(除了商定的共享元素名称)。啊,好吧。。。对于存在于不同应用程序中的活动,这是一个很好的观点。谢谢你把它清理干净!