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

캔버스 터치영역 구하기..

0 추천
캔버스로 네모를 그리고 그 비트맵을 이미지뷰에 뿌려주었습니다.

그리고나서 이미지뷰에 터치리스너를 걸고 좌표를 받아왔는데요..

캔버스에서 그린 네모의 안인지 밖인지 체크를 하고 싶은데.. 캔버스에서 그린 네모의

영역을 어떻게 받아 올 수 있는 방법이 있나요??

노가다로 이미지뷰에서 보이는 네모선을 일일이 터치해서

터치좌표찍어서 영역 구하는 방법뿐이 없는건가요??
익명사용자 님이 2015년 3월 6일 질문

1개의 답변

+1 추천

캔버스 영역 만큼의 Rect를 만들고

이미지 터치 좌표를 받았을 때,

Rect 클래스가 제공하는 다음 API를 이용해서 터치한 영역이 네모 안의 영역인지 알 수 있습니다.

public boolean contains (int x, int y)

Added in API level 1

Returns true if (x,y) is inside the rectangle. The left and top are considered to be inside, while the right and bottom are not. This means that for a x,y to be contained: left <= x < right and top <= y < bottom. An empty rectangle never contains any point.

Parameters
x The X coordinate of the point being tested for containment
y The Y coordinate of the point being tested for containment
Returns
  • true iff (x,y) are contained by the rectangle, where containment means left <= x < right and top <= y < bottom

 

Gradler (109,780 포인트) 님이 2015년 3월 6일 답변
Bitmap bitmap = Bitmap.createBitmap(basePreviewWidth, basePreviewHeight, Bitmap.Config.ARGB_8888);
Canvas canvas= new Canvas(bitmap);

Rect rect = new Rect();
rect .set((int) (316f * sRatio), (int) (285f * sRatio), (int)(539f * sRatio), (int) (370f * sRatio));
canvas.drawRect(rect, paint);

ImageView imageView = new ImageView(context);
imageView.setImageBitmap(bitmap);
imageView.setPadding(10, 10, 10, 10);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new LinearLayout.LayoutParams(preViewWidth, preViewHeight));

imageView.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                if (rect.contains((int) event.getX(), (int) event.getY())) {
                                       System.out.println("true!!!");
                                } else {
                                      System.out.println("false!!!");  
                                }
                        }
            });
view.add(imageView);

우선 답변 감사합니다. 답변 참고해서 위와 같이 했는데요 영역이 맞지않습니다... 이미지 뷰에서 보이는 네모안을 터치해도 false가 나오고 위쪽에 엉뚱한데
터치하면 true가 나와요 그것도 굉장히 짝은 부분에서만..
뭐가 잘못된 걸까요??
...