도전과제 15 : 입력 화면의 애니메이션 (Do it 안드로이드 앱 프로그래밍) [JAVA]
반응형

 

도전과제 15

고객 정보 입력 화면을 만들고 이 화면이 보이거나 사라질 때 애니메이션이 동작하도록 해보세요.

  1. 새로운 액티비티를 추가하고 고객 정보 입력이 가능하도록 만듭니다. 고객 정보 입력 화면에서는 이름과 나이, 전화번호를 입력받도록 만듭니다.
  2. MainActivity에서 [입력 화면으로] 버튼을 누르면 고객 정보 입력 화면이 보이도록 합니다. 이 과정에서 오른쪽에서 왼쪽으로 나타나는 애니메이션을 적용합니다.
  3. 고객 정보 입력 화면에서 [저장] 버튼을 누르면 MainActivity로 돌아오도록 합니다. 이 과정에서도 애니메이션을 적용합니다.

참고할 점
화면 전체에 애니메이션을 적용할 수 있습니다.

 

풀이

레이아웃은 간단하게 main화면과, 버튼을 누르면 나올 고객정보 입력 창을 만들었다. 
애니메이션을 만들어야 하는데, 애니메이션은 우선 res/anim 폴더에 3개의 xml 파일로 구성하였다.

<!--move_right.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="100%p"
        android:duration="500"
        android:fillAfter="true"
        android:repeatCount="0"
        />
</set>

<!--move_left.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0%p"
        android:duration="500"
        android:fillAfter="true"
        android:repeatCount="0"
        />

</set>

<!--not_move.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="0" android:duration="500"/>
</set>

오른쪽으로 화면이 이동하는 move_right와 왼쪽으로 화면이 이동하는 move_left, 그리고 안움직이는 not_move이다.
여기서 fromXDelta -> toXDelta까지 이동한다는 뜻이고, duration은 지속시간. fillAfter는 애니메이션  이후 애니메이션 마지막 결과를 적용시킬 것이냐는 뜻이다. Delta값에 음수를 주면 화면 밖에서부터 움직이는 것도 가능하다.
액티비티 역시 메인액티비티와, 고객정보 입력 액티비티가 있는데, 액티비티에 애니메이션을 적용하는 것은 간단하다.
액티비티 전환 시 overridePendingTransition(새 액티비티에 적용할 애니메이션, 기존 액티비티에 적용할 애니메이션)을 활용하면 화면 전환시 애니메이션이 적용된다.
finish 이후에 사라지는 애니메이션까지 한번 더 적용해 주면 잘 바뀐다.

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView2);

        Button button = findViewById(R.id.Button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), CustomerInfo.class);
                startActivity(intent);
                overridePendingTransition(R.anim.move_right, R.anim.not_move); //애니메이션 적용
                finish();
                overridePendingTransition(R.anim.move_left, R.anim.not_move);
            }
        });

        Intent intent = getIntent();
        String name = intent.getStringExtra("name");
        if(name != null ){
            textView.setText( name + "\n" + intent.getStringExtra("age") + "\n" + intent.getStringExtra("date"));
        }

    }
}

 

결과

 

잘 돌아간다

전체 소스 코드 : https://github.com/howtolivelikehuman/DoitAndroid/tree/master/DoitMission_15

 

howtolivelikehuman/DoitAndroid

Do it Android programing (JAVA). Contribute to howtolivelikehuman/DoitAndroid development by creating an account on GitHub.

github.com

 

 

반응형