SSISO Community

시소당

사용자 View에서 사각형 내부 Touch 판단하기

사용자가 만든 View에서 특정한 사각형 영역을 클릭(Touch)했는지를 간편하게 판단하려면 Rect() 오브젝트를 사용한다.

Rect()에는 여기에 유용한 함수가 2개 있다.




intersect()는 2개의 Rect()가 겹쳐저 있는지를 판단하는 함수이며, contains()는 Rect()나 Point가 완전히 포함되어 있는지를 판단하는 함수이다. 화면의 Touch는 Point 형태이므로 contains를 이용하는 것이 간편하다.

이것을 확인하기 위해 다음과 같은 예제를 작성한다.


package com.Test01;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class Test01 extends Activity {
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }   

    //-----------------------------------
    //       MyView
    //-----------------------------------
    class MyView extends View {
        private Rect rect;   // rect를 전역변수로 선언한다

        //-----------------------------------
        //       Constructor
        //-----------------------------------
        public MyView(Context context) {
             super(context);
         }
  
        //-----------------------------------
        //       실제 그림을 그리는 부분
        //-----------------------------------
        public void onDraw(Canvas canvas) {
              Paint paint = new Paint();    // 새로운 paint 개체를 만들고 
              paint.setColor(Color.GREEN);    // 연두색으로 설정
              rect = new Rect(100, 100, 300, 180); // 사각형 영역을 만든다
              canvas.drawRect(rect, paint);
        } // onDraw 끝
  
        //-----------------------------------
        //      onTouchEvent
        //-----------------------------------
        public boolean onTouchEvent(MotionEvent event) {
              if (event.getAction() == MotionEvent.ACTION_DOWN) {
                  int x = (int) event.getX();
                  int y = (int) event.getY();
    
                  if (rect.contains(x, y) == true)
                          Toast.makeText(Test01.this, "Hit", 0).show();
                  else
                          Toast.makeText(Test01.this, "Miss", 0).show();
              }
              return false;
        }

    } // GameView 끝
   
} // 프로그램 끝
 



         

1175 view

4.0 stars