Ela*_*ron 0 animation android drawerlayout
因此,我希望以这样的方式为DrawerLayout设置动画,使其打开,将一个项目添加到其中的菜单中,然后将其关闭.
我尝试了很多东西,但问题是"打开"和"关闭"命令之间没有延迟(或者至少没有明显的延迟),因此动画永远不会触发.
我真的不想使用任意长度的'post delayed',因为这看起来很脏.我已经尝试在监听器中手动覆盖"onDrawerOpened()" - 这已经工作了,但是在执行操作后我无法关闭它,因为你无法从内部关闭它(意思是,如果'closeDrawer(布局) )'方法是从侦听器本身的任何子线程调用的,它将得到运行时错误).
所以我拥有的是:
_drawerToggle = new ActionBarDrawerToggle(MainActivity.this, _drawerLayout, R.drawable.ic_drawer, R.string.drawerOpen, R.string.drawerClose)
{
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
getActionBar().setTitle(_title);
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
myAction(); //My action
//If I try to invoke 'drawerClose()' here or in my action, a runtime error occurs
}
};
_drawerLayout.setDrawerListener(_drawerToggle);
_drawerLayout.openDrawer(_mainFrame);
//If I invoke 'drawerClose()' the entire thing is just too fast and the animations don't trigger
Run Code Online (Sandbox Code Playgroud)
我甚至在DrawerLayout上尝试'getAnimation()',但它返回null,所以我不能用它来发布延迟动作.
任何人都知道如何处理这个问题?我应该使用任意延迟并希望它在所有设备上看起来都一样吗?有没有办法从听众中关闭抽屉?提前致谢!
呼叫closeDrawer()不起作用,onDrawerOpened()因为抽屉没有完成打开.如果你看到onDrawerStateChanged()你会注意到状态在onDrawerOpened()被叫之后仍然会发生变化.
当onDrawerStateChanged()抽屉闲置时,我试着关上抽屉,但它仍然坠毁.正如你所说,我的最终解决方案看起来很糟糕.但它有效,看起来很流畅.这应放在onDrawerOpened()
new Thread() {
@Override
public void run() {
SystemClock.sleep(500);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mDrawerLayout.closeDrawers();
}
});
}
}.start();
Run Code Online (Sandbox Code Playgroud)
如果您使用某种排序或线程管理器(如此处发布的那样),这可能看起来会好一些
https://gist.github.com/bclymer/6708605
免责声明,这是我的实用工具类.我在大多数应用程序中都使用它,但它非常方便.使用该实用程序代码看起来像
ThreadManager.delayOnMainThread(new Runnable() {
@Override
public void run() {
mDrawerLayout.closeDrawers();
}
}, 500);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7111 次 |
| 最近记录: |