Вопрос по Android - как подготовить 100 изображений для показа через Fling / Swipe? - PullRequest
3 голосов
/ 29 января 2010

Я совершенно новичок в этом, возился уже неделю.

Придумали простое приложение для просмотра изображений на 2 изображения.

Характеристика: Левый и правый пролистывания переключат изображения. Очень просто.

Что я хотел бы сделать: Иметь до 100 изображений.

примечание: Все мои изображения находятся в моей папке res / drawable.
Они называются image1.png к image100.png

Я, очевидно, не хочу делать:

    ImageView i = new ImageView(this);
    i.setImageResource(R.drawable.image1);
    viewFlipper.addView(i);
    ImageView i2 = new ImageView(this);
    i2.setImageResource(R.drawable.image2);
    viewFlipper.addView(i2);
    ImageView i3 = new ImageView(this);
    i3.setImageResource(R.drawable.image3);
    viewFlipper.addView(i3);

вплоть до i100.

как мне сделать это в цикле, который является гибким и читает все из папки для рисования (и не ограничивается 100 изображениями)?

Источник:

    public class ImageViewTest extends Activity {
        private static final String LOGID = "CHECKTHISOUT";

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

        // This doesn't work
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (gestureDetector.onTouchEvent(event)){
                Log.v(LOGID,"screen touched");
                return true;
            }
            else{
                return false;
            }
        }
    }

Ответы [ 3 ]

3 голосов
/ 13 августа 2011

без флипперов. Я переписываю твой код вот так и работает для меня как шарм.

package com.mayuonline.swipe;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class SwipetestActivity extends Activity{
    private static final String LOGID = "CHECKTHISOUT";
    public int[] list = {R.drawable.a,R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e };
    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;
    public int i = 0;

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

        setContentView(R.layout.main);

        ImageView imageview = (ImageView)findViewById(R.id.imageView1);
        imageview.setImageResource(list[0]);

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

    public class MyGestureDetector extends SimpleOnGestureListener implements OnGestureListener {
        @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) {
                    ImageView imageview = (ImageView)findViewById(R.id.imageView1);
                    if(list.length>i){
                        i++;
                    imageview.setImageResource(list[i]);
                    }
                    Log.v(LOGID,"right to left swipe detected");


                } // left to right swipe 
                else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    ImageView imageview = (ImageView)findViewById(R.id.imageView1);
                    if(i>0){
                        i--;
                    imageview.setImageResource(list[i]);
                    }
                    Log.v(LOGID,"left to right swipe detected");                    


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

    // This doesn't work
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (gestureDetector.onTouchEvent(event)){
            Log.v(LOGID,"screen touched");
            return true;
        }
        else{
            return false;
        }
    }

}
0 голосов
/ 05 декабря 2011

Я думаю, что вам нужен не ViewFlipper, вам нужен PageViewer. С 50 изображений работает как шарм на моем Galaxy S!

С помощью кода Mayu изображения изменяются с помощью анимации, но пока жест не будет завершен (палец убран с экрана), анимация не начнется. С PageViewer анимация повторяет положение вашего пальца.

PageViewer отсутствует в Android SDK, но включен в пакет поддержки Android.

В этой ссылке вы можете найти больше информации:

http://android -developers.blogspot.com / 2011/08 / горизонтальный ракурс-ударяя-с-viewpager.html

0 голосов
/ 29 января 2010

Что вам нужно сделать - это написать адаптер, который загрузит изображение и вернет его в getview. Пример того, как это сделать здесь - http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Animation2.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...