안드로이드 개발 질문/답변
(글 수 45,052)
현재 이미지 자르기 기능을 구현하고 있습니다.
사용자가 선택하는 부분을 알 수 있도록 사각형 부분은 원래 색이 나와야하고
바깥쪽은 어두침침한 색이 나와서 구분을 해줘야합니다.
요렇게 말이죠.
디자이어 진저브레드 입니다.
그런데 갤넥에서는 그렇게 나오지 않습니다.
전체가 어두침침하게 나와버려요.
SDK버그는 아닌거 같습니다. 왜냐하면

갤넥 에뮬레이터에서는 잘 나오거든요.
아래는 이미지뷰를 상속받아서 만든 onDraw() 메소드 입니다.
갤넥에서는 왜 이럴까요...혹시 잘못된게 있을까요?
@override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//이미지뷰의 전체 영역
getDrawingRect(viewRect);
//작은 사각형 영역이 될 부분
getDrawingRect(smallRect);
smallRect.left += 100;
smallRect.right -= 100;
smallRect.bottom -= 200;
smallRect.top += 200;
// 전체 영역에 뿌려줄 페인트를 모두 어두침침한 색으로 만듬
mNoFocusPaint.setARGB(150, 50, 50, 50);
// 전체 영역에서
canvas.clipRect(viewRect);
// 작은 영역을 제외하고
canvas.clipRect(smallRect, Region.Op.DIFFERENCE);
// 모두 검은색으로 칠해버림
canvas.drawRect(viewRect, mNoFocusPaint);
}
소스 보시면 아시겠지만 Region.Op.DIFFERENCE부분이 핵심인데, 이거
말고도 다른 옵션도 (union, difference 등등)
요상하게 적용이 됩니다.




2D하드웨어 가속 기능이 활성화 된 것 같습니다.
http://developer.android.com/guide/topics/graphics/hardware-accel.html
Canvas
clipRect():XOR,DifferenceandReverseDifferenceclip modes are ignored. 3D transforms do not apply to the clip rectangle설정에서 이 기능을 OFF하고 다시 해보시고, 그게 문제였다면 아예 앱이 뜰 때부터 하드웨어 가속 기능을 안쓰도록 설정하시면 됩니다.
하지만, 쓴거랑 안쓴거랑 속도차이는 많이 납니다. 가급적 ON해도 문제없게 프로그래밍 하시는 것이 좋습니다.