2016-11-15 9 views
1

私はtutorialをフォローしていて、自分で何かしたいと思っています。このチュートリアルでは、アニメーション化する方法を教えてくれました。だから私はそれをしました、今私は前のビュー(シーン)を復元したいです。まず最初に、新しいビューをフェードインしても問題ありませんが、リストア/リセットは失敗します。それは、このように振る舞う必要があります:私は、メニューストリップ(ImageViewの)へonClickListenerを設定し、ビューがいっぱいであるかないかどうかを確認するためにboolean値を切り替えていますトランジションフレームワークを使用してシーンを復元またはリセットする

enter image description here

。私が遭遇した1つの問題は、新しいレイアウトが移行時に膨らんでいるので、tansitionが終了するときにonClickListenerを再割り当てしなければならないということでした。しかし、3つのボタンが表示された後でクリックすると、クリックが(登録されていない場合はチェックして)登録されません。ここ

は、コードファイルです:

活動のレイアウト:

<?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> 

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ファイルがあります

Trans itionレイアウト(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 - 遷移2番はすでに

1Aが起こっている場合booleanをチェック - 移行、更新boolean

2 - booleanを更新し、前のシーンを呼び出す - 移行は

2Aが起こった場合。

でブレークポイントに到達することができないので、でこの問題が発生していると思われます。登録されていれば、期待通りに動作するかもしれません。 logcatエラー/警告はありません。

答えて

2

私は、これは私が見つけたものである私のプロジェクトと同じだった:

あなたがシーン遷移を使用するときにアニメーション化します2つのビューセットを持って何が起こりました。 A(レイアウトの開始)とB(終了レイアウト)の設定を言うことができます。あなたのコードで何をするかは、セットAでクリックリスナーを設定することです。しかし、シーントランジションの後、セットAはもうスクリーンに表示されません。

あなたの移行があなたの問題を解決した後、再度クリックリスナーを設定してください。 (あなたが内容は、あなたが「コピー」aswellに必要な値という。

これを達成するために、Scene.setEnterAction(Runnable)方法、

scene.setEnterAction(new Runnable(){ 

@override 
void run() 
{ 

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


    goButton.setOnClickListener(this); 

} 

}); 
+0

を使用するこんにちは、私はこれを解決し、これを達成するために、更新するのを忘れて、私たちはのCustomViewを使用両方のSceneオブジェクトでScene.EnterAction(Runnable ...)を使用してください。あなたの答えを編集すれば、私はそれを受け入れます。 – Talha

関連する問題