Android FloatingActionButton,Snackbar

来源:互联网 发布:大英帝国 知乎 编辑:程序博客网 时间:2024/04/28 08:08

FloatingActionButton 浮动按钮

<android.support.design.widget.FloatingActionButton    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="end|bottom"    android:id="@+id/float_btn"/>

Snackbar可以用来代替Toast

//coordinatorLayout为Snackbar显示的容器//float btn为显示内容//Undo为提示框右侧点击按钮的文字Snackbar.make(coordinatorLayout, "float btn", Snackbar.LENGTH_SHORT)   .setAction("Undo", new View.OnClickListener() {       @Override       public void onClick(View v) {       }   })   .show();

只要使用CoordinatorLayout作为基本布局,将自动产生向上移动的动画。浮动操作按钮有一个 默认的 behavior来检测Snackbar的添加并让按钮在Snackbar之上呈现上移与Snackbar等高的动画。

<android.support.design.widget.CoordinatorLayout        android:id="@+id/main_content"        xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:app="http://schemas.android.com/apk/res-auto"        android:layout_width="match_parent"        android:layout_height="match_parent">

自定义FloatingActionButton在CoordinatorLayout中的动画
参考http://blog.csdn.net/xyz_lmn/article/details/48055919
神奇之处在于Behavior对象,CoordinatorLayout自己并不控制View,所有的控制权都在Behavior。
通过 CoordinatorLayout.Behavior(YourView.Behavior.class) 来定义自己的Behavior,并在layout 文件中设置 app:layout_behavior=”com.example.app.YourView$Behavior” 来达到效果。
如下面的例子,实现了点击FloatingActionButton点击旋转90度,并适配Snackbar。

public class RotateBehavior  extends CoordinatorLayout.Behavior<FloatingActionButton> {    private static final String TAG = RotateBehavior.class.getSimpleName();    public RotateBehavior() {    }    public RotateBehavior(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {        return dependency instanceof Snackbar.SnackbarLayout;    }    @Override    public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {        float translationY = getFabTranslationYForSnackbar(parent, child);        float percentComplete = -translationY / dependency.getHeight();        child.setRotation(-90 * percentComplete);        child.setTranslationY(translationY);        return false;    }    private float getFabTranslationYForSnackbar(CoordinatorLayout parent,                                                FloatingActionButton fab) {        float minOffset = 0;        final List<View> dependencies = parent.getDependencies(fab);        for (int i = 0, z = dependencies.size(); i < z; i++) {            final View view = dependencies.get(i);            if (view instanceof Snackbar.SnackbarLayout && parent.doViewsOverlap(fab, view)) {                minOffset = Math.min(minOffset,                        ViewCompat.getTranslationY(view) - view.getHeight());            }        }        return minOffset;    }}
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/main_content"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true">    <android.support.design.widget.FloatingActionButton        android:id="@+id/fab"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="end|bottom"        android:layout_margin="@dimen/fab_margin"        android:src="@drawable/ic_done"        app:layout_behavior="com.meizu.coordinatorlayoutdemo.RotateBehavior"/></android.support.design.widget.CoordinatorLayout>
0 0
原创粉丝点击