버튼을 클릭 할 때마다 FrameLayout 위에 View가 쌓이는데요
이 View에는 alpha값을 먹인 bitmap이 있습니다.
계속 쌓이면서 점점 진해지는거죠
다른 버튼을 누르면 쌓였던 bitmap들이 날아가고
다시 쌓는 버튼을 누르면 처음 동작 그대로 하게 만들고 싶습니다..
frameLayout.removeView(patinView); 를 하면
paintView 자체가 날아가버려서
다시 bitmap이 쌓이지 않더군요...
메소드를 다 뒤져봐도 bitmap을 날리는 게 없습니다...도와주세요!!!
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
alpha = 30;
paintView = new PaintView(this);
frameLayout = new FrameLayout(this);
frameLayout.setBackgroundResource(R.drawable.background_a);
frameLayout.addView(paintView);
setContentView(frameLayout);
btn_start = new Button(this);
btn_start.setText("Start");
btn_start.setTextSize(20);
btn_start.setLayoutParams(new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
Gravity.LEFT | Gravity.TOP));
frameLayout.addView(btn_start);
btn_clear = new Button(this);
btn_clear.setText("Clear");
btn_clear.setTextSize(20);
btn_clear.setLayoutParams(new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
Gravity.RIGHT | Gravity.TOP));
frameLayout.addView(btn_clear);
btn_start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
paintView.stackImg();
}
});
btn_clear.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
paintView.removeImg();
//////////// 바로 이부분입니다!!!!!!!!! ////////////////
}
});
private class PaintView extends View {
private Bitmap bm;
private Bitmap bitmap;
private Canvas canvas;
// private int stack = 0;
private Paint paint = new Paint();
private Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
/******/
private Path path;
public PaintView(Context context) {
super(context);
bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.background_c);
paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
paint2.setStyle(Style.STROKE);
paint2.setStrokeWidth(20);
paint2.setStrokeCap(Cap.ROUND);
paint2.setStrokeJoin(Join.ROUND);
paint.setAlpha(alpha);
/******/
path = new Path();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (bm != null && !bm.isRecycled()) {
bm.recycle();
bm = null;
}
bm = Bitmap.createBitmap(w, h, Config.ARGB_8888);
bm.eraseColor(0);
canvas = new Canvas(bm);
super.onSizeChanged(w, h, oldw, oldh);
}
public void stackImg() {
if (stack < 12) {
canvas.drawBitmap(bitmap, 0, 0, paint);
stack++;
Log.i(TAG, "stack : " + stack);
invalidate();
}
}
public void removeImg() {
/////////////////// 바로 이부분입니다!!!!!!!!!!!!!!//////////////////
invalidate();
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(bm, 0, 0, null);
}




구글 검색에 To destroy it, just call
yourbitmap.recycle(); 이렇게 나와있네요