지금 내 레이아웃이 전체 화면을 차지하고 이미지를 표시하는 Fragment
으로 구성되도록했습니다. 나는 추가로 View
이 그 위에 있고 전체 화면을 차지하도록 만들고 싶다. 그 최상위 레이어에서, 나는 처음에는 모든 것을 검정색으로 색칠 할 수 있고, 그 다음에는 투명한 (알파?) 특정 스폿을 만들고 그 뒤에있는 조각에 표시된 이미지를 드러내기를 원합니다. 그래서 기본적으로 스크린은 뒤에서 이미지가 보여지는 몇 개의 점을 제외하고는 모두 검은 색이 될 것입니다. 프로그래밍 방식으로 결정할 것입니다. 안드로이드가 제공하는 수많은 그래픽과 뷰를 살펴 보았지만 어디서부터 시작해야하는지 전혀 모른다. 알파의 일부 스팟에서 모두 검게 보이기를 원하면 SurfaceView에 적합합니까?"잘라낸"레이아웃 만들기
올바른보기를 선택하면 onDraw()
메서드를 무시한 다음 canvas.setBody(black)
과 같은 작업을 수행 한 다음 알파 모양을 추가 할 것입니다. 도형이 배경색에 올바르게 영향을 줍니까?
public class MaskView extends View {
private Set<Rect> mRects = new HashSet<Rect>();
private Paint mUnmaskPaint = new Paint();
{
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}
/**
* Add an unmasking rectangle to this view's background.
*
* @param rect
* a rectangle used to unmask the background
*/
public void addUnmaskRect(Rect rect) {
mRects.add(rect);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
for (Rect r : mRects) {
canvas.drawRect(r, mUnmaskPaint);
}
}
}
귀하의 Fragment
: 당신의 마스킹 View
를 들어
'canvas.drawCircle (100, 100, 30, mUnmaskPaint);'와 같은 unmask 페인트 예제를 사용해 보았습니다. 그러면 앱이 닫히지 만 충돌은 발생하지 않습니다. LogCat에서'07-07 20 : 04 : 29.806 : A/libc (26164) : 0x00000004 (code = 1)에 치명적 신호 11 (SIGSEGV), 스레드 26164 ()'에서 볼 수 있습니다. 어떤 생각? 나는 가깝다고 느낀다. –
다행입니다! 그러나 onDraw()에서 새 객체를 만드는 것에 대해서는 조심해야합니다 ... 가능한 한 가볍습니다. 프로젝트에서 Android Lint를 실행하면 같은 것을 말하는 경고가 표시 될 수 있습니다. 가장 좋은 방법은 페인트를 만들고 다른 곳에 설치 한 다음보기의 수명 동안 인스턴스 변수로 메모리에 유지하는 것입니다. – happydude