2013-07-29 22 views
7

Tôi đang tìm cách cung cấp cho người dùng gợi ý rằng ngăn điều hướng tồn tại.Hoạt ảnh gợi ý NavigationDrawer (như Google Dòng tin)

Tôi thích cách Google Dòng tin gợi ý rằng có trang tiếp theo, trang này chỉ trượt trang tiếp theo vài pixel và sau đó xóa nó.

Cách tốt nhất để thực hiện hoạt ảnh như vậy là gì?

Trả lời

0

Nếu bạn đang triển khai ViewGroup tùy chỉnh của riêng mình, bạn nên sử dụng ViewDragHelper cho việc này. Nó sẽ chăm sóc xử lý các sự kiện cảm ứng và di chuyển các quan điểm của bạn cho bạn khi cần thiết. Một trong những bạn đã cấu hình nó để phù hợp với nhu cầu của bạn, bạn chỉ cần gọi smoothSlideViewTo trên ngăn kéo của bạn xem để có nó di chuyển đến bất cứ vị trí bạn muốn nó.

Here is a nice intro to ViewDragHelper.

Nếu bạn sử dụng một DrawerLayout, bạn nhận được rằng loại có hiệu lực theo mặc định khi người dùng chạm vào cạnh của màn hình. Tôi không nghĩ rằng bạn có thể kích hoạt nó theo chương trình, nếu đó là những gì bạn muốn, vì peekDrawer() được khai báo riêng bên trong một cá thể ViewDragHelper.Callback nội bộ cũng được khai báo riêng.

1

Điều này sẽ chỉ hiển thị thanh hẹp ở bên trái - như thể bạn đã giữ ngón tay ấn trên đường viền. Bạn không chắc đây có phải là những gì Google Dòng tin hay không, nhưng tôi thấy đây là một cách thanh lịch để đưa ra gợi ý. 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 
} 
+0

Điều này thật tuyệt. Cám ơn vì đã chia sẻ! – danijoo

+0

haha ​​không phải lo lắng, bỏ phiếu có thể? – Voy