Android보기 클리핑
Android (Honeycomb)에서 ViewGroup의 클립 영역을 정의하는 방법이 있습니까? 예를 들어 모서리가 둥근 이미지 배경이있는 ListView가 있습니다. 목록을 스크롤 할 때 아이들은 배경의 모서리를지나 튀어 나와 있습니다. 둥근 모서리 내에서 클립하는 것이 좋습니다.
왼쪽 이미지는 현재하고있는 것이고 오른쪽 이미지는 제가 원하는 것입니다.
ClipDrawable을보고 있었지만 진행률 표시 줄에만 사용할 수있는 것 같습니다.
또한 위젯에서이 작업을 수행하려고합니다. 따라서 사용자 정의보기를 사용하고 마스킹을 위해 onDraw를 재정의 할 수 없습니다.
감사합니다!
다음과 같이 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가
layout
모서리가 둥근 배경이 있는지 확인하십시오 .
Kotlin
layout.outlineProvider = ViewOutlineProvider.BACKGROUND
layout.clipToOutline = true
자바
layout.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
layout.setClipToOutline(true);
방법 : Android 뷰를 비트 맵으로 렌더링 한 다음 해당 비트 맵을 클립하는 방법.
또는 다른 아이디어 FrameLayout
로을 사용하여 ViewGroup 위에 클립 마스크를 쌓으십시오. 클립 마스크에는 투명한 중간, 불투명 테두리가 있습니다.
두 경우 모두 사용자 입력을 처리하는 것이 까다로울 것 같습니다.
Path p = new Path()
// define your clipping path...
canvas.clipPath(p);
WhatsUp 을 살펴보면 연락처 사진에서 둥근 테두리로 둥근 이미지가 있음을 알 수 있습니다. 이렇게하려면 테두리가 둥근 FrameLayout (그림 앞에 ProgressBar를 사용하여 [실제로 보이지 않음]로드를 알리기 때문에 FrameLayout) 내부에 ImageView를 넣었습니다. 그림은 정사각형 모양이지만이를 다듬 으려면 캔버스로 작업해야합니다.
문제를 해결할 이 링크 를 다시 살펴보십시오 .)
Canvas.clipRegion 메서드를 사용하여 뷰의 차이점을 클리핑 할 수 있습니다.
android : clipToPadding을 사용해보세요. 그것은 당신의 문제를 해결할 것입니다.
참조 URL : https://stackoverflow.com/questions/5574212/android-view-clipping
'programing' 카테고리의 다른 글
SQL Server Management Studio를 사용하여 Azure Virtual Machine에서 호스팅되는 SQL Server Express 인스턴스에 원격으로 연결 (0) | 2021.01.16 |
---|---|
IOHIDEventQueue.c의 DP5 오류 (0) | 2021.01.16 |
심층 분할기 특성 이해 (0) | 2021.01.16 |
C #으로 웹캠 비디오를 스트리밍하려면 어떻게해야합니까? (0) | 2021.01.16 |
Swift 2, 경고 : dyld 공유 캐시에서 Objective-C 클래스 정보를로드 할 수 없습니다. (0) | 2021.01.16 |