디자이너정님이 해주신 답변을 참고해 이리저리 해보다가 성공했습니다.
스크롤 중일 때 아닐 때를 구분해 스크롤 중일 때는 애니메이션을 멈추고 재정의해줬습니다
creditScrollView.post(new Runnable() {
@Override
public void run() {
final ObjectAnimator[] anim = {ObjectAnimator.ofInt(creditScrollView, "scrollY", creditLayout.getBottom()).setDuration(25000)};
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() {
anim[0].start();
scrollStop = true;
}
}, 400);
break;
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_SCROLL:
case MotionEvent.ACTION_MOVE:
anim[0].pause();
anim[0] = ObjectAnimator.ofInt(creditScrollView, "scrollY", creditLayout.getBottom()).setDuration(25000);
scrollStop = false;
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);
}
}
});
break;
}
return false;
}
});
}
});