2014-07-23 4 views
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) 
    } 
    } 
} 

답변

0

ObjectAnimator

@Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     super.onScrollChanged(l, t, oldl, oldt); 
     //do something cool 
    } 

와 개체 애니메이터의 예를 사용

ObjectAnimator myAnimation = ObjectAnimator.ofFloat(yourButton, "translationY", 
       yourButton.getY(), screenHeight); 
+0

내가 레이아웃에 버튼을 추가를, 그래서는 Y 싶어 - 그것이 추가 될 때 위치. "onCreated", "onAdded"또는 sth와 같은 버튼에 발생한 이벤트가 있습니까? 그밖에? – sonix

+0

난 당신이 사용할 수있는 가정 .addOnGlobalLayoutListener를 (새 OnGlobalLayoutListener() { @Override 공공 무효 onGlobalLayout() { } }); – erik

+0

하지만 애니메이션의 시점에서 Y 위치를 얻을 수도 있습니다. 내 대답 – erik

관련 문제