Lin*_*nxy 20 android scroll appbar toolbar
我正在尝试实现类似于WhatsApp的效果,其中工具栏(滚动时)将剪切成视图磁铁状或视图磁铁状.
我的MainActivity XML是什么:
app:layout_scrollFlags="scroll|enterAlways"
现在不要误会我的意思,它有效,当我向下滚动工具栏被推出视图但说我停止中途滚动,然后工具栏只是坐在那里一半隐藏在视野外,另一半在视野中..
我怎样才能解决这个问题,因为我希望它能够跳出视图或进入视图.
Abh*_*k V 37
此功能已添加到23.1.0
Android支持库的版本中.从发行说明:
通过添加SCROLL_FLAG_SNAP常量为AppBarLayout类添加了边缘捕捉支持.滚动结束时,如果视图仅部分可见,则视图将被捕捉并滚动到其最近的边缘.
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways|snap" />
-----
-----
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息:http://android-developers.blogspot.in/2015/10/android-support-library-231.html
编辑:从支持23.1.0开始,不再需要这个.请改为查看此答案.
解决此问题的一种可能方法是将Behavior
设置自定义为您的AppBarLayout
.
<android.support.design.widget.AppBarLayout
app:layout_behavior="com.myapp.AppBarLayoutSnapBehavior"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
Run Code Online (Sandbox Code Playgroud)
通过在滚动停止时添加捕捉逻辑,您AppBarLayoutSnapBehavior
将更改默认行为AppBarLayout.Behavior
.希望下面的代码是自我解释的.
package com.myapp;
public class AppBarLayoutSnapBehavior extends AppBarLayout.Behavior {
private ValueAnimator mAnimator;
private boolean mNestedScrollStarted = false;
public AppBarLayoutSnapBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
View directTargetChild, View target, int nestedScrollAxes) {
mNestedScrollStarted = super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
if (mNestedScrollStarted && mAnimator != null) {
mAnimator.cancel();
}
return mNestedScrollStarted;
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
if (!mNestedScrollStarted) {
return;
}
mNestedScrollStarted = false;
int scrollRange = child.getTotalScrollRange();
int topOffset = getTopAndBottomOffset();
if (topOffset <= -scrollRange || topOffset >= 0) {
// Already fully visible or fully invisible
return;
}
if (topOffset < -(scrollRange / 2f)) {
// Snap up (to fully invisible)
animateOffsetTo(-scrollRange);
} else {
// Snap down (to fully visible)
animateOffsetTo(0);
}
}
private void animateOffsetTo(int offset) {
if (mAnimator == null) {
mAnimator = new ValueAnimator();
mAnimator.setInterpolator(new DecelerateInterpolator());
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
setTopAndBottomOffset((int) animation.getAnimatedValue());
}
});
} else {
mAnimator.cancel();
}
mAnimator.setIntValues(getTopAndBottomOffset(), offset);
mAnimator.start();
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的事情是,滚动视图(在我的情况下是a RecyclerView
)与快照一起捕捉Toolbar
.我其实喜欢这种方式,但我不确定这是你想要的.
归档时间: |
|
查看次数: |
17623 次 |
最近记录: |