programing

Android보기 클리핑

randomtip 2021. 1. 16. 09:31
반응형

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

반응형