我正在研究一个在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);
}
答案 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);
}