2016-08-30 4 views
0

У меня есть приложение, которое содержит несколько фрагментов, и в одном из них У меня есть пользовательский вид, где я создаю пару растровых изображений, чтобы рисовать на них.Как правильно обработать растровые изображения внутри фрагмента?

Ну, это проблема: Когда я обмениваюсь фрагментами, все нормально, пока не дойду до того места, где находится пользовательский вид. Проблема в том, что, когда я снова и снова выбираю фрагмент (который имеет CustomView), ОЗУ увеличивается, а затем приложение падает.

Я проверил, как растровые изображения создаются и перерабатываются, и я не могу найти решение.

код:

private Bitmap getCircle() { 

    if (mDstBitmap == null) { 
     mDstBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); 

     c = new Canvas(mDstBitmap); 
     c.drawColor(Color.TRANSPARENT); 

     p = new Paint(Paint.ANTI_ALIAS_FLAG); 
     p.setColor(Color.RED); 
     c.drawOval(new RectF(0, 0, mWidth, mHeight), p); 
    } 

    return mDstBitmap; 
} 



@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    int viewWidthHalf = getWidth()/2; 
    int viewHeightHalf = getHeight()/2; 

    float radius = 0.0f; 
    if (viewWidthHalf > viewHeightHalf) 
     radius = (viewHeightHalf/2); 
    else 
     radius = (viewWidthHalf/2); 


    circle = getCircle(); 

    canvas.drawBitmap(circle, 0, 0, mBitmapPaint); 

} 

Я думаю, в чем-то вроде этого, но это не работает:

@Override 
protected void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    delete(); 
} 


public void delete(){ 
    if (mDstBitmap != null) { 
     mDstBitmap.recycle(); 
    } 

    if (linesBitmap != null) { 
     linesBitmap.recycle(); 
    } 
} 

ответ

0

Вы должны переместить функцию удаления в onDestroy. Еще лучше, переместите его на , но не забудьте установить переменные растрового изображения в нуль, чтобы при необходимости их воссоздать.
Надеюсь, что в растровом изображении вы найдете больше, так как это не так, нет причин, по которым вы не нарисовываете его на холсте по вызову onDraw, и пропустите создание растрового изображения.

Смежные вопросы