在Android中设置特定时间段后的视图动画

在Android中设置特定时间段后的视图动画,android,animation,Android,Animation,我正在开发一款Android应用程序,它在viewpager中有选项卡,由于viewpager和工具栏占用了大量空间,我的应用程序在小型手机上看起来不太好看,所以我想在屏幕外自动设置工具栏动画,以节省屏幕空间,3s之后,从用户打开应用程序或触摸屏幕时开始,工具栏将在屏幕外设置动画,当用户多次触摸屏幕时,问题就会出现,我倾向于让程序处理所有这些动画输入和输出,因为我使用的是处理程序我尝试使用removeCallbacksAndMessages(null)和removeCallbacks(hideT

我正在开发一款Android应用程序,它在viewpager中有选项卡,由于viewpager和工具栏占用了大量空间,我的应用程序在小型手机上看起来不太好看,所以我想在屏幕外自动设置工具栏动画,以节省屏幕空间,
3s
之后,从用户打开应用程序或触摸屏幕时开始,工具栏将在屏幕外设置动画,当用户多次触摸屏幕时,问题就会出现,我倾向于让程序处理所有这些动画输入和输出,因为我使用的是
处理程序
我尝试使用
removeCallbacksAndMessages(null)和removeCallbacks(hideToolBar)
方法从处理程序中删除所有可运行项,但它仍然处理所有可运行项,我的目标是,当用户在
3s
之前或之后多次触摸屏幕时,它不会隐藏工具栏,而是倾向于隐藏然后显示然后隐藏等等,下面是我的代码

方法,该方法在隐藏时显示工具栏

 private void showToolBar()
{
    if (toolbarHidden) {
        toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
        toolbarHidden = false;
    }
}

    private void hideToolBar()
{

    hideRevealHandler = new Handler();
    hideToolBar = new Runnable() {
        @Override
        public void run() {

                if (!toolbarHidden) {
                    toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
                    toolbarHide = true;
                }

        }
    };
    hideRevealHandler.postDelayed(hideToolBar, 3000);

}
然后,我将覆盖
dispatchTouchEvent(MotionEvent)
以捕获屏幕上的任何事件,以便在工具栏隐藏时显示它

   @Override
public boolean dispatchTouchEvent(MotionEvent me) {
     //Call onTouchEvent of SimpleGestureFilter class
  if(!toolbarHideCommand) {
      toolbarHideCommand = true;
      try {
          hideRevealHandler.removeCallbacks(hideToolBar);
      } catch (NullPointerException w) {
          w.printStackTrace();
      }

  }
   else 
      toolbarHideCommand = false;


    showToolBar();
   hideToolBar();
    return super.dispatchTouchEvent(me);
}
试试这个

@Override
public boolean dispatchTouchEvent(MotionEvent me) {
 //Call onTouchEvent of SimpleGestureFilter class
 if(!toolbarHideCommand) {
  toolbarHideCommand = true;
  try {
      hideRevealHandler.removeCallbacks(hideToolBar);
  } catch (NullPointerException w) {
      w.printStackTrace();
  }

}
else 
  toolbarHideCommand = false;


  showToolBar();
  // change in code is here. Now it will process only new one.
  try {
     hideRevealHandler.removeCallbacksAndMessages(null);
  } catch (Exception w) {
    w.printStackTrace();
  }
  hideToolBar();
  return super.dispatchTouchEvent(me);
}