안드로이드 뷰 클리핑
안드로이드(Honeycomb)에서 ViewGroup의 클립 영역을 정의할 수 있는 방법이 있습니까?예를 들어 모서리가 둥근 이미지 배경의 ListView가 있습니다.목록을 스크롤하면 아이들이 배경 구석을 지나 튀어나와요. 저는 아이들이 둥근 모서리 안에서 잘라내기를 원합니다.
왼쪽 이미지는 현재 하고 있는 것이고 오른쪽은 제가 하고 싶은 것입니다.
ClipDrawable을 보고 있었는데 프로그레스 바에만 사용할 수 있는 것 같습니까?
그리고 위젯으로 하려고 합니다.그래서 마스킹을 위해 Custom View를 사용하고 Draw를 재정의할 수 없습니다.
감사해요!
꼭!layout
배경에 둥근 모서리가 있습니다.
코틀린
layout.outlineProvider = ViewOutlineProvider.BACKGROUND
layout.clipToOutline = true
자바
layout.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
layout.setClipToOutline(true);
ViewGroup을 하위 분류하고 OnDraw 메서드를 다음과 같이 재정의하여 RADIUS 값으로 대체합니다.IN_PIXELs:
@Override
protected void onDraw(Canvas canvas) {
Path clipPath = new Path();
clipPath.addRoundRect(new RectF(canvas.getClipBounds()), RADIUS_IN_PIXELS, RADIUS_IN_PIXELS, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
}
...또한 '라운드'와 같은 맞춤 그림을 만들어 YOUR_BACKGROUND_COLOR 및 RADIUS_로 대체합니다.IN_DP, DP에서 직사각형의 반올림을 PX에서 이전 클리핑 반경과 일치시키십시오.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="RADIUS_IN_DP" />
<solid android:color="YOUR_BACKGROUND_COLOR"/>
</shape>
그런 다음 해당 하위 클래스를 레이아웃에 사용하여 선을 추가할 수 있습니다.
android:background="@drawable/rounded"
android:clipChildren="true"
모든 어린이는 OnDraw() 재정의에서 지정한 범위를 잘라내고, 배경은 '원형' 그리기 가능한 범위에 따라 추가됩니다.
사용자 지정 레이아웃 만들기overridden onDraw(Canvas canvas)
불러canvas.clipRect(0, 0, mCanvasWidth, mCanvasHeight);
레이아웃 경계를 벗어나는 모든 뷰를 잘라냅니다.
그리고 전화하는 것 잊지 마.setWillNotDraw(false)
생성자에서, 그러면 onDraw가 실행됩니다.
이거 어때:Android 보기를 비트맵으로 렌더링한 다음 해당 비트맵을 자르는 방법.
아니면, 다른 아이디어, 사용.FrameLayout
, 클립 마스크를 ViewGroup(보기 그룹) 위에 쌓습니다.클립 마스크에는 투명한 가운데 불투명 테두리가 있습니다.
두 경우 모두 사용자 입력을 처리하는 것이 까다로울 것으로 생각됩니다.
Path p = new Path()
// define your clipping path...
canvas.clipPath(p);
WhatsUp을 보면 연락처 사진에 둥근 테두리로 둥근 이미지가 있음을 알 수 있습니다.이를 위해 테두리가 둥근 프레임 레이아웃(그림 앞의 ProgressBar를 사용하여 [사실 보이지 않는] 로딩을 통지하므로 프레임 레이아웃) 안에 이미지 뷰를 넣었습니다.그림은 네모난 모양이지만 다듬기 위해서는 캔버스로 작업해야 합니다.
문제를 해결할 수 있는 이 링크를 한 번 더 확인해 보십시오;)
정의 @Marco 에서를 View.outlineProvider
제품인 구글 의했습니다를 했습니다.MaterialCardView
그 어떤 이유에서인지, 그 그림은 아이들에게 둥근 모서리를 씌우지 않습니다.자식 뷰는 둥근 모서리 위에 그려질 것입니다.
코틀린:
val cornerRadius = 16.dp()
materialCardView.apply {
clipToOutline = true
outlineProvider = object : ViewOutlineProvider() {
override fun getOutline(view: View?, outline: Outline?) {
view?.apply {
outline?.setRoundRect(0, 0, width, (height + cornerRadius).toInt(), cornerRadius)
}
}
}
}
Canvas.clipRegion 메서드를 사용하여 토뷰의 차이점을 자를 수 있습니다.
Android:clipToPadding을 시도해 보십시오.그것이 당신의 문제를 해결해 줄 것입니다.
언급URL : https://stackoverflow.com/questions/5574212/android-view-clipping
'programing' 카테고리의 다른 글
wo commerce는 제품을 카트에 추가한 후 firefox에서 카트가 비어 있다고 표시합니다. (0) | 2023.10.16 |
---|---|
자바스크립트:마우스 버튼이 아래로 내려갔는지 확인하시겠습니까? (0) | 2023.10.16 |
USB MIDI 장치에서 MIDI 신호를 읽기 위한 C/C++ 라이브러리 (0) | 2023.10.16 |
스프링 캐시 @Cacheable 메서드가 같은 클래스 내에서 호출될 때 무시됨 (0) | 2023.10.11 |
EF에서 영향을 받는 행을 볼 수 없음 (0) | 2023.10.11 |