2012-09-21 3 views
2

ImageButton으로 생성 된 불규칙한 모양의 버튼이 있습니다. ImageButtons의 "android : src"속성은 투명한 배경을 가진 .PNG 파일입니다. 그리고이 ImageButtons의 부모 레이아웃에는 "android : background"속성으로 정의 된 사용자 정의 배경 이미지가 있습니다. 따라서 활동의 배경이 투명하거나 검은 색이 아닙니다.안드로이드 - 사용자 정의 모양 버튼의 클릭 영역의 투명도를 감지하는 방법

내 질문은; 단추를 클릭하는 것이 원본 이미지의 투명 영역에 있는지 아니면 원본 이미지의 보이는 부분에 있는지 어떻게 알 수 있습니까?

onTouchListener를 사용하여 이벤트의 좌표를 가져 와서 픽셀의 색상에 따라 결정을 시도했습니다. 그러나 배경이 다채 롭기 때문에, 나는 한 지점에 도달 할 수 없었다.

모든 도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다!

답변

0

안녕하세요,이 링크는 도움이 될 것 같아요.

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/view/View.java#View.dispatchTouchEvent%28android.view.MotionEvent%29

당신은 포인트가 원하는 영역에없는 경우 false를 반환하는 사용자 정의 버튼에이 메소드를 오버라이드 (override) 할 필요가있다.

public static class MyButton extends ImageButton { 
    @Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 
     int iX = (int) event.getX(); 
     int iY = (int) event.getY(); 

     // TODO Or use a more sophisticated, pixel value-based condition 
     if (!(iX >= 0 & iY >= 0 & iX < TheBitmap.getWidth() & iY < TheBitmap.getHeight())) { 
      return false; 
     } 
     return super.dispatchTouchEvent(event) 
    } 
} 
+0

포인트가 원하는 영역에 없으면 false를 반환하려면 사용자 정의 버튼에서이 메서드를 재정의해야합니다. 난 당신이 이런 식으로 가야 제안 : 공공 정적 MyButton 클래스가하여 ImageButton { ... @Override 공공 부울 dispatchTouchEvent (MotionEvent 이벤트) { INT를 iX 관리 = (int)를 event.getX() 확장; int iY = (int) event.getY(); // TODO 또는 더 정교한 픽셀 값 기반 조건을 사용하십시오. () 그릇된; } return super.dispatchTouchEvent (이벤트) } } – Nagaraja

관련 문제