0
스크롤 이벤트를 기반으로 안드로이드의 버튼에 애니메이션을 적용하는 가장 좋은 방법은 무엇입니까?스크롤 이벤트에서 안드로이드 버튼 숨기기 및 표시
저는보기의 오른쪽 하단 모서리에있는 단추가 있는데 사용자가 위로 스크롤하면 사용자가 아래로 스크롤 할 때 아래쪽보기 영역 아래로 이동하는 단추에 애니메이션을 적용하려고합니다.
내 레이아웃 :이 예에서 ObservableScrollView을 사용
( Synchronise ScrollView scroll positions - android)<RelativeLayout ...>
<ObservableScrollView ...>
<LinearLayout ...>
<!-- <Items> -->
</LinearLayout>
</ObservableScrollView>
<Button />
</RelativeLayout>
편집 :
부착 된 일부 스칼라 코드
observableScrollView.setScrollViewListener(new ScrollViewListener {
override def onScrollChanged(scrollView: ObservableScrollView, x: Int, y: Int, oldx: Int, oldy: Int): Unit = {
val scrollBottom = linearLayout.getHeight - observableScrollView.getHeight - 20
if (y >= scrollBottom) { // reached bottom
composeButton.stateChange(STATE_SHOW)
} else if (y > 0 && oldy > 0 && y > oldy) { // scroll up
composeButton.stateChange(STATE_HIDE)
} else if (y > 0 && oldy > 0 && y < oldy) { // scroll down
composeButton.stateChange(STATE_SHOW)
}
}
})
은 =====는
val animationDuration: Int = 1000
lazy val yStartPosition = getY // initialized on first access
var currentState: ComposeButtonState = STATE_SHOW
val animationQueue: AnimatorSet = new AnimatorSet()
def animate(from:Float, to:Float) = {
val anim = ObjectAnimator.ofFloat(this, "y", from, to)
anim.setDuration(animationDuration)
anim.setInterpolator(new OvershootInterpolator())
animationQueue.play(anim)
animationQueue.start()
}
def stateChange(state: ComposeButtonState) = {
if (state != currentState) {
currentState = state
state match {
case STATE_SHOW => animate(yStartPosition + yTranslateInitialValue, yStartPosition)
case STATE_HIDE => animate(yStartPosition, yStartPosition + yTranslateInitialValue)
}
}
}
내가 레이아웃에 버튼을 추가를, 그래서는 Y 싶어 - 그것이 추가 될 때 위치. "onCreated", "onAdded"또는 sth와 같은 버튼에 발생한 이벤트가 있습니까? 그밖에? – sonix
난 당신이 사용할 수있는 가정 .addOnGlobalLayoutListener를 (새 OnGlobalLayoutListener() { @Override 공공 무효 onGlobalLayout() { } }); – erik
하지만 애니메이션의 시점에서 Y 위치를 얻을 수도 있습니다. 내 대답 – erik