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 등에 적용될 수 있을 것 같네요.
댓글 없음:
댓글 쓰기