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

졸업과제중인데 부디 도와주세요ㅠㅠ

0 추천

 

저희가 진행하고 있는 기술이

 

1. 이미지뷰 롱 클릭 -> 사용자 갤러리 접근해서 이미지 바꿈

2. 화면 터치->터치한 부분에 총알 이미지 추가

 

이 정도인데, 두 기술을 어떻게 함께 구현해야 할 지 걱정입니다.

 

public class MainActivity extends Activity {

	final static int SELECT_IMAGE = 1;
	ImageView img;
	Bitmap bitmap;
	TextView text;
	public static final int GONE = 0x00000008;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		img = (ImageView)findViewById(R.id.target);
		text = (TextView)findViewById(R.id.text);
	
		img.setOnLongClickListener(new View.OnLongClickListener() {
			
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				Uri uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
				Intent intent = new Intent(Intent.ACTION_PICK, uri);
				startActivityForResult(intent, SELECT_IMAGE);
				text.setVisibility(GONE);
				return false;
			}
		});
	}
	
	
	protected void onActivityResult(int requestCode, int resultCode, Intent intent){
		bitmap = null;
		if(resultCode == RESULT_OK && requestCode == SELECT_IMAGE){
			Uri image = intent.getData();
			try{
				bitmap = Images.Media.getBitmap(getContentResolver(), image);
			}catch(FileNotFoundException e){
				e.printStackTrace();
			} catch(IOException e){
				e.printStackTrace();
			}
			img.setImageBitmap(bitmap);
			}
	}

}

 

 
 
 
이게 1번까지 구현된 소스이고 xml에는 텍스트뷰와 이미지뷰가 하나씩 존재하고 있습니다(text, img)
이 위에 총알자국 이미지를 뿌리고 싶은데 어떻게 해야 할까요?
 
 
바른소리 (330 포인트) 님이 2013년 5월 31일 질문

1개의 답변

0 추천
 
채택된 답변

imageView 자체를 "커스텀" 하셔야 하며,

(커스텀한다는 것은 imageView 를 상속 받는 클래스를 만드셔서 ImageView를 재구성 한다는 얘기 입니다.)

커스텀 클래스에서 터치 입력에 대한 상태(터치 다운, 업, 무브, 터치 위치) 를 알수 있는 "onTouchEvent()"

화면 출력을 담당하는 onDraw()오버라이드 해서 구현해주셔야 할듯 싶네요.

onDraw(Canvas canvas) 에서 canvas.drawBitmap 이라는 메서드를 이용해서 원하는 비트맵의 크기와 위치를 지정해서 화면에 출력해줄수 있는데요.

이미지는 총알을, 그 위치는 onTouchEvent() 에서 받아와서 출력해주시면 되겠네요.

참고적으로 invaildate() 메서드를 호출해주셔야 화면을 다시 그려주는 작업을 시행하니 꼭 이것도 알아두시길 바랍니다.

익명사용자 님이 2013년 5월 31일 답변
바른소리님이 2013년 5월 31일 채택됨
ImageView를 재구성을 한다는 건
public class targetView extends ImageView{
 public targetView(Context context){
 super(context);
 }
 여기에 기존 imageview의 작업을 해야 한다는 말씀이신가요?
}

아직 서툰 점이 많아서 대강은 알아들어도 이해하기가 어렵네요..ㅠㅠ
하신말씀이 맞습니다.
extends imageview를 해서 class를 새로 만드심 되구요.
그안에 onDraw와 onTouchEvent 메서드를 이용해서 원하는대로 커스터마이징 하심될듯하네요.
...