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

我将onClickListener设置为菜单项(ImageView),并切换boolean值以检查视图是否已满。我遇到的一个问题是,当过渡结束时,我必须重新分配onClickListener,因为新的布局正在过渡中膨胀。但是,当我在三个按钮可见后单击时,它不会注册我的单击(通过调试我检查了)。
下面是代码文件:
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文件:
活动布局:
<?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):
<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):
<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错误/警告。
发布于 2016-11-16 08:58:15
我的项目也是如此--这是我发现的:
当你使用场景转换时会发生什么,你会有2个视图集来动画。让我们说集A(开始布局)和设置B(结束布局)。您在代码中所做的是在集合A上设置单击监听器,但是在场景转换之后,设置A不再出现在屏幕上。
在您的转换将解决您的问题之后,再次设置您的单击监听器。(当您使用内容值的CustomView时,也需要“复制”。
为此,请使用Scene.setEnterAction(可运行)方法,
scene.setEnterAction(new Runnable(){
@override
void run()
{
goButton = (ImageView) scene.getSceneRoot.findViewById( R.id.goButton );
goButton.setOnClickListener( this );
}
});https://stackoverflow.com/questions/40604341
复制相似问题