ViewPager或ImgeView載入圖片出現記憶體溢位(OOM)
阿新 • • 發佈:2019-02-05
Demo下載地址:http://download.csdn.net/detail/u012720262/9424512package 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) { } } }