public class

OutlineOnlyWithChildrenFrameLayout

extends FrameLayout

 java.lang.Object

↳FrameLayout

↳androidx.leanback.preference.internal.OutlineOnlyWithChildrenFrameLayout

Gradle dependencies

compile group: 'androidx.leanback', name: 'leanback-preference', version: '1.2.0-alpha02'

  • groupId: androidx.leanback
  • artifactId: leanback-preference
  • version: 1.2.0-alpha02

Artifact androidx.leanback:leanback-preference:1.2.0-alpha02 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.leanback:leanback-preference com.android.support:preference-leanback-v17

Androidx class mapping:

androidx.leanback.preference.internal.OutlineOnlyWithChildrenFrameLayout android.support.v17.internal.widget.OutlineOnlyWithChildrenFrameLayout

Overview

FrameLayout subclass that provides an outline only when it has children, so that it does not cast a shadow when empty.

Summary

Constructors
publicOutlineOnlyWithChildrenFrameLayout(Context context)

publicOutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs)

publicOutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, int defStyleAttr)

publicOutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Methods
protected voidonLayout(boolean changed, int left, int top, int right, int bottom)

public voidsetOutlineProvider(ViewOutlineProvider provider)

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public OutlineOnlyWithChildrenFrameLayout(Context context)

public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs)

public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, int defStyleAttr)

public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Methods

protected void onLayout(boolean changed, int left, int top, int right, int bottom)

public void setOutlineProvider(ViewOutlineProvider provider)

Source

/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.leanback.preference.internal;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;

import android.content.Context;
import android.graphics.Outline;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.widget.FrameLayout;

import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;

/**
 * {@link FrameLayout} subclass that provides an outline only when it has children, so that it does
 * not cast a shadow when empty.
 *
 * @hide
 */
@RequiresApi(21)
@RestrictTo(LIBRARY_GROUP_PREFIX)
public class OutlineOnlyWithChildrenFrameLayout extends FrameLayout {

    private ViewOutlineProvider mMagicalOutlineProvider;
    ViewOutlineProvider mInnerOutlineProvider;

    public OutlineOnlyWithChildrenFrameLayout(Context context) {
        super(context);
    }

    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,
            int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        invalidateOutline();
    }

    @Override
    public void setOutlineProvider(ViewOutlineProvider provider) {
        mInnerOutlineProvider = provider;
        if (mMagicalOutlineProvider == null) {
            // Can't initialize this directly because this method is called from the superclass's
            // constructor.
            mMagicalOutlineProvider = new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    if (getChildCount() > 0) {
                        mInnerOutlineProvider.getOutline(view, outline);
                    } else {
                        ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
                    }
                }
            };
        }
        super.setOutlineProvider(mMagicalOutlineProvider);
    }
}