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