首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用转换框架还原或重置场景

使用转换框架还原或重置场景
EN

Stack Overflow用户
提问于 2016-11-15 07:32:34
回答 1查看 680关注 0票数 1

我在跟踪一个教程,想用它做一些我自己的事情。这篇教程向我展示了如何动画。所以我就这么做了,现在我想恢复以前的景色。第一件事是在新视图中淡出,这很好,但是恢复/重置失败。It 应该是这样的:

我将onClickListener设置为菜单项(ImageView),并切换boolean值以检查视图是否已满。我遇到的一个问题是,当过渡结束时,我必须重新分配onClickListener,因为新的布局正在过渡中膨胀。但是,当我在三个按钮可见后单击时,它不会注册我的单击(通过调试我检查了)。

下面是代码文件:

代码语言:javascript
复制
public class HorizotalViewActivity extends AppCompatActivity implements Transition.TransitionListener, View.OnClickListener
{


    boolean viewing = false;
    ImageView goButton;
    Scene scene, restoreScene;

    @Override
    protected void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_horizotal_view );

        ViewGroup sceneView = (ViewGroup) findViewById( R.id.sceneView );


        scene = Scene.getSceneForLayout( sceneView,
                R.layout.transition_example2, this );

        restoreScene = Scene.getSceneForLayout( sceneView,
                R.layout.transition_example, this );


        goButton = (ImageView) findViewById( R.id.goButton );


        goButton.setOnClickListener( this );


    }



    @Override public void onTransitionStart( Transition transition )
    {

    }

    @Override public void onTransitionEnd( Transition transition )
    {
        goButton = (ImageView) findViewById( R.id.goButton );


        goButton.setOnClickListener( this );
    }
//...

    @Override public void onClick( View view )
    {
        if ( !viewing )
        {
            TransitionManager.go( scene );
            viewing = true;
        }
        else
        {


            TransitionManager.go( restoreScene );

            //goToScene( restoreScene );


            viewing = false;
        }
    }
}

以下是xml文件:

活动布局:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/sceneView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.lgvalle.material_animations.HorizotalViewActivity">
<include layout="@layout/transition_example"/>

</LinearLayout>

默认布局(transition_example.xml):

代码语言:javascript
复制
 <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scene"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/goButton"
           android:src="@drawable/menu"
            android:layout_width="60dp"
            android:layout_height="60dp" />

    </LinearLayout>

过渡布局(transition_example2.xml):

代码语言:javascript
复制
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scene"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/goButton"
        android:src="@drawable/menu"

        android:layout_width="60dp"
        android:layout_height="60dp" />

    <ImageView
        android:id="@+id/play"
        android:layout_marginLeft="15dp"
        android:src="@drawable/play"
        android:layout_width="60dp"
        android:layout_height="60dp" />
    <ImageView
        android:id="@+id/repeat"
        android:layout_marginLeft="15dp"
        android:src="@drawable/repeat"
        android:layout_width="60dp"
        android:layout_height="60dp" />
    <ImageView
        android:id="@+id/share"
        android:layout_marginLeft="15dp"
        android:src="@drawable/share"
        android:layout_width="60dp"
        android:layout_height="60dp" />


</LinearLayout>

我看不出我的逻辑有什么问题,它的自我解释,

1-检查boolean是否已发生第2号转换

做转换,更新boolean

2-如果发生过渡

2A -呼叫前一幕,更新boolean

现在,我猜onCickListener存在这个问题,因为一旦调用了onClickListener,就无法到达TransitionManager.go()中的断点,如果它得到注册,它可能会像预期的那样工作。没有logcat错误/警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 08:58:15

我的项目也是如此--这是我发现的:

当你使用场景转换时会发生什么,你会有2个视图集来动画。让我们说集A(开始布局)和设置B(结束布局)。您在代码中所做的是在集合A上设置单击监听器,但是在场景转换之后,设置A不再出现在屏幕上。

在您的转换将解决您的问题之后,再次设置您的单击监听器。(当您使用内容值的CustomView时,也需要“复制”。

为此,请使用Scene.setEnterAction(可运行)方法,

代码语言:javascript
复制
scene.setEnterAction(new Runnable(){

@override
void run()
{

   goButton = (ImageView) scene.getSceneRoot.findViewById( R.id.goButton );


   goButton.setOnClickListener( this );

}

});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40604341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档