полноэкранный браузер изображений вызывается из GridView - PullRequest
1 голос
/ 25 октября 2011

У меня есть действие GridView, состоящее из одного GridView, который отображает до 100 миниатюр изображений из местоположения SDCard. Я создаю другое действие, которое вызывается при касании любого из эскизов в сетке. Это другое действие должно отображать выбранное изображение в полноэкранном режиме (это можно сделать, передав изображение в новое действие). Тем не менее, я хотел бы иметь возможность провести влево / вправо от полноэкранного вида выбранного изображения, чтобы перейти к следующему, вместо того, чтобы вернуться к виду сетки и выбрать другое изображение для полноэкранного отображения.

Как я могу добиться этой активности браузера изображений, которая извлекает изображения из местоположения sdcard для полноэкранного просмотра, используя жест смахивания?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011
  1. Загрузите последнюю версию пакета совместимости через SDK Manager (или перейдите здесь )
  2. Установите JAR как библиотеку в вашем проекте
  3. Использование ViewPager, которая представляет собой группу ViewGroup, которая действует как AdapterView и выполняет всю работу по управлению жестами смахивания за вас

Кроме того, приведен пример из блога разработчиков Android, который может помочь вам начать работу.

НТН

2 голосов
/ 25 октября 2011

Вы можете использовать ViewFlipper

public class ImageViewTest extends Activity {

    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;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;

    private Animation slideLeftIn;
    private Animation slideLeftOut;
    private Animation slideRightIn;
    private Animation slideRightOut;
    private ViewFlipper viewFlipper;

    String message = "Initial Message"; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Set up viewflipper
        viewFlipper = new ViewFlipper(this);       
        ImageView i = new ImageView(this);
        i.setImageResource(R.drawable.sample_1);
        ImageView i2 = new ImageView(this);
        i2.setImageResource(R.drawable.sample_2);
        viewFlipper.addView(i);
        viewFlipper.addView(i2);

        //set up animations
        slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
        slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
        slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
        slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);

        //put up a brownie as a starter
        setContentView(viewFlipper);

        gestureDetector = new GestureDetector(new MyGestureDetector());
    }

    public class MyGestureDetector extends SimpleOnGestureListener {
        @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;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Log.v(LOGID,"right to left swipe detected");
                    viewFlipper.setInAnimation(slideLeftIn);
                    viewFlipper.setOutAnimation(slideLeftOut);
                    viewFlipper.showNext();
                    setContentView(viewFlipper);

                } // left to right swipe 
                else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Log.v(LOGID,"left to right swipe detected");                    
                    viewFlipper.setInAnimation(slideRightIn);
                    viewFlipper.setOutAnimation(slideRightOut);
                    viewFlipper.showPrevious();
                    setContentView(viewFlipper);

                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }
    }

@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}

}
...