마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

터치할 때마다 비트맵 이미지가 추가되게 하려고 합니다 [closed]

0 추천
	public class targetView extends ImageView{		//총알자국 뿌리기 위해 imageView 상속
		BitmapDrawable mBmDrawable = null;
		
		 public targetView(Context context){
		 super(context);
		 
		 mBmDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.bullethole);
		 //mBmDrawble에 총알 이미지 불러옴
		 }

		@Override
		protected void onDraw(Canvas canvas) {
			// TODO Auto-generated method stub
			canvas.drawBitmap(mBmDrawable.getBitmap(), x, y, null); //mbmDrawable을 그림.
			super.onDraw(canvas);
		}

		@Override
		public boolean onTouchEvent(MotionEvent event) {
			
			if (event.getAction() == MotionEvent.ACTION_DOWN) {
				x = event.getX();	//누를 때마다 x,y값 좌표 전달
				y = event.getY();
				invalidate();
				return true;
			}
			
			return false;
		}
		
		
	}

 

이 소스는

 

1. onDraw로 비트맵 그림. (x,y값은 초기에 -100, -100으로 설정해서 화면에 보이지 않음)

2. TouchEvent가 발생(Action_down)할 때마다 x,y에 눌렸을 때의 x,y값을 받아옴

3. invalidate(); 로 현재 클릭한 부분에 비트맵 이미지가 그려짐. 

 

이런 식으로 동작하고 있습니다.

 

지금 소스는 계속 x,y를 받아와서 invalidate()를 매번 불러오기 때문에 클릭한 좌표에 이미지가 생기고 이전에 찍었던 비트맵은 사라집니다..ㅠㅜ

저는 이전에 그려진 이미지도 남아있고 사용자가 터치를 하면 이미지가 '또' 그려지도록 하고 싶습니다.

또 Action_move를 누르면 사용자가 움직이는 대로 이미지들이 연달아 추가되게 하고 싶어요.

어떻게 건드려야 할 지 감이 잡히지 않습니다. 동적 배열을 사용해야 하나요? 또 사용해야 한다면 어떻게 사용해야 하나요? 동적 배열이 아니라면 어떻게 해야 이전에 찍었던 비트맵이 사라지지 않을 지 궁금합니다..ㅠㅠ

 

 

질문을 종료한 이유: 스스로 답을 찾았습니다.
바른소리 (330 포인트) 님이 2013년 6월 3일 질문
바른소리님이 2013년 6월 3일 closed
우선 ImageView를 상속 받은 클래스에서 터치이벤트하지마시고 그림을 그릴 View클래스에서 터치이벤트를 받습니다.
그리고 터치 할때마다 Image를 추가하시면 됩니다.

이게 어렵고 위의 소스를 사용해야 한다면
Bitmap 하나더 만드셔서 터치한 부분에 계속 그려 넣으시고
그 새로만든 Bitmap을 onDraw에서 뿌려주시면되고요
대신 x,y은 무조건 0,0 으로해야겠죠?

1개의 답변

0 추천
딱 한마디로 말슴 드리기 어렵네요...

하지만 이런 부분은 시중의 책에도 잘 나와 있을 텐데....

그리 어려운 건 아니지만... 질문의 범위가 너무 방대 하다 보니 답글이 달리지 않는 겁니다...

그냥 말로 간단히 설명 드린다면...

어레이리스트를 생성하고 버튼을 누를때마다  어레이리스트에 비트맵의 정보를 add하고 포문 돌려서 어레이리스트에 있는 정보들로 비트맵을다시 찍어 준다...

이거입니다...

이글이 이해가 가지 않으신다면 다시 처음부터 시작하는 것이 좋다고 봅니다...

기초 무시하시면 안됩니다.~~!
ThisPlus (46,920 포인트) 님이 2013년 6월 3일 답변
동적 배열을 사용해야 한다는 것 알겠습니다. 그런데 문제는 어레이리스트에 비트맵의 어떤 정보를 어떻게 add해야 하느냐는 거에요..ㅠㅠ  그걸 어떻게 적용해야 할지도 모르겠구요..ㅠㅠ
네 그부분이 글로 표현하기에는 굉장히 난해 하다는 겁니다...
굉장히 길어지구요....
입력 받으시는 xy값을 클래스화 해서 클래스를 동적 배열에 넣으시면 됩니다만....
...