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

이미지의 특정부분 클릭이벤트를 주고 싶습니다.

0 추천
ImageView나 Layout의 background 이미지에서 특정 부분에 영역을 지정해서

클릭 이벤트를 주고 싶습니다. 어떤 방법으로 처리 하면 될까요?
Kim.droid (200 포인트) 님이 2016년 3월 30일 질문

2개의 답변

0 추천
 
채택된 답변
xml 그리실때

해당 이미지뷰나 레이아웃을 그리고

그 위에 겹쳐서 배경이 없는 레이아웃이나 배경이 없는 버튼을 그려주고 거기에 이벤트를 주면됩니다.
은평구멍멍이 (2,630 포인트) 님이 2016년 3월 30일 답변
Kim.droid님이 2016년 3월 31일 채택됨
답변 감사드립니다. 가르쳐 주신데로 한번 해보겠습니다.
혹시 이미지 자체를 사용해서 범위 지정으로 이벤트 주진 못하나요?
웹에서는 그런걸 본 적있는데요. 스크립트로 사각형이나 원의 좌표 구해서
해당 범위 클릭하면 페이지 이동하도록 하는 걸요.
알고 계시면 다른 방법도 부탁드립니다.
0 추천

투명영역을 제외한 이미지 클릭만 하고 싶을경우

public Region getBitmapRegion(Bitmap bitmap){
		int [] pixels = null;
		Region rgn = null;
		boolean bMask = false;
		
		int height = bitmap.getHeight();
		int width = bitmap.getWidth();
		
		try{
			pixels = new int[width*height];
			bitmap.getPixels(pixels, 0, width, 0, 0, width,height);

			rgn = new Region(0,0,0,0);
			int start = 0, end = 0;	
			
			for(int j =height-1; j >=0; j--){
				for(int i=0; i < width; i++){
					if(pixels[i+width*j] != 0x00000000){
						if(!bMask){
							start = i;
							end = i+1;
							bMask = true;
						}else{ end = i; }
					}else{
						if(bMask){ rgn.op(new Region(start,j,end,j+1), Region.Op.XOR); }
						bMask = false;
					}
				}
				if(bMask){ rgn.op(new Region(start,j,end,j+1), Region.Op.XOR); }
				bMask = false;
			}	
		}
		catch(IllegalArgumentException e){}
		catch(ArrayIndexOutOfBoundsException e){}
		
		pixels = null;
		
		return rgn;
	}

위처럼 이미지의 영역을 구해서 터치시의 위치로

public boolean isHit(int x, int y){
		return mRgn.contains(x, y);
	}

Hit 테스트 하시면 됩니다.

코딩인헬 (12,150 포인트) 님이 2016년 3월 31일 답변
감사합니다. 많은 공부가 되네요 ㅎ
...