7

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

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

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

4

2 回答 2

1

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

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
}
于 2015-09-08T20:20:44.577 回答
0

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

这是 ViewDragHelper 的一个很好的介绍。

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

于 2013-09-28T16:03:05.590 回答