[Material Design] 사용자 정의 Floating Action Button 슬라이딩 행위는 발생하지 않는 문제만 숨깁니다
public class FabBehavior extends FloatingActionButton.Behavior{
private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();
private boolean mIsAnimatingOut = false;
public FabBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View directTargetChild, final View target, final int nestedScrollAxes) {
// Ensure we react to vertical scrolling
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) {
// User scrolled down and the FAB is currently visible -> hide the FAB
animateOut(child);
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
// User scrolled up and the FAB is currently not visible -> show the FAB
animateIn(child);
}
}
// Same animation that FloatingActionButton.Behavior uses to hide the FAB when the AppBarLayout exits
private void animateOut(final FloatingActionButton button) {
if (Build.VERSION.SDK_INT >= 14) {
ViewCompat.animate(button).translationY(button.getHeight() + getMarginBottom(button)).setInterpolator(INTERPOLATOR).withLayer()
.setListener(new ViewPropertyAnimatorListener() {
public void onAnimationStart(View view) {
FabBehavior.this.mIsAnimatingOut = true;
}
public void onAnimationCancel(View view) {
FabBehavior.this.mIsAnimatingOut = false;
}
public void onAnimationEnd(View view) {
FabBehavior.this.mIsAnimatingOut = false;
view.setVisibility(View.GONE);
}
}).start();
} else {
}
}
// Same animation that FloatingActionButton.Behavior uses to show the FAB when the AppBarLayout enters
private void animateIn(FloatingActionButton button) {
button.setVisibility(View.VISIBLE);
if (Build.VERSION.SDK_INT >= 14) {
ViewCompat.animate(button).translationY(0)
.setInterpolator(INTERPOLATOR).withLayer().setListener(null)
.start();
} else {
}
}
private int getMarginBottom(View v) {
int marginBottom = 0;
final ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
marginBottom = ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin;
}
return marginBottom;
}
}
이것은 사용자 정의 Behavior 클래스입니다. 주로 onNested Scroll에서 나타나고 사라지는 애니메이션을 사용자 정의합니다.사용할 때 xml 파일에 FAB에 전체 behavior 클래스 이름을 포함하는layoutbehavior 속성
app:layout_behavior="com.normalframe.widgets.view.FabBehavior"
이렇게 하면 FAB는 리스트에서 미끄러지면서 사라지고 미끄러져 나온다.이 기능은 주로 FAB의 위치가 목록의 마지막 항목을 가리는 문제를 처리하고 슬라이딩할 때 FAB가 숨기면 목록의 밑에 있는 마지막 항목에 도달할 때 방금 한 동작이 슬라이딩 동작이기 때문에 FAB가 숨겨진 상태여서 목록에 가려지지 않는다.
이 기능을 쓸 때 문제가 하나 발견되었다. 미끄러질 때 FAB는 정상적으로 숨길 수 있지만 목록을 내리면 FAB가 나타나지 않는다는 것이다.같은 코드를 다른 항목에 넣으면 일부는 정상적으로 기능을 실현할 수 있다.Debug에서 위로 당길 때 onNested Scroll을 호출합니다. 따라서 사용자 정의 숨김 방법은 호출될 수 있지만, 아래로 내려갈 때 onNested Scroll을 호출하지 않습니다.
마지막으로 SDK 버전의 문제인 것을 발견했습니다. 25(7.1.1.1)를 사용할 때 이 문제가 있을 수 있습니다. 24로 바꾸면 문제가 없습니다.당분간은 원인을 모르니 연구를 기다려야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【IE 대응】Google Material Icons를 data 속성을 사용해 스마트하게 표시한다방법 1: HTML로 직접 작성 가장 쉬운 방법이지만 문제가 하나 있습니다. 구글의 검색 결과에 표시되는 타이틀이나 메뉴 부분에 이 방법으로 아이콘을 설치해 버리면, emailお問い合わせフォーム 와 같은 형태로 아이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.