본문 바로가기
Android/애니메이션

[Android] Transition Animation에서 주의사항

by 붕어사랑 티스토리 2022. 2. 7.
반응형

Transition Animation을 만들어서 firstScene과 secondScene을 왔다 갔다 하는 작업을 하는데 문제가 생겼다.

 

 

첫번째 씬 버튼에 리스너를 달아주고

세컨드 씬에서 다시 첫번째 씬으로 돌아오고

다시 첫번째 씬에서 버튼을 누르면 버튼이 먹통되는 문제였다.

 

ViewGroup sceneRoot = getSCInf().getAct().findViewById(R.id.scene_root);
Scene firstScene = Scene.getSceneForLayout(sceneRoot,R.layout.first, this);
Scene secondScene = Scene.getSceneForLayout(sceneRoot,R.layout.second, this);
getSCInf().getAct().getLayoutInflater().inflate(R.layout.first, sceneRoot);

Button demoBtn = getSCInf().getAct().findViewById(R.id.btn_demo);
demoBtn.setOnClickListener(v -> {
	TransitionManager.go(secondScene);
});

firstScene.setEnterAction(
	() -> {
		demoBtn.setOnClickListener(v -> {
			TransitionManager.go(secondScene);
		});
	}
);

 

 

이유는 다음과 같다

 

  • 처음 버튼을 가져올때 demoBtn으로 받아왔다. 헌데 이를 setEnterAction에서 그대로 사용하였다.
  • 하지만 demoBtn과 세컨드씬에서 돌아오고 나서 다시 생기는 버튼은 서로 다른 버튼이다
  • 고로 두 버튼의 변수를 다르게 해 줘서 처리해 주어야 한다

 

 

 

 

아래처럼 demoBtn2로 변수를 다르게 해 주니 해결되었다.

 

ViewGroup sceneRoot = getSCInf().getAct().findViewById(R.id.scene_root);
Scene firstScene = Scene.getSceneForLayout(sceneRoot,R.layout.first, this);
Scene secondScene = Scene.getSceneForLayout(sceneRoot,R.layout.second, this);
getSCInf().getAct().getLayoutInflater().inflate(R.layout.first, sceneRoot);

Button demoBtn = getSCInf().getAct().findViewById(R.id.btn_demo);
demoBtn.setOnClickListener(v -> {
	TransitionManager.go(secondScene);
});

firstScene.setEnterAction(
	() -> {
		Button demoBtn2 = getSCInf().getAct().findViewById(R.id.btn_demo);
		demoBtn2.setOnClickListener(v -> {
			TransitionManager.go(secondScene);
		});
	}
);
반응형

댓글