2016년 5월 12일 목요일

[안드로이드] TranslateAnimation 과 AnimationSet을 이용한 연속 움직임









App을 새로 하나 만들고 있는데,




버튼을 손으로 움직인 것을 토대로 다른 버튼을 누르면 움직인 경로를 따라 움직이는 걸 만들고 있다.


Skip Frame 때문에 이걸 애니메이션으로


바꾸는게 나을거 같아 찾아보던 중


AnimationSet과 TranslateAnimation에 대해 알게되었다.


AnimationSet은 그냥 Animation 의 ArrayList쯤 되는 것 같다.


자세히는 안찾아 봤지만....


연속된 움직임을 구현하려면 setStartOffset을 토대로 구현하였다.


setStartOffset은 시작시간을 밀리세컨드 단위로 미루는 것을 설정한다


setDuration함수의 경우 밀리세컨드 단위로 움직이는 것을 뜻하는데,


그 시간 이후에 다음것을 실행한다면 도미노가 쓰러지듯 차례로 애니메이션


효과가 나올것이라 예측했고,



그렇게 나왔당



결과화면이다.


다음은 소스코드입니다.


xml은 버튼하나만 지정을 해놔서, 따로 올리진 않겠습니다.

public class MainActivity extends AppCompatActivity {
    Button btn_Test;
    AnimationSet animationSet;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_Test = (Button)findViewById(R.id.btn_Test);
        animationSet = new AnimationSet(true);
        animationSet.setFillAfter(true);


        MoveCheck();
    }


    void MoveCheck()
    {
        DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
        int width = dm.widthPixels;
        int height = dm.heightPixels;


        TranslateAnimation mData = new TranslateAnimation(0,500,0,0);
        mData.setStartOffset(1000);
        mData.setFillAfter(true); // 움직이고 그 자리에 정지
        mData.setDuration(1000);

        TranslateAnimation mData2 = new TranslateAnimation(0,0,0,500);
        mData2.setStartOffset(2000);
        mData2.setFillAfter(true);
        mData2.setDuration(1000);

        animationSet.addAnimation(mData);
        animationSet.addAnimation(mData2);



        btn_Test.startAnimation(animationSet);


    }
}




소스코드에서는 Button을 쓰긴했는데, 모든 View, LinearLayout 등에 적용될 수 있을 것 같네요.



댓글 없음:

댓글 쓰기