반응형
안드로이드 개발을 하다보면 스크롤 뷰를 쓸 일이 되게 많다. 최근에는 엔딩크레딧을 개발하게 됐는데 사용자가 스크롤도 하면서 자동으로 밑으로 스크롤이 되어야 하는 경우가 생겨 이것저것 찾아보다 touchlistener를 사용해 개발하게 되었다.
NestedScrollView creditScrollView = creditDialog.findViewById(R.id.creditScrollView);
final ObjectAnimator[] anim = {null};
creditScrollView.post(new Runnable() {
@Override
public void run() {
creditScrollView.setScrollY(creditLogo.getTop() - 20);
anim[0] = ObjectAnimator.ofInt(creditScrollView, "scrollY", creditLayout.getBottom()).setDuration(20000);
anim[0].start();
creditScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_CANCEL:
// 화면에서 손가락을 땜, 모든 이벤트의 끝
case MotionEvent.ACTION_UP:
// 상동
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(!anim[0].isStarted()) {
anim[0].start();
}
scrollStop = true;
}
}, 200);
break;
case MotionEvent.ACTION_DOWN:
// 화면에 손가락이 닿음, 모든 이벤트의 출발점
break;
case MotionEvent.ACTION_SCROLL:
case MotionEvent.ACTION_MOVE:
// 화면에 손가락이 닿은 채로 움직이고 있음
if(anim[0].isStarted() && scrollStop) {
anim[0].pause();
anim[0].cancel();
anim[0] = ObjectAnimator.ofInt(creditScrollView, "scrollY", creditLayout.getBottom()).setDuration(20000);
scrollStop = false;
}
break;
}
return false;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
creditScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if(!scrollStop) {
creditScrollView.smoothScrollTo(scrollX, scrollY);
}
}
});
}
}
});
이후에 사용자가 다시 스크롤뷰가 있는 화면을 볼 수도 있으니 꼭 ObjectAnimator를 초기화 해주자
creditDialog.dismiss();
if(anim[0] != null) {
anim[0].pause();
anim[0].cancel();
anim[0] = null;
}
scrollStop = true;
반응형
'Android' 카테고리의 다른 글
[Android] TelephonyManager 통화상태 확인하기 (0) | 2020.06.02 |
---|---|
[Android] Dialog Animation (0) | 2020.06.02 |
[Android] 딥링크(Deep-Link) 설정 및 부르기 (0) | 2020.04.23 |
[Android] Google에서 파라미터(referrer) 받아오기 (0) | 2020.04.22 |
[Android] 웹뷰 가속화 (3) | 2020.04.22 |