본문 바로가기
study/TIP

android 터치 영역/위치/타입 판단하기

by 휘루걸음 2014. 3. 4.
728x90
반응형

안드로이드 터치 영역 판단하기

안드로이드에서 특정 영역을 터치했는지 여부를 판단하려면, 터치 이벤트가 발생한 좌표를 확인하고 해당 좌표가 특정 영역 내에 있는지를 확인해야 합니다. 아래는 간단한 예시 코드로, `View` 내에서 특정 영역을 정의하고 터치 이벤트가 해당 영역 내에 발생했는지 여부를 판단하는 방법을 보여줍니다.

반응형
728x90
import android.content.Context;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class CustomTouchAreaView extends View {

    private Rect touchArea; // 터치 영역을 정의할 Rect 객체

    public CustomTouchAreaView(Context context) {
        super(context);

        // 터치 영역을 (100, 100, 400, 400)으로 정의
        touchArea = new Rect(100, 100, 400, 400);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (isInTouchArea(x, y)) {
                    showToast("터치 다운 - 특정 영역 내");
                }
                break;

            case MotionEvent.ACTION_MOVE:
                if (isInTouchArea(x, y)) {
                    showToast("터치 이동 - 특정 영역 내");
                }
                break;

            case MotionEvent.ACTION_UP:
                if (isInTouchArea(x, y)) {
                    showToast("터치 업 - 특정 영역 내");
                }
                break;
        }

        return true; // 이벤트 처리를 계속하려면 true를 반환
    }

    private boolean isInTouchArea(float x, float y) {
        return touchArea.contains((int) x, (int) y);
    }

    private void showToast(String message) {
        Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
    }
}


위 코드에서 `Rect` 객체를 사용하여 `touchArea`를 정의하고, `isInTouchArea` 메서드를 통해 주어진 좌표가 해당 영역 내에 있는지를 확인합니다. 이를 통해 특정 영역에 대한 터치 이벤트를 판단할 수 있습니다.


안드로이드 터치 위치 판단하기

안드로이드에서 터치 이벤트의 위치를 판단하려면 `MotionEvent` 객체를 사용하여 터치 이벤트의 X 및 Y 좌표를 얻어야 합니다. 아래는 간단한 예시 코드로, `onTouchEvent` 메서드 내에서 터치 이벤트의 위치를 어떻게 판단하는지를 보여줍니다.

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class TouchPositionView extends View {

    public TouchPositionView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX(); // 터치 이벤트의 X 좌표
        float y = event.getY(); // 터치 이벤트의 Y 좌표

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                showToast("터치 다운 (Touch Down) - X: " + x + ", Y: " + y);
                break;

            case MotionEvent.ACTION_MOVE:
                showToast("터치 이동 (Touch Move) - X: " + x + ", Y: " + y);
                break;

            case MotionEvent.ACTION_UP:
                showToast("터치 업 (Touch Up) - X: " + x + ", Y: " + y);
                break;
        }

        return true; // 이벤트 처리를 계속하려면 true를 반환
    }

    private void showToast(String message) {
        Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
    }
}


위 코드에서 `event.getX()`와 `event.getY()` 메서드를 사용하여 터치 이벤트의 X 및 Y 좌표를 가져옵니다. 이를 통해 터치 이벤트가 발생한 위치를 확인할 수 있습니다. 각각의 터치 액션에 따라 적절한 처리를 수행할 수 있습니다.

 


 

터치 타입 판단하기

안드로이드에서 터치 이벤트의 타입을 판단하려면 `MotionEvent` 객체를 사용합니다. `MotionEvent`는 사용자의 터치 및 모션 이벤트에 대한 정보를 포함하고 있습니다. 이 객체를 통해 터치 이벤트의 다양한 속성을 확인할 수 있습니다.


아래는 간단한 안드로이드 코드 예시로, 터치 이벤트의 타입을 판단하는 방법을 보여줍니다. 예를 들어, `onTouchEvent` 메서드 내에서 다음과 같이 사용할 수 있습니다:

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class TouchTypeView extends View {

    public TouchTypeView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();

        switch (action) {
            case MotionEvent.ACTION_DOWN:
                showToast("터치 다운 (Touch Down)");
                break;

            case MotionEvent.ACTION_MOVE:
                showToast("터치 이동 (Touch Move)");
                break;

            case MotionEvent.ACTION_UP:
                showToast("터치 업 (Touch Up)");
                break;
        }

        return true; // 이벤트 처리를 계속하려면 true를 반환
    }

    private void showToast(String message) {
        Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
    }
}


이 코드에서 `MotionEvent.getAction()` 메서드를 사용하여 현재 이벤트의 액션(터치 이벤트의 종류)을 가져오고, 해당 액션에 따라 적절한 처리를 수행합니다. `MotionEvent` 클래스에는 다양한 액션 상수가 있으며, 필요에 따라 다양한 터치 이벤트를 처리할 수 있습니다.

또한, `onTouchEvent` 메서드에서 `return true;`를 사용하여 이벤트를 계속 처리하도록 설정하였습니다. 만약 `return false;`로 설정하면 해당 뷰가 터치 이벤트를 소비하지 않고 다른 뷰에게 전달하게 됩니다.


 

사각형 - Rect

android.graphics.Rect

intersect -- 사각 영역이 겹치는 경우를 판단

contains -- 점이나 면이 포함되는 경우를 판단

//

원 - Cicle

선택 좌표 x와 yd의 제곱의 합이 반지름 제곱의 합보다 작을 경우 포함된 것으로 판단

(cx-x)^2 +(cy-y)^2= r2

//

호 - arc -- 수식 어렵다 그냥 외우자.. =_=

deg = Math.atan2(x-cx, y-cy)*180 / Math.PI - 90;

if(deg<0) deg+=360;

-- (-90)은 컴퓨터의 각도와 계산법의 각도가 달라 보정값

-- 결과 값이 음수일 경우 기준범위인 360을 더해서 각도 확보

728x90
반응형

'study > TIP' 카테고리의 다른 글

curl 예  (0) 2015.04.03
자바스크립트 문자열로 함수 호출  (0) 2014.07.23
pdo 에러관련 주의사항  (0) 2012.04.13
print_r 깔끔하게 보기  (0) 2012.04.12
php 문자열 함수  (0) 2012.02.27