/*
 * Copyright (C) 2014 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 android.view;

import android.graphics.Outline;
import android.graphics.drawable.Drawable;

Interface by which a View builds its Outline, used for shadow casting and clipping.
/** * Interface by which a View builds its {@link Outline}, used for shadow casting and clipping. */
public abstract class ViewOutlineProvider {
Default outline provider for Views, which queries the Outline from the View's background, or generates a 0 alpha, rectangular Outline the size of the View if a background isn't present.
See Also:
  • getOutline.getOutline(Outline)
/** * Default outline provider for Views, which queries the Outline from the View's background, * or generates a 0 alpha, rectangular Outline the size of the View if a background * isn't present. * * @see Drawable#getOutline(Outline) */
public static final ViewOutlineProvider BACKGROUND = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { Drawable background = view.getBackground(); if (background != null) { background.getOutline(outline); } else { outline.setRect(0, 0, view.getWidth(), view.getHeight()); outline.setAlpha(0.0f); } } };
Maintains the outline of the View to match its rectangular bounds, at 1.0f alpha. This can be used to enable Views that are opaque but lacking a background cast a shadow.
/** * Maintains the outline of the View to match its rectangular bounds, * at <code>1.0f</code> alpha. * * This can be used to enable Views that are opaque but lacking a background cast a shadow. */
public static final ViewOutlineProvider BOUNDS = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRect(0, 0, view.getWidth(), view.getHeight()); } };
Maintains the outline of the View to match its rectangular padded bounds, at 1.0f alpha. This can be used to enable Views that are opaque but lacking a background cast a shadow.
/** * Maintains the outline of the View to match its rectangular padded bounds, * at <code>1.0f</code> alpha. * * This can be used to enable Views that are opaque but lacking a background cast a shadow. */
public static final ViewOutlineProvider PADDED_BOUNDS = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRect(view.getPaddingLeft(), view.getPaddingTop(), view.getWidth() - view.getPaddingRight(), view.getHeight() - view.getPaddingBottom()); } };
Called to get the provider to populate the Outline. This method will be called by a View when its owned Drawables are invalidated, when the View's size changes, or if View.invalidateOutline() is called explicitly. The input outline is empty and has an alpha of 1.0f.
Params:
  • view – The view building the outline.
  • outline – The empty outline to be populated.
/** * Called to get the provider to populate the Outline. * * This method will be called by a View when its owned Drawables are invalidated, when the * View's size changes, or if {@link View#invalidateOutline()} is called * explicitly. * * The input outline is empty and has an alpha of <code>1.0f</code>. * * @param view The view building the outline. * @param outline The empty outline to be populated. */
public abstract void getOutline(View view, Outline outline); }