Как поменять ImageView и TextView жестом пальца в Android - PullRequest
2 голосов
/ 23 февраля 2012

У меня активность с макетом, содержащим ImageView и TextView. ImageView TextvVew для показа изображения и имени человека соответственно. Мне нужно поменять местами справа налево и наоборот в отношении пользователя жестом пальца. В то же время, имя и изображение должны быть изменены соответственно. Есть ли способ реализовать это? Было бы замечательно, если бы кто-нибудь смог дать мне знать учебник, написанный на эту тему, так как я новичок в разработке под Android.

Спасибо.

Я пробовал следующие способы, но он не обнаружил никакого жеста.

MyGroupActivity.java

import goldenOld.pkg.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.Toast;

public class MyGroupActivity extends Activity implements OnGestureListener{

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.tab_mygroup);
}

public boolean onDown(MotionEvent arg0) {
    // TODO Auto-generated method stub
    return false;
}

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    Toast mToast2 =  Toast.makeText(getApplicationContext(), "Fling", Toast.LENGTH_SHORT);
    mToast2.show();
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        // right to left swipe
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
        }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
        }
        else if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            Toast.makeText(getApplicationContext(), "Swipe up", Toast.LENGTH_SHORT).show();
        }  else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            Toast.makeText(getApplicationContext(), "Swipe down", Toast.LENGTH_SHORT).show();
        }
    } catch (Exception e) {
        // nothing
        Toast mToast =  Toast.makeText(getApplicationContext(), "Exception", Toast.LENGTH_SHORT);
        mToast.show();
    }

    return true;

}

public void onLongPress(MotionEvent arg0) {
    Toast mToast =  Toast.makeText(getApplicationContext(), "Long Press", Toast.LENGTH_SHORT);
    mToast.show();
}

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
        float arg3) {
    // TODO Auto-generated method stub
    return false;
}

public void onShowPress(MotionEvent arg0) {
    // TODO Auto-generated method stub

}

public boolean onSingleTapUp(MotionEvent arg0) {
    Toast mToast =  Toast.makeText(getApplicationContext(), "Single Tap", Toast.LENGTH_SHORT);
    mToast.show();
    return true;
}

public class MyGestureDetector extends SimpleOnGestureListener {

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Toast mToast =  Toast.makeText(getApplicationContext(), "Fling", Toast.LENGTH_SHORT);
        mToast.show();
        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false;

            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                //do what you want on left swipe
            }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                //do what you want on right swipe
            }
        } catch (Exception e) {
            // nothing
        }
        return false;
    }

    public boolean onSingleTapUp(MotionEvent arg0) {
        Toast mToast =  Toast.makeText(getApplicationContext(), "Single Tap", Toast.LENGTH_SHORT);
        mToast.show();
        return true;
    }

}

}

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Я использую это для обнаружения жестов

public class MyGestureDetector extends SimpleOnGestureListener {

        private static final int SWIPE_MIN_DISTANCE = 120;
        private static final int SWIPE_MAX_OFF_PATH = 250;
        private static final int SWIPE_THRESHOLD_VELOCITY = 200;
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;

                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    //do what you want on left swipe
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    //do what you want on right swipe
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }

    }
1 голос
/ 23 февраля 2012

Вам придется использовать детектор жестов для ваших целей.См. Следующие примеры:

Также обратите внимание, что onFling()это метод обратного вызова, который будет вызываться, когда ваша активность обнаруживает какой-либо жест.Так что только здесь вам придется написать свою логику определения направления движения пользователя.

...