안드로이드 Viewpager 안에 RecyclerView 있을때 Appbar 스크롤 버벅임 현상공부방/Android2018. 7. 25. 16:19
Table of Contents
안드로이드 Viewpager 안에 RecyclerView 있을때 AppBar의 움직임이 버벅거리면서
스크롤이 제대로 안될때가 있다 그럴때는
아래의 클래스를 추가한뒤
public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {
private static final String TAG = "AppBarLayoutBehavior";
public FixAppBarLayoutBehavior() {
super();
}
public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
// --------------begin added by shaopx -------------
@Override
public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
Object scroller = getSuperSuperField(this, "mScroller");
if (scroller != null && scroller instanceof OverScroller) {
OverScroller overScroller = (OverScroller) scroller;
overScroller.abortAnimation();
}
}
return super.onInterceptTouchEvent(parent, child, ev);
}
private Object getSuperSuperField(Object paramClass, String paramString) {
Field field = null;
Object object = null;
try {
field = paramClass.getClass().getSuperclass().getSuperclass().getDeclaredField(paramString);
field.setAccessible(true);
object = field.get(paramClass);
} catch (Exception e) {
e.printStackTrace();
}
return object;
}
// --------------------------- end
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target,
int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
dxUnconsumed, dyUnconsumed, type);
stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
View target, int dx, int dy, int[] consumed, int type) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
stopNestedScrollIfNeeded(dy, child, target, type);
}
private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
if (type == ViewCompat.TYPE_NON_TOUCH) {
final int currOffset = getTopAndBottomOffset();
if ((dy < 0 && currOffset == 0)
|| (dy > 0 && currOffset == -child.getTotalScrollRange())) {
ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
}
}
}
}
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stateListAnimator="@null"
app:layout_behavior="패키지명.FixAppBarLayoutBehavior">
을 추가해서 사용하면 버벅거리는 현상이 사라진다.
출처 : https://github.com/shaopx/CoordinatorLayoutExample/blob/master/app/src/main/java/com/spx/coordinatorlayoutexample/util/FixAppBarLayoutBehavior.java
반응형
'공부방 > Android' 카테고리의 다른 글
안드로이드 스튜디오 Oreo 앱 Install 안되는 현상 (0) | 2018.12.03 |
---|---|
안드로이드 스튜디오 OS 8 이상 앱 디버그 빌드 실행시 죽는 현상 (0) | 2018.07.25 |
Android RecyclerView Or NestedScorllView 화면 그려진후 자동으로 스크롤 이동하는 현상 (0) | 2018.07.25 |
android java VERSION_1_8 jackOptions 사용시 빌드 속도 느려지는 현상 해결 방법 (0) | 2017.09.05 |
안드로이드 버튼, 뷰 동시 클릭막기 (0) | 2017.08.01 |
@soycrab :: 꿀맛코딩
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!