Android Custom View를 사용하여 터치 영역을 둥글게 만듭니다.
3834 단어 Android
안드로이드 맞춤형 터치 영역
나는 이런 상황을 구상하고 있다.
이처럼 커스텀뷰의 터치 판정 영역을 맞춤형으로 제작할 때 어떻게 하면 좋을지 조사한 결과를 정리했다.
둥근 버튼을 만들 때나 독자적인 모양의 뷰를 만들 때 터치 영역을 사각형으로 유지할 방법을 강구해야 한다는 의견이 나와 만들었다.(수요가 적은 것 같다)
View#dispatchTouchEvent 사용
결과적으로 View급 디스패치 터치 이벤트 오버라이드를 사용하면 된다.
CircleDetectView.javapublic class CircleDetectView extends View {
//... 中略
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
float touchX = event.getX(), touchY = event.getY();
float r = getWidth() / 2;
// 中心からタッチ点までの距離(の2乗)を計算
// float lenght = (float)Math.pow(touchX - r, 2) + (float)Math.pow(touchY - r, 2);
// 追記(2015/2/26):
// 距離を測る Math.hypot という大層便利なメソッドがありました。
double length = Math.hypot(touchX - r, touchY - r);
// (中心からタッチ点までの距離)^2 <= (円の半径)^2
if (length <= r * r) {
// 円の内部
// (superを呼び出すことによってonTouchやonClickを呼び出すようにする)
return super.dispatchTouchEvent(event);
} else {
// 円の外部(falseにすると、onTouchやonClickなどが呼ばれない)
return false;
}
}
}
디스패치 터치 이벤트가 터치 이벤트의 시작점으로 사용되기 때문에 이것을 조금만 만지면 해결될 것 같습니다.
이번에는 원의 안쪽을 터치 구역으로 삼고 싶은데 터치점에서 원의 중심(이번은 View의 중심)까지의 거리가 반경보다 작다면 원의 안쪽을 터치했다는 뜻이다.
전망하다
구역 판단 부분을interface로 하고 스스로 구역을 정하면 재미있을 것 같아요.
예를 들어 성형의 판정은 같은 원이라도 중심의 반원의 터치 구역을 엇갈릴 수 있다는 등 다양한 가능성이 있는 것 같다.
사이트 축소판 그림
안드로이드의 터치 이벤트 이해하기(중 하나)
http://blog.lciel.jp/blog/2013/12/03/android-touch-event/
Reference
이 문제에 관하여(Android Custom View를 사용하여 터치 영역을 둥글게 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/litmon/items/d46b42e03e52cda7d96d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
결과적으로 View급 디스패치 터치 이벤트 오버라이드를 사용하면 된다.
CircleDetectView.java
public class CircleDetectView extends View {
//... 中略
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
float touchX = event.getX(), touchY = event.getY();
float r = getWidth() / 2;
// 中心からタッチ点までの距離(の2乗)を計算
// float lenght = (float)Math.pow(touchX - r, 2) + (float)Math.pow(touchY - r, 2);
// 追記(2015/2/26):
// 距離を測る Math.hypot という大層便利なメソッドがありました。
double length = Math.hypot(touchX - r, touchY - r);
// (中心からタッチ点までの距離)^2 <= (円の半径)^2
if (length <= r * r) {
// 円の内部
// (superを呼び出すことによってonTouchやonClickを呼び出すようにする)
return super.dispatchTouchEvent(event);
} else {
// 円の外部(falseにすると、onTouchやonClickなどが呼ばれない)
return false;
}
}
}
디스패치 터치 이벤트가 터치 이벤트의 시작점으로 사용되기 때문에 이것을 조금만 만지면 해결될 것 같습니다.이번에는 원의 안쪽을 터치 구역으로 삼고 싶은데 터치점에서 원의 중심(이번은 View의 중심)까지의 거리가 반경보다 작다면 원의 안쪽을 터치했다는 뜻이다.
전망하다
구역 판단 부분을interface로 하고 스스로 구역을 정하면 재미있을 것 같아요.
예를 들어 성형의 판정은 같은 원이라도 중심의 반원의 터치 구역을 엇갈릴 수 있다는 등 다양한 가능성이 있는 것 같다.
사이트 축소판 그림
안드로이드의 터치 이벤트 이해하기(중 하나)
http://blog.lciel.jp/blog/2013/12/03/android-touch-event/
Reference
이 문제에 관하여(Android Custom View를 사용하여 터치 영역을 둥글게 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/litmon/items/d46b42e03e52cda7d96d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
안드로이드의 터치 이벤트 이해하기(중 하나)
http://blog.lciel.jp/blog/2013/12/03/android-touch-event/
Reference
이 문제에 관하여(Android Custom View를 사용하여 터치 영역을 둥글게 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/litmon/items/d46b42e03e52cda7d96d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)