Страница 1 из 1

OutOfMemory

Добавлено: 24 апр 2014, 11:57
Lucifer777
Используя этот мануал пытаюсь побороть ошибку не хватки памяти. Но нечего не выходит, при переключении на 3-е изображение всё вылетает. Помогите пожалуйста

Код активити:

Код: Выделить всё


public class VerboseMediaArhitechture extends Activity {

	public static int[] DataImg;
	public static int[] DataText;
	ImageView picture;
	TextView description;
	ImageButton hide;
	Bitmap bg;
	static ImageView leftImage;
	static ImageView rightImage;
	static boolean hideShow=true;
	Gallery gallery;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setDataImage();
		setContentView(R.layout.verbose_media_arhitechture);
		
		picture=(ImageView) findViewById(R.id.MediaPicture);
		gallery=(Gallery) findViewById(R.id.MediagGallery);
		description=(TextView) findViewById(R.id.mediaImageDescription);
		hide=(ImageButton) findViewById(R.id.mediaHideBt); 
		leftImage=(ImageView) findViewById(R.id.leftImage);
		rightImage=(ImageView) findViewById(R.id.rightImage);
		
		leftImage.setImageBitmap(BitmapFactory.decodeResource(MainActivity.resourcesApp, R.drawable.pattern));
		
		
		
		gallery.setAdapter(new GalleryAdapter(this));
		
		
		picture.setImageBitmap(GalleryAdapter.decodeSampledBitmapFromResource(MainActivity.resourcesApp,DataImg[0], MainActivity.WidthSreenSize, MainActivity.HightSreenSize));
		
		gallery.setSelection(6);
		
		hide.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(hideShow){
				description.setText("");
				description.setBackgroundDrawable(null);
				applyBlur(hide,picture);
				hide.setImageResource(R.drawable.button_show);
				hideShow=false;
				applyBlur(rightImage,leftImage);
				}
				else{
					
					applyBlur(description,picture);
					description.setText("Привет мир!!");
					hide.setImageResource(R.drawable.button_hide);
					hide.setBackgroundDrawable(null);
					hideShow=true;
				}
			}
		});
		
		gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View v,int position, long id) {
				try{
					
					if(hideShow){
						applyBlur(description,picture);
					}
					else{
						applyBlur(hide,picture);
					}
					picture.setImageBitmap(GalleryAdapter.decodeSampledBitmapFromResource(MainActivity.resourcesApp, DataImg[position], MainActivity.WidthSreenSize, MainActivity.HightSreenSize));
					
					
				}
				catch(Exception e){
					e.printStackTrace();
				}
			}
		});
		applyBlur(description,picture);
		leftImage.post(setBlur);
			
	}
	
	public void applyBlur(final View view,final View image) {
		image.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
            	image.getViewTreeObserver().removeOnPreDrawListener(this);
            	image.buildDrawingCache();
	    
                Bitmap bmp =  image.getDrawingCache();
               
                view.setBackgroundDrawable(new BitmapDrawable(MainActivity.resourcesApp, blur(bmp, view)));
               bmp.recycle();
               return true;
             
            }
        });
		//if(view.getBackground()!=null){
         //   leftImage.setImageDrawable(rightImage.getBackground());
          // }
    }
private Bitmap blur(Bitmap bkg, View view) {
	    
	    float scaleFactor = 8;
	    float radius = 20;
	   

	    Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasuredWidth()),
	            (int) (view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);
	    Canvas canvas = new Canvas(overlay);
	    canvas.translate(-view.getLeft()+15, -view.getTop());
	    canvas.drawBitmap(bkg, 0, 0, null);
	    overlay = FastBlur.doBlur(overlay, (int)radius, true);
	    
	        
	        return overlay;
	        
	   }

Runnable setBlur= new Runnable() {
	@Override
	public void run() {
	
		applyBlur(rightImage,leftImage);
		
		
	}};

	private void setDataImage(){
		Intent intent = getIntent();
		int index = intent.getIntExtra(MediaActivity.EXTRA_MESSAGE, 1);
		
		switch(index){
		case 1:
		DataImg = new int [25];
		DataText= new int [DataImg.length];
		DataImg[0]=R.drawable.arhitektura_01;
		DataImg[1]=R.drawable.arhitektura_02;
		DataImg[2]=R.drawable.arhitektura_03;
		DataImg[3]=R.drawable.arhitektura_04;
		DataImg[4]=R.drawable.arhitektura_05;
		DataImg[5]=R.drawable.arhitektura_06;
		DataImg[6]=R.drawable.arhitektura_07;
		DataImg[7]=R.drawable.arhitektura_17;
		DataImg[8]=R.drawable.arhitektura_18;
		DataImg[9]=R.drawable.arhitektura_19;
		DataImg[10]=R.drawable.arhitektura_20;
		DataImg[11]=R.drawable.arhitektura_21;
		DataImg[12]=R.drawable.arhitektura_22;
		DataImg[13]=R.drawable.arhitektura_23;
		DataImg[14]=R.drawable.arhitektura_26;
		DataImg[15]=R.drawable.arhitektura_27;
		DataImg[16]=R.drawable.arhitektura_28;
		DataImg[17]=R.drawable.arhitektura_31;
		DataImg[18]=R.drawable.arhitektura_32;
		DataImg[19]=R.drawable.arhitektura_35;
		DataImg[20]=R.drawable.arhitektura_36;
		DataImg[21]=R.drawable.arhitektura_37;
		DataImg[22]=R.drawable.arhitektura_38;
		DataImg[23]=R.drawable.arhitektura_42;
		DataImg[24]=R.drawable.arhitektura_45;
		
		break;
		case 2:
			DataImg = new int [8];
			DataText= new int [DataImg.length];
		DataImg[0]=R.drawable.interjeri_09;
		DataImg[1]=R.drawable.interjeri_10;
		DataImg[2]=R.drawable.interjeri_11 ;
		DataImg[3]=R.drawable.interjeri_12;
		DataImg[4]=R.drawable.interjeri_13;
		DataImg[5]=R.drawable.interjeri_14;
		DataImg[6]=R.drawable.interjeri_15;
		DataImg[7]=R.drawable.interjeri_16;
		break;
		case 3:
			DataImg = new int [21];
			DataText= new int [DataImg.length];
		DataImg[0]=R.drawable.inftrastruktura_08;
		DataImg[1]=R.drawable.inftrastruktura_24;
		DataImg[2]=R.drawable.inftrastruktura_25;
		DataImg[3]=R.drawable.inftrastruktura_29;
		DataImg[4]=R.drawable.inftrastruktura_30;
		DataImg[5]=R.drawable.inftrastruktura_33;
		DataImg[6]=R.drawable.inftrastruktura_34;
		DataImg[7]=R.drawable.inftrastruktura_39;
		DataImg[8]=R.drawable.inftrastruktura_40;
		DataImg[9]=R.drawable.inftrastruktura_41;
		DataImg[10]=R.drawable.inftrastruktura_43;
		DataImg[11]=R.drawable.inftrastruktura_44;
		DataImg[12]=R.drawable.inftrastruktura_46;
		DataImg[13]=R.drawable.inftrastruktura_47;
		DataImg[14]=R.drawable.inftrastruktura_48;
		DataImg[15]=R.drawable.inftrastruktura_49;
		DataImg[16]=R.drawable.inftrastruktura_50;
		DataImg[17]=R.drawable.inftrastruktura_51;
		DataImg[18]=R.drawable.inftrastruktura_52;
		DataImg[19]=R.drawable.inftrastruktura_53;
		DataImg[20]=R.drawable.inftrastruktura_54;
		
		
		
		break;
	}
		
	}
	
	@Override
	protected void onDestroy() {
		
		
		super.onDestroy();
	}
	
}
Код адаптера галереи:

Код: Выделить всё

package ru.donstroy.parusamobile.media;


public class GalleryAdapter extends BaseAdapter{
	private int mGalleryItemBackground;
	private Context mContext;
	private final int[] mImage=VerboseMediaArhitechture.DataImg;

	public GalleryAdapter(Context сontext) {
		mContext = сontext;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mImage.length;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return mImage[position];
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return mImage[position];
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ImageView view = new ImageView(mContext);
		
		view.setImageBitmap(decodeSampledBitmapFromResource(MainActivity.resourcesApp, mImage[position],MainActivity.HightSreenSize/8,MainActivity.HightSreenSize/8););
		
		//view.setImageResource(mImage[position]);
		//view.setPadding(20,0, 20, 0);
		view.setLayoutParams(new Gallery.LayoutParams(MainActivity.WidthSreenSize/3, LayoutParams.WRAP_CONTENT));
		view.setScaleType(ImageView.ScaleType.FIT_XY);
		view.setBackgroundResource(mGalleryItemBackground);
		return view;
	}
	
	public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,int reqWidth, int reqHeight) {

	    // First decode with inJustDecodeBounds=true to check dimensions
	    final BitmapFactory.Options options = new BitmapFactory.Options();
	    options.inJustDecodeBounds = true;
	    BitmapFactory.decodeResource(res, resId, options);

	    // Calculate inSampleSize
	    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

	    // Decode bitmap with inSampleSize set
	    options.inJustDecodeBounds = false;
	    return BitmapFactory.decodeResource(res, resId, options);
	}
	
	private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}
}



Re: OutOfMemory

Добавлено: 24 апр 2014, 12:00
sergentum
подсветку синтаксиса неплохо бы делать, чтобы помогающим было удобнее читать твой код

Re: OutOfMemory

Добавлено: 24 апр 2014, 12:08
Lucifer777
sergentum писал(а):подсветку синтаксиса неплохо бы делать, чтобы помогающим было удобнее читать твой код
Активити
Адаптер