2017-01-13 6 views
1

Я пытаюсь показать/скрыть TextView. Поэтому, если пользователь проведите пальцем влево-вправо, он отобразит TextView из-за «оранжевого градиента». И после того, как текст, отображаемый, через 5 секунд, он скрывает это снова, как на картинку ниже:Android - Показать/скрыть TextView с помощью прокрутки Влево-Вправо

Swipe left-to-right to show TextView

Но я не имею ни малейшего представления, что лучшая практика для реализации так же, как выше. Пожалуйста, помогите.

+0

сделать их один поверх другого и Google и исследование это: GestureDetector, Android Анимация – Gudin

+1

расширить на то, что @gudin уже писал. поместите их в рамку с градиентом сверху, когда жест отображается в оранжевом градиентном виджетах, анимируйте анимацию в правом слайде (когда анимация закончена, установите оранжевый градиент на INVISIBLE с помощью прослушивателя анимации). Создайте новый обработчик postdelayed в течение пяти секунд, и когда это будет завершено, либо верните оранжевый градиент, либо снова сделайте его видимым. –

+0

@BradleyWilson: Можете ли вы привести мне пример, пожалуйста? если жест x pos находится в центре, как можно приостановить анимацию до половины ширины виджета оранжевого градиента? – wdyz

ответ

3

Вот файл 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> 

Теперь использовать этот класс

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

В вашем использовании класса MainActivity.java ниже код

//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

Спасибо! Я пробовал этот код и хорошо работал. Но, как я могу добавить анимацию сабля на оранжевый градиентный виджет? и может ли анимация быть остановлена ​​на x позе жестов? – wdyz

1

Создание каталога Аним внутри Рез и поместите это как 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> 

Использование ниже метод для анимации

/** 
    * 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

спасибо, Как мы можем настроить сенсорную анимацию слайдов. Например, если я коснусь и проведите пальцем по экрану, он будет прокручиваться до точки, где находится мой палец. То же, что и функция ответа whatsapp – user3819810

Смежные вопросы