使用 ListView 动画化工具栏
Animating toolbar with ListView
目前我下面有一个 Toolbar
和一个 ListView
。我想让我的内容更加身临其境,我希望通过在滚动 ListView
时使工具栏向上滚动出屏幕来实现这一点,就像 Google Play 商店的顶部图表视图一样。我正在使用 https://github.com/ksoichiro/Android-ObservableScrollView 来获取滚动列表的时间,但现在我的问题是如何在滚动列表时翻译工具栏?我不想使用 onUpOrCancelMotionEvent()
方法,因为它仅在用户释放 his/her 手指时触发,而不是在我滚动时触发。到目前为止我得到的代码:
lv.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {
int last = -1;
@Override
public void onScrollChanged(int i, boolean b, boolean b2) {
if (b2) {
if (last == -1) {
last = i;
} else {
int dy = i - last;
if(toolbar.getY() > -TOOLBAR_HEIGHT && dy > 0) {
if(toolbar.getY() - dy < -TOOLBAR_HEIGHT)
toolbar.setY(-TOOLBAR_HEIGHT);
else
toolbar.setY(toolbar.getY() - dy);
tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
}else if(toolbar.getY() < 0 && dy < 0) {
if (toolbar.getY() - dy > 0)
toolbar.setY(0);
else
toolbar.setY(toolbar.getY() - dy);
tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
}
last = i;
}
}
}
...
}
现在可以了,但是会在原始工具栏所在的位置呈现一个白色矩形,如下所示:http://i.imgur.com/akY7hly.gif(这是一个 gif)。
如何使用列表视图为工具栏设置动画/正确翻译工具栏?
这就是我的意思,滚动的时候
Animation anim = AnimationUtils.loadAnimation(
getBaseContext(), R.anim.push_up_out)
yourtoolbar.startAnimation(anim);
记得在你的动画上设置一个监听器并将 Visibility 设置为 GONE 即清除屏幕 space,但是动画上的 alpha 会使它消失但填写 space
这是R.anim.push_up_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromYDelta="0"
android:toYDelta="-100%p" />
<alpha
android:duration="600"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
目前我下面有一个 Toolbar
和一个 ListView
。我想让我的内容更加身临其境,我希望通过在滚动 ListView
时使工具栏向上滚动出屏幕来实现这一点,就像 Google Play 商店的顶部图表视图一样。我正在使用 https://github.com/ksoichiro/Android-ObservableScrollView 来获取滚动列表的时间,但现在我的问题是如何在滚动列表时翻译工具栏?我不想使用 onUpOrCancelMotionEvent()
方法,因为它仅在用户释放 his/her 手指时触发,而不是在我滚动时触发。到目前为止我得到的代码:
lv.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {
int last = -1;
@Override
public void onScrollChanged(int i, boolean b, boolean b2) {
if (b2) {
if (last == -1) {
last = i;
} else {
int dy = i - last;
if(toolbar.getY() > -TOOLBAR_HEIGHT && dy > 0) {
if(toolbar.getY() - dy < -TOOLBAR_HEIGHT)
toolbar.setY(-TOOLBAR_HEIGHT);
else
toolbar.setY(toolbar.getY() - dy);
tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
}else if(toolbar.getY() < 0 && dy < 0) {
if (toolbar.getY() - dy > 0)
toolbar.setY(0);
else
toolbar.setY(toolbar.getY() - dy);
tabs.setY(toolbar.getY() + TOOLBAR_HEIGHT);
}
last = i;
}
}
}
...
}
现在可以了,但是会在原始工具栏所在的位置呈现一个白色矩形,如下所示:http://i.imgur.com/akY7hly.gif(这是一个 gif)。
如何使用列表视图为工具栏设置动画/正确翻译工具栏?
这就是我的意思,滚动的时候
Animation anim = AnimationUtils.loadAnimation(
getBaseContext(), R.anim.push_up_out)
yourtoolbar.startAnimation(anim);
记得在你的动画上设置一个监听器并将 Visibility 设置为 GONE 即清除屏幕 space,但是动画上的 alpha 会使它消失但填写 space
这是R.anim.push_up_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromYDelta="0"
android:toYDelta="-100%p" />
<alpha
android:duration="600"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>