【问题标题】:how to ViewFlipper addView or removeView after autoStart set to trueautoStart 设置为 true 后如何 ViewFlipper addView 或 removeView
【发布时间】:2016-08-09 15:04:30
【问题描述】:

对于我的应用程序,我需要以幻灯片形式显示大量图像(来自 url,而不是来自手机内存)。我为此使用 ViewFlipper。我从 url 获取这些图像并将它们添加到 viewFlipper 中。问题是当我添加 5-6 张图片时它工作正常,但超过 5-6 张它会进入 OutOfMemory 错误。

我认为,如果我们能以某种方式做这样的事情,这是可以做到的.. 1. 向 ViewFlipper 添加一组图像 2. startFlipping,显示该图像/视图后删除视图, 3. 添加更多图片。

不确定是否可以使用 viewFlipper 或有其他方法吗?

我的 AutoSlideShow 示例代码:

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

    }

【问题讨论】:

    标签: viewflipper


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2020-07-26
      • 2020-12-09
      • 2013-12-24
      相关资源
      最近更新 更多