비유로 설명하면
CoordinatorLayout : 지휘관
Snackbar : dependency라고 불리고 특정 event
behavior : 지휘관이 알려주는 명령. behavior을 장착한 유닛들은 저 방식대로 작동함
여기서는 Button에 적용했다.
Button 클릭시 Snackbar 나오는 시나리오
snackbar : dependcy
Button의 Behavior = x,y축으로 이동
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:layout_behavior=".CustomMoveUpBehavior"
android:text="Click me"/>
<include layout="@layout/content_main" />
public class CustomMoveUpBehavior extends CoordinatorLayout.Behavior<AppCompatButton> {
public CustomMoveUpBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull AppCompatButton child, @NonNull View dependency) {
return dependency instanceof Snackbar.SnackbarLayout;
}
@Override
public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull AppCompatButton child, @NonNull View dependency) {
float tY = dependency.getTranslationY()-dependency.getHeight();
System.out.println(child);
System.out.println(dependency);
//child : button
//dependency : snackbar
child.setTranslationY(tY);
child.setTranslationX(123);
return true;
}
}
참고
https://ranyalbegwein.silvrback.com/transforming-image-behavior