DrawerLayout modifie la sensibilité?

La sensibilité par défaut de DrawerLayout est correcte, mais j'aimerais faciliter un geste de glissement de gauche à droite sur le côté de l'écran pour ouvrir le tiroir. Je trouve qu'il est difficile pour les tablettes, mais aussi sur certains téléphones.

Je ne vois pas de références de gestes ou de gestes dans la page DrawerLayout sur l'API Web. Est-ce que quelqu'un a vu quelque chose qui nous permettra de le faire?

  • Reproduction de HoneyIb GMail UI avec des fragments
  • Android - bouton personnalisé avec des dessins déformables et un dégradé par programme
  • Un moyen peu coûteux / rapide de bitmaps hash?
  • Appareil photo FLASH_MODE_ON ne fonctionne pas sur Moto X
  • Quand exécuter l'exécution de la fonction exécutive dans Android
  • Comment terminer plusieurs activités sur un clic de bouton?
  • SDK Emplacement indisponible Android Studio + Gradle
  • Texte de bouton pas avec plusieurs lignes
  • OnSharedPreferenceChanged n'a pas été déclenché si un changement se produit dans une activité distincte?
  • Comment modifier le texte du fragment textView de l'activité
  • Comment créer un effet d'ondulation dans une mise en page simple
  • Montrer par programme la barre d'outils après caché par défilement (Android Design Library)
  • 2 Solutions collect form web for “DrawerLayout modifie la sensibilité?”

    Un exemple de geste simple: vous pouvez essayer de mettre sur l'écran supérieur 2 images avec un cercle, et lorsque vous appuyez sur celui pour passer à une autre couche, et à nouveau, vous avez pressé le cercle précédent pour sauter à nouveau. Essayez de passer d'une activité à une autre et si vous souhaitez fermer l'activité précédente, après avoir appelé l'activité suivante, fermez la précédente avec .finish ();

    Pour android.support.v4.widget.DrawerLayout J'ai créé un hack qui vous permet d'étendre la zone où le geste coulissant (stroke) peut commencer, ce qui rend le geste glissant plus facile.

    Mise en œuvre du hack:

      // assuming mDrawerLayout is an instance of android.support.v4.widget.DrawerLayout try { // get dragger responsible for the dragging of the left drawer Field draggerField = DrawerLayout.class.getDeclaredField("mLeftDragger"); draggerField.setAccessible(true); ViewDragHelper vdh = (ViewDragHelper)draggerField.get(mDrawerLayout); // get access to the private field which defines // how far from the edge dragging can start Field edgeSizeField = ViewDragHelper.class.getDeclaredField("mEdgeSize"); edgeSizeField.setAccessible(true); // increase the edge size - while x2 should be good enough, // try bigger values to easily see the difference int origEdgeSize = (int)edgeSizeField.get(vdh); int newEdgeSize = (int) (origEdgeSize * 2); edgeSizeField.setInt(vdh, newEdgeSize); } catch (Exception e) { // we unexpectedly failed - eg if internal implementation of // either ViewDragHelper or DrawerLayout changed } 

    Explication:

    Le hack est basé sur le fait que la classe DrawerLayout repose sur les instances de ViewDragHelper pour gérer le traînage. Il y a deux instances: une pour le tiroir gauche, et une pour la droite. Ils sont instanciés comme ceci:

      public DrawerLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); ... code omitted for brevity .. mLeftDragger = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, mLeftCallback); mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); mLeftDragger.setMinVelocity(minVel); mLeftCallback.setDragger(mLeftDragger); mRightDragger = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, mRightCallback); mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT); mRightDragger.setMinVelocity(minVel); mRightCallback.setDragger(mRightDragger); ... code omitted for brevity .. } 

    Les deux mLeftDragger et mRightDragger sont des champs privés, et le champ ViewDragHelper dans ViewDragHelper est également privé. Il n'existe pas de méthodes publiques permettant au code client de définir ces champs – d'où le hack repose sur la réflexion, qui est fragile face aux modifications internes de la mise en œuvre dans les classes ViewDragHelper et DrawerLayout.

    Prime:
    Un tutoriel complet sur l'utilisation de ViewDragHelper

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.