2016-11-14 210 views
1

我有標準導航抽屜,要打開您需要從左側窗口向右滑動的導航抽屜。我在不同的手機上嘗試過這種方式,而有些外殼上卻不能正確滑動(非常困難)。所以我想添加一個輕掃手勢。所以當你向右滑動時,抽屜會打開。我無法找到要刷卡的代碼!我試着看,但一切似乎模糊。如何添加向右滑動以打開導航抽屜

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 

這是我的一些代碼。請告訴我,如果你需要別的東西!希望有人能解決這個問題!

更新: 我已經找到了刷卡代碼,並做了一個類。

import android.view.GestureDetector; 
 
import android.view.GestureDetector.SimpleOnGestureListener; 
 
import android.view.MotionEvent; 
 
import android.view.View; 
 
import android.view.View.OnTouchListener; 
 

 
public class OnSwipeTouchListener implements OnTouchListener { 
 

 
    private final GestureDetector gestureDetector; 
 

 
    public OnSwipeTouchListener (Context ctx){ 
 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
 
    } 
 

 
    @Override 
 
    public boolean onTouch(View v, MotionEvent event) { 
 
     return gestureDetector.onTouchEvent(event); 
 
    } 
 

 
    private final class GestureListener extends SimpleOnGestureListener { 
 

 
     private static final int SWIPE_THRESHOLD = 100; 
 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 
 

 
     @Override 
 
     public boolean onDown(MotionEvent e) { 
 
      return true; 
 
     } 
 

 
     @Override 
 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
 
      boolean result = false; 
 
      try { 
 
       float diffY = e2.getY() - e1.getY(); 
 
       float diffX = e2.getX() - e1.getX(); 
 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
 
         if (diffX > 0) { 
 
          onSwipeRight(); 
 
         } else { 
 
          onSwipeLeft(); 
 
         } 
 
        } 
 
        result = true; 
 
       } 
 
       else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
 
         if (diffY > 0) { 
 
          onSwipeBottom(); 
 
         } else { 
 
          onSwipeTop(); 
 
         } 
 
        } 
 
        result = true; 
 

 
      } catch (Exception exception) { 
 
       exception.printStackTrace(); 
 
      } 
 
      return result; 
 
     } 
 
    } 
 

 
    public void onSwipeRight() { 
 
    } 
 

 
    public void onSwipeLeft() { 
 
    } 
 

 
    public void onSwipeTop() { 
 
    } 
 

 
    public void onSwipeBottom() { 
 
    } 
 
}

這裏是我的代碼的使用在我的MainActivity類別

drawer.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View arg0) { 
 

 
      } 
 
     }); 
 
     drawer.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) { 
 
      public boolean onSwipeTop() { 
 
       Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show(); 
 
       return true; 
 
      } 
 
      public boolean onSwipeRight() { 
 
       DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
 
       drawer.openDrawer(GravityCompat.START); 
 

 
       return true; 
 
      } 
 
      public boolean onSwipeLeft() { 
 
       DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
 
       drawer.closeDrawer(GravityCompat.START); 
 

 
       return true; 
 
      } 
 
      public boolean onSwipeBottom() { 
 
       Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
 
       return true; 
 
      } 
 
     });

的敬酒的工作時,我刷卡,但我嘗試添加opendrawer和closerdrawer左右刷卡,但沒有發生..

+0

看看這個:HTTP: //stackoverflow.com/a/12938787/5923606 – uguboz

+0

Ty it幫助找到輕掃手勢!但我似乎無法打開導航抽屜的代碼?你看我是否失去了什麼? – Tim

回答

0

變化從

public void onSwipeRight() { 
    } 

方法來

public abstract void onSwipeRight(); 

...

,使烏拉圭回合類的抽象太

public abstract class OnSwipeTouchListener 
+0

Ty for you help!當我下班回家時,我會盡力嘗試! – Tim