导航抽屉提示动画(如Google Currents)

时间:2013-07-29 14:20:01

标签: android navigation-drawer

我正在寻找一种方法来向用户提供导航抽屉存在的提示。

我喜欢Google Currents暗示有下一页的方式,它只是在下一页中滑动几个像素,然后将其删除。

完成这样的动画的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这只会在左侧显示一个窄条 - 就像你的手指按在边框上一样。不确定这是否是Google Currents所做的,但我发现这是一种优雅的提示方式。 Source

protected void peekDrawer() {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 100, 0);
    m_drawerLayout.dispatchTouchEvent(motionEvent);
    motionEvent.recycle();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            long downTime = SystemClock.uptimeMillis();
            long eventTime = SystemClock.uptimeMillis() + 100;
            MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 0, 100, 0);
            m_drawerLayout.dispatchTouchEvent(motionEvent);
            motionEvent.recycle();
        }
    }, (long) (1 * DateUtils.SECOND_IN_MILLIS)); //change 1 to however many seconds you wish to display the hint for
}

答案 1 :(得分:0)

如果要实现自己的自定义ViewGroup,则应使用ViewDragHelper。它将负责处理触摸事件并在必要时为您滚动视图。您已将其配置为满足您的需求,您只需在抽屉视图上调用smoothSlideViewTo即可将其滚动到您想要的任何位置。

Here is a nice intro to ViewDragHelper.

如果您使用DrawerLayout,则默认情况下,当用户触摸屏幕边缘时,您会获得此类效果。我认为你不能以编程方式触发它,如果这是你想要的,因为peekDrawer()在一个也被声明为私有的内部ViewDragHelper.Callback实例中被声明为私有。