마스터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 메서드를 이용해서 원하는대로 커스터마이징 하심될듯하네요.
...