Pregunta

i am new to android but i have one query which i am not able to understand how to do.

i have created 3 xml files as one.xml,two.xml,three.xml

but as per the flow of the application i have to swipe left to right

what method should i use and can i add two.xml and three.xml two files into one.xml such that after adding horizontal view i can swipe it

diagram representation is done below

enter image description here

can i include other two files in one file such that it will be easy

help me friends

¿Fue útil?

Solución

For swiping you can use gesture, try out with following code. Create one new java file and give name as SimpleGestureFilter.java

and paste the following content into it.

public class SimpleGestureFilter extends SimpleOnGestureListener {

    public final static int SWIPE_UP = 1;
    public final static int SWIPE_DOWN = 2;
    public final static int SWIPE_LEFT = 3;
    public final static int SWIPE_RIGHT = 4;

    public final static int MODE_TRANSPARENT = 0;
    public final static int MODE_SOLID = 1;
    public final static int MODE_DYNAMIC = 2;

    private final static int ACTION_FAKE = -13; // just an unlikely number
    private int swipe_Min_Distance = 100;
    private int swipe_Max_Distance = 350;
    private int swipe_Min_Velocity = 100;

    private int mode = MODE_DYNAMIC;
    private boolean running = true;
    private boolean tapIndicator = false;

    private Activity context;
    private GestureDetector detector;
    private SimpleGestureListener listener;

    public SimpleGestureFilter(Activity context, SimpleGestureListener sgl) {

        this.context = context;
        this.detector = new GestureDetector(context, this);
        this.listener = sgl;
    }

    public void onTouchEvent(MotionEvent event) {

        if (!this.running)
            return;

        boolean result = this.detector.onTouchEvent(event);

        if (this.mode == MODE_SOLID)
            event.setAction(MotionEvent.ACTION_CANCEL);
        else if (this.mode == MODE_DYNAMIC) {

            if (event.getAction() == ACTION_FAKE)
                event.setAction(MotionEvent.ACTION_UP);
            else if (result)
                event.setAction(MotionEvent.ACTION_CANCEL);
            else if (this.tapIndicator) {
                event.setAction(MotionEvent.ACTION_DOWN);
                this.tapIndicator = false;
            }

        }
        // else just do nothing, it's Transparent
    }

    public void setMode(int m) {
        this.mode = m;
    }

    public int getMode() {
        return this.mode;
    }

    public void setEnabled(boolean status) {
        this.running = status;
    }

    public void setSwipeMaxDistance(int distance) {
        this.swipe_Max_Distance = distance;
    }

    public void setSwipeMinDistance(int distance) {
        this.swipe_Min_Distance = distance;
    }

    public void setSwipeMinVelocity(int distance) {
        this.swipe_Min_Velocity = distance;
    }

    public int getSwipeMaxDistance() {
        return this.swipe_Max_Distance;
    }

    public int getSwipeMinDistance() {
        return this.swipe_Min_Distance;
    }

    public int getSwipeMinVelocity() {
        return this.swipe_Min_Velocity;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {

        final float xDistance = Math.abs(e1.getX() - e2.getX());
        final float yDistance = Math.abs(e1.getY() - e2.getY());

        if (xDistance > this.swipe_Max_Distance
                || yDistance > this.swipe_Max_Distance)
            return false;

        velocityX = Math.abs(velocityX);
        velocityY = Math.abs(velocityY);
        boolean result = false;

        if (velocityX > this.swipe_Min_Velocity
                && xDistance > this.swipe_Min_Distance) {
            if (e1.getX() > e2.getX()) // right to left
                this.listener.onSwipe(SWIPE_LEFT);
            else
                this.listener.onSwipe(SWIPE_RIGHT);

            result = true;
        } else if (velocityY > this.swipe_Min_Velocity
                && yDistance > this.swipe_Min_Distance) {
            if (e1.getY() > e2.getY()) // bottom to up
                this.listener.onSwipe(SWIPE_UP);
            else
                this.listener.onSwipe(SWIPE_DOWN);

            result = true;
        }

        return result;
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        this.tapIndicator = true;
        return false;
    }

    @Override
    public boolean onDoubleTap(MotionEvent arg) {
        this.listener.onDoubleTap();
        ;
        return true;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent arg) {
        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent arg) {

        if (this.mode == MODE_DYNAMIC) { // we owe an ACTION_UP, so we fake an
            arg.setAction(ACTION_FAKE); // action which will be converted to an
                                        // ACTION_UP later.
            this.context.dispatchTouchEvent(arg);
        }

        return false;
    }

    static interface SimpleGestureListener {
        void onSwipe(int direction);

        void onDoubleTap();
    }
}

then in your activity class

public class abcd extends Activity implements SimpleGestureListener{

//declare this directly after class,
private SimpleGestureFilter detector;

//assign this in oncreate method
detector = new SimpleGestureFilter(this, this);

and then outside the onCreate method declare this 2 method,

@Override
     public boolean dispatchTouchEvent(MotionEvent me) {
     // Call onTouchEvent of SimpleGestureFilter class
     this.detector.onTouchEvent(me);
     return super.dispatchTouchEvent(me);
     }

     @Override
     public void onSwipe(int direction) {
     switch (direction) {

     case SimpleGestureFilter.SWIPE_RIGHT:
     break;
     case SimpleGestureFilter.SWIPE_LEFT:
     break;
     case SimpleGestureFilter.SWIPE_DOWN:
     break;
     case SimpleGestureFilter.SWIPE_UP:
     break;
     }
     }

     @Override
     public void onDoubleTap() {
     Toast.makeText(this, "Double Tap", Toast.LENGTH_SHORT).show();
     }
}

now you have all gesture base event control, like left to right, right to left and all, just use whatever code you want to use inside it. like if you want to move from one activity to other using left to right then add

case SimpleGestureFilter.SWIPE_LEFT:
  Intent i = new Intent(A.this, B.class);
  startActivity(i);
         break;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top