在Android中特定时间段后制作动画视图

时间:2016-04-16 04:51:46

标签: android animation

我正在研究一个在viewpager中有标签的Android应用程序,因为viewpager和工具栏占用了大量空间,我的应用程序在小型手机上看起来不太好看,所以我想自动动画我的动画工具栏离开屏幕以节省屏幕空间,在3s用户打开应用程序或触摸屏幕后,工具栏将在屏幕上显示动画,当用户多次触摸屏幕时会出现问题,I因为使用Handler我尝试使用removeCallbacksAndMessages(null) and 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);
}

1 个答案:

答案 0 :(得分:0)

试试这个。

@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);
}