2017-01-13 1 views
1

J'essaie d'afficher/masquer TextView. Donc, si l'utilisateur balaye de gauche à droite, il affichera TextView derrière la "vue dégradé orange". Et après le texte affiché, au bout de 5 secondes, il se cache à nouveau comme l'image ci-dessous:Android - Afficher/masquer le texteAfficher en utilisant Glisser de gauche à droite

Swipe left-to-right to show TextView

Mais je n'ai aucune idée de ce que les meilleures pratiques à mettre en œuvre comme ci-dessus. S'il vous plaît aider.

+0

Faites-les l'une sur l'autre et Google et recherche ceci: GestureDetector, Android animation – Gudin

+1

pour développer ce que @gudin a écrit. placez-les tous les deux dans un framelayout avec le dégradé en haut, lorsqu'un geste est détecté sur le widget dégradé orange, animez une animation diapositive droite (lorsque l'animation est terminée, définissez le dégradé orange INVISIBLE avec un écouteur d'animation). Créez un nouveau gestionnaire postdelayed pendant cinq secondes et lorsque cela est terminé, faites glisser le dégradé orange ou le rendre visible à nouveau. –

+0

@BradleyWilson: pouvez-vous me donner un exemple, s'il vous plaît? si le geste x pos est au centre, comment puis-je mettre en pause l'animation à la moitié de la largeur du widget dégradé orange? – wdyz

Répondre

3

Voici le fichier xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/activity_theme_sel_ll_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <!--Add your content here for texview and whatever --> 
    </LinearLayout> 

utilisent maintenant cette classe

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

/** 
* This TouchListener is Using for very First time ThemeSelection Screen with SwipeLeft Finger 
*/ 
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 = 1; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 1; 

     @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() { 
    } 
} 

Dans votre utilisation de classe MainActivity.java ci-dessous le code

//llMain is the root layout of your xml where you want to perform swipe 
     llMain.setOnTouchListener(new OnSwipeTouchListener(ThemeSelectionActivity.this) { 
      @Override 
      public void onSwipeLeft() { 
       super.onSwipeLeft(); 

       } 
      } 

      @Override 
      public void onSwipeRight() { 
       super.onSwipeRight(); 

    // Put your logic here for text visibility and for timer like progress bar for 5 second and setText 
      } 
     }); 
+0

Merci! J'ai essayé ce code et fonctionne bien. Mais, comment puis-je ajouter l'animation de balayage sur le widget dégradé orange? et l'animation peut-elle être arrêtée au x pos du geste? – wdyz

1

Créer un anim répertoire à l'intérieur des res répertoire et le mettre en tant que slide.xml

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:fillAfter="true"> 

    <translate 
     android:fromXDelta="0%p" 
     android:toXDelta="75%p" 
     android:duration="800" /> 
</set> 

utilisation ci-dessous la méthode pour l'animation

/** 
    * Animate the swipe rightto left 
    * 
    * @param context context of the activity or fragment 
    */ 
    private void animImage(final Context context) { 
     // Load the animation like this 
     final Animation animRightToLeft = AnimationUtils.loadAnimation(context, R.anim.anim_move_right_to_left); 
     textViewObject.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     // Start the animation like this 
     textViewObject.startAnimation(animRightToLeft); 
    } 

// Now on MainActivity 
llMain.setOnTouchListener(new OnSwipeTouchListener(ThemeSelectionActivity.this) { 
      @Override 
      public void onSwipeLeft() { 
       super.onSwipeLeft(); 

       } 
      } 

      @Override 
      public void onSwipeRight() { 
       super.onSwipeRight(); 
animImage(getApplicationContext()); 
      } 
     }); 
+0

merci, Comment pouvons-nous le faire toucher l'animation diapositive sensible. Comme si je le touchais et le faisais glisser vers la droite, je le balai jusqu'à l'endroit où se trouve mon doigt. même que la fonctionnalité de réponse WhatsApp – user3819810