确定导航抽屉是正在打开还是关闭

8
有没有办法让我确定导航抽屉是正在打开还是关闭?我已经了解了isDrawerOpen()isDrawerVisible()方法,但它们只在导航抽屉已经打开或可见时返回true。
我还了解到onDrawerSlide(View drawerView, float slideOffset)方法,该方法在抽屉移动时调用。 slideOffset是介于0和1之间的浮点值,告诉我们抽屉现在的位置。但即使在抽屉打开关闭时也会调用该方法。
我的需求是仅在抽屉打开时而不是关闭时执行某些操作,我觉得我必须使用onDrawerSlide(View drawerView, float slideOffset)方法,但我无法弄清楚如何检查它是否正在打开而不是关闭。
谢谢
3个回答

18

追踪最后一个值是一种选择...

drawerLayout.setDrawerListener(new DrawerListener() {

        private float last = 0;

        @Override
        public void onDrawerSlide(View arg0, float arg1) {

            boolean opening = arg1>last;
            boolean closing = arg1<last;

            if(opening) {
                Log.i("Drawer","opening");
            } else if(closing) {
                Log.i("Drawer","closing");
            } else {
                Log.i("Drawer","doing nothing");
            }

            last = arg1;
        }

        @Override public void onDrawerStateChanged(int arg0) {}
        @Override public void onDrawerOpened(View arg0) {}
        @Override public void onDrawerClosed(View arg0) {}

    });

0

0

setDrawerListener 方法现在已经 弃用。新的方法是使用 addDrawerListener 方法。

在 Kotlin 中:

  1. 初始化DrawerLayout视图

    val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)

  2. 在您的主活动中,创建一个内部类,它是DrawerLayout.DrawerListener的子类。DrawerLayout类实现了DrawerListener接口。您可以在onDrawerSlide(上面答案的Kotlin版本)中跟踪抽屉位置的变化:

    inner class CustomDrawer : DrawerLayout.DrawerListener{
      override fun onDrawerStateChanged(newState: Int) {
      }
    
    var last: Float = 0f
    
    override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
    
        var opening: Boolean = slideOffset>last
        var closing: Boolean = slideOffset<last
    
        if(opening) {
            Log.i("Drawer","opening")
            Log.d("Last",last.toString())
        } else if(closing) {
            Log.i("Drawer","closing")
            Log.d("Last",last.toString())
        } else {
            Log.i("Drawer","doing nothing")
            Log.d("Last",last.toString())
        }
    }
    
    override fun onDrawerClosed(drawerView: View) {
    
      }
    
    override fun onDrawerOpened(drawerView: View) {
    
      }
    }
    
  3. 将自定义DrawerListener添加到drawerLayout中(我将其放在onCreate方法中)

    var drawerListener = CustomDrawer() drawerLayout.addDrawerListener(drawerListener)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接