Android float 操作按钮动画

标签 android user-interface animation floating-action-button

当 ScrollView 移动时,我想要的只是一个简单的动画。我尝试了一些解决方案,但没有一个能完美/流畅地工作。如果我滚动,我想隐藏带有向下滑动动画的 fab,如果 2 秒后没有任何反应,fab 会显示带有向上滑动动画。我知道这是一个基本问题,感谢您的耐心等待。

提前致谢。

final ScrollView scroll = (ScrollView) v.findViewById(R.id.sw);
scroll.setOnTouchListener(new View.OnTouchListener()){
   @Override
   public boolean onTouch(View v, Motionevent event){
      int action = event.getAction();
      if (action == Motionevent.ACTION_MOVE){

      //slide down animation here

      }else{
        new Handler().postDelayed(new Runnable(){
          public void run(){

          //slide up animation here

          }
        }, 2000);
      }
    return false;
  }
});

最佳答案

这是 a tutorial , 如何使用带有滚动动画的 FAB 按钮。

基本上:

  1. 使用 v22.2.1 支持的 v4 库,有一个 show()hide() 方法可以为 Floating 执行淡入淡出动画操作按钮
  2. 您必须将 ScrollView 和 FAB 放在 CoordinatorLayout 中。
  3. 将 FAB layout_anchor 设置为 ScrollView 的 id
  4. 创建一个类并扩展FloatingActionButton.Behavior类并在布局xml中将其设置为FAB的layout_behavior属性
  5. 重写您的 Behavior 类 onStartNestedScroll 以检查是否垂直
  6. 覆盖您的行为类 onStopNestedScroll 以在向下滚动时调用子 (FAB) 参数 hide() 方法,并在 Runnable 后延迟以显示2 秒后 FAB

布局如下:

<android.support.design.widget.CoordinatorLayout
... >
    <ScrollView
    android:id="@+id/myList"
    ...
    />
        <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        app:layout_anchor="@id/myList"
        app:layout_behavior="package.CustomScrollAwareBehavior"
        ...
        />
    </android.support.design.widget.CoordinatorLayout>

我建议,还要在 Behavior 类中创建一个 Handler 来调用 FAB 的 show() 方法。 行为类喜欢(未测试):

public class CustomScrollAwareBehavior extends FloatingActionButton.Behavior{

private Handler handler = new Handler();
private FloatingActionButton fab;

public CustomScrollAwareBehavior(Context context, AttributeSet attrs) {
    super();
}

@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
                                   FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
    fab = child;
    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
            super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
                    nestedScrollAxes);
}



Runnable showRunnable = new Runnable() {
    @Override
    public void run() {
        fab.show();
    }
};


@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
                           View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed,
            dyUnconsumed);
     if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
        handler.removeCallbacks(showRunnable);
        handler.postDelayed(showRunnable,2000);
        child.hide();
    } 
    }
}

关于Android float 操作按钮动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023580/

相关文章:

android - 如何将密码 Activity 设置为仅使用数字?

Swift:使用动画以编程方式更改特定约束

python - 将 python gui 应用程序与 c 控制台应用程序集成的最简单方法

angularjs - 这种类型的多属性过滤称为什么? (见截图)

Android:用于在选项卡之间切换的滑动手势和动画

java - Android - TranslateAnimation 动态更新布局的大小

android - ImageView 作为单元格中的背景

Android 更新应用程序而不干扰本地 Sqlite DB

android - 在构建您的第一个应用程序教程中,什么是 "actionbar_background"以及如何定义它?

java - GUI 类中的 StackOverflow