1. 程式人生 > >ViewPager或ImgeView載入圖片出現記憶體溢位(OOM)

ViewPager或ImgeView載入圖片出現記憶體溢位(OOM)

package com.example.viewpager_demo;

import java.io.InputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ImageView.ScaleType;

public class MainActivity extends Activity {
	protected ViewPager guidePages;
	protected ArrayList<View> views;
	protected ArrayList<View> dots;
	protected ArrayList<View> dots1;
	LinearLayout dot_layout;
	protected int currentItem = 0;
	protected Button gotiyan;

	int[] array = { R.drawable.welcome01, R.drawable.welcome02,
			R.drawable.welcome03, R.drawable.welcome04 };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		guidePages = (ViewPager) findViewById(R.id.guidePages);
		dot_layout = (LinearLayout) findViewById(R.id.dot_layout);
		LayoutInflater inflater = getLayoutInflater();
		dots = new ArrayList<View>();
		dots.add(findViewById(R.id.sweet_v_dot0));
		dots.add(findViewById(R.id.sweet_v_dot1));
		dots.add(findViewById(R.id.sweet_v_dot2));
		dots.add(findViewById(R.id.sweet_v_dot3));

		dots1 = new ArrayList<View>();
		dots1.add(findViewById(R.id.sweet_t_dot0));
		dots1.add(findViewById(R.id.sweet_t_dot1));
		dots1.add(findViewById(R.id.sweet_t_dot2));
		dots1.add(findViewById(R.id.sweet_t_dot3));
		for (int i = 0; i < dots1.size(); i++) {
			dots1.get(i).setVisibility(View.INVISIBLE);
		}
		currentItem = 0;
		dots1.get(currentItem).setVisibility(View.VISIBLE);
		views = new ArrayList<View>();
		for(int i=0;i<4;++i)
		{
			ImageView image=new ImageView(this);
			views.add(image);
		}
		guidePages.setAdapter(new MyAdapter());
		guidePages.setOnPageChangeListener(new MyPageChangeListener());
	}

	private class MyPageChangeListener implements OnPageChangeListener {

		private int oldPosition = 0;
		@Override
		public void onPageSelected(int arg0) {
			// TODO Auto-generated method stub
			currentItem = arg0;
			if (currentItem == 3) {
				dot_layout.setVisibility(View.GONE);
			} else {
				dot_layout.setVisibility(View.VISIBLE);
			}
			dots1.get(oldPosition).setVisibility(View.INVISIBLE);
			dots1.get(currentItem).setVisibility(View.VISIBLE);

			oldPosition = arg0;
		}

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub

		}
	}

	private class MyAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			return views.size();
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			
			ImageView imageview=(ImageView) views.get(arg1);
			imageview.setScaleType(ScaleType.FIT_XY);
			BitmapFactory.Options opt = new BitmapFactory.Options(); 
			opt.inPreferredConfig =Config.RGB_565; 
			opt.inPurgeable = true; 
			opt.inInputShareable = true; 
			InputStream is = getResources().openRawResource(array[arg1]); 
			Bitmap tmpbmp=BitmapFactory.decodeStream(is, null, opt); 
			imageview.setImageBitmap(tmpbmp);
			((ViewPager) arg0).addView(imageview);
			return views.get(arg1);
		}

		@Override
		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView((View) arg2);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {

		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {

		}

		@Override
		public void finishUpdate(View arg0) {

		}
	}

}
Demo下載地址:http://download.csdn.net/detail/u012720262/9424512