Как ViewFlipper addView или removeView после того, как autoStart установлен в true

Для моего приложения у меня есть много изображений (из URL, а не из памяти телефона), которые должны быть показаны в виде слайд-шоу. Я использую ViewFlipper для этого. Я получаю эти изображения из URL и добавляю их в viewFlipper. Проблема в том, что, когда я добавляю 5-6 изображений, он работает нормально, но для более чем 5-6 он переходит в ошибку OutOfMemory.

Я думаю, это можно сделать, если мы можем как-то сделать что-то вроде этого... 1. добавить некоторый набор изображений в ViewFlipper 2. startFlipping, удалить вид после показа этого изображения / представления, 3. добавить больше изображений.

Не уверен, что это можно сделать с помощью viewFlipper или есть другой способ?

Пример кода моего автослайда:

    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.ViewFlipper;

    public class AutoSlideShow extends Activity {

        ViewFlipper viewFlipper = null;
        Button pauseButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_auto_slide_show);

            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

            Intent intent = getIntent();
            String[] allUrls = intent.getExtras().getStringArray("allImageUrls");

            viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
            viewFlipper.setFlipInterval(2000);
            viewFlipper.setAutoStart(true);

            for (int i = 0; i < allUrls.length; i++) {
                setFlipperImage(allUrls[i]);
            }

            pauseButton = (Button) findViewById(R.id.pauseButton);
            pauseButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (pauseButton.getText().equals("Resume")) {
                        viewFlipper.startFlipping();
                        pauseButton.setText("Pause");
                    } else {
                        viewFlipper.stopFlipping();
                        pauseButton.setText("Resume");
                    }
                }
            });
        }

        private void setFlipperImage(String url) {
            ImageView image = new ImageView(getApplicationContext());
            Bitmap bitmap = null;

            try {

                InputStream content = (InputStream) new URL(url).getContent();
                bitmap = BitmapFactory.decodeStream(content);       

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } 

            image.setImageBitmap(bitmap);
            viewFlipper.addView(image);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.auto_slide_show, menu);
            return true;
        }

    }

1 ответ

Частный ViewFlipper mViewFlipper; частный GestureDetector mGestureDetector;

int i = 0;
int k = 0;
int l = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_auto_slide_show);
    mViewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);


     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        Intent intent = getIntent();
        String[] allUrls = intent.getExtras().getStringArray("allImageUrls");

    if (i == 0) {

        for (int i = 0; i < 2; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(allUrls[i]);
            mViewFlipper.addView(imageView);
            k++;
        }
        i = 1;
    }

    mViewFlipper.getDisplayedChild();
    // Add all the images to the ViewFlipper

    CustomGestureDetector customGestureDetector = new CustomGestureDetector();
    mGestureDetector = new GestureDetector(this, customGestureDetector);

    mViewFlipper.setInAnimation(this, android.R.anim.fade_in);
    mViewFlipper.setOutAnimation(this, android.R.anim.fade_out);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mGestureDetector.onTouchEvent(event);

    return super.onTouchEvent(event);
}

class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        // Swipe left (next)
        if (e1.getX() > e2.getX()) {
            mViewFlipper.setInAnimation(MainActivity.this, R.anim.left_in);
            mViewFlipper.setOutAnimation(MainActivity.this, R.anim.left_out);

            mViewFlipper.showNext();

            if (mViewFlipper.getDisplayedChild() > 1) {
                mViewFlipper.removeViewAt(l);
            }

            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageResource(allUrls[k]);
            mViewFlipper.addView(imageView);
            k++;

            Log.d("Count", "" + mViewFlipper.getChildCount());
        }

        // Swipe right (previous)
        if (e1.getX() < e2.getX()) {
            mViewFlipper.setInAnimation(MainActivity.this, R.anim.right_in);
            mViewFlipper.setOutAnimation(MainActivity.this, R.anim.right_out);

            mViewFlipper.showPrevious();

             if (mViewFlipper.getDisplayedChild() > 1) {
                mViewFlipper.removeViewAt(l);
            }

            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageResource(allUrls[k]);
            mViewFlipper.addView(imageView);
            k++;
        }

        return super.onFling(e1, e2, velocityX, velocityY);
    }
}
Другие вопросы по тегам