Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android - Show/Hide TextView using Swipe Left to Right

I'm trying to show/hide TextView. So if the user swipe left-to-right, it will show TextView from behind the "orange gradient view". And after the text shown, after 5 seconds, it will hiding it again like the picture below:

Swipe left-to-right to show TextView

But i don't have any idea what the best practice to implement just like above. Please help.

like image 701
wdyz Avatar asked Jan 13 '17 12:01

wdyz


People also ask

How do I change left and right swipe on Android?

Tap the settings icon. Tap General. Scroll down to Swipe actions at the bottom of the screen. Choose whether you want to Select, Complete or Schedule a task when swiping left or right.

How do I make TextView disappear?

you should use this: myText. setVisibility(View. INVISIBLE);


1 Answers

Here is the xml file

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

Now use this class

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

In your MainActivity.java class use below 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 
            }
        });
like image 81
Pranav Darji Avatar answered Sep 27 '22 19:09

Pranav Darji