ViewOutlineProvider.java revision 6efd17588bc29b1ff37143d6627f04309b1a0d7d
19a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik/* 29a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Copyright (C) 2014 The Android Open Source Project 39a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 49a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 59a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * you may not use this file except in compliance with the License. 69a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * You may obtain a copy of the License at 79a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 89a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * http://www.apache.org/licenses/LICENSE-2.0 99a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 109a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Unless required by applicable law or agreed to in writing, software 119a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * distributed under the License is distributed on an "AS IS" BASIS, 129a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * See the License for the specific language governing permissions and 149a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * limitations under the License. 159a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik */ 169a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik 179a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craikpackage android.view; 189a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik 199a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craikimport android.graphics.Outline; 209a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craikimport android.graphics.drawable.Drawable; 219a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik 229a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik/** 239a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Interface by which a View builds its {@link Outline}, used for shadow casting and clipping. 249a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik */ 259a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craikpublic abstract class ViewOutlineProvider { 269a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik /** 279a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Default outline provider for Views, which queries the Outline from the View's background, 2877b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik * or generates a 0 alpha, rectangular Outline the size of the View if a background 2977b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik * isn't present. 309a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 319a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * @see Drawable#getOutline(Outline) 329a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik */ 339a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik public static final ViewOutlineProvider BACKGROUND = new ViewOutlineProvider() { 349a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik @Override 3531ba192dd201df2cad96a8c503f730130ab0d80fChris Craik public void getOutline(View view, Outline outline) { 369a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik Drawable background = view.getBackground(); 3731ba192dd201df2cad96a8c503f730130ab0d80fChris Craik if (background != null) { 3831ba192dd201df2cad96a8c503f730130ab0d80fChris Craik background.getOutline(outline); 3977b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik } else { 4077b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik outline.setRect(0, 0, view.getWidth(), view.getHeight()); 4177b5cad3efedd20f2b7cc14d87ccce1b0261960aChris Craik outline.setAlpha(0.0f); 429a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik } 439a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik } 449a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik }; 459a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik 469a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik /** 479a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * Called to get the provider to populate the Outline. 489a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 499a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * This method will be called by a View when its owned Drawables are invalidated, when the 509a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * View's size changes, or if {@link View#invalidateOutline()} is called 519a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * explicitly. 529a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * 536efd17588bc29b1ff37143d6627f04309b1a0d7dChris Craik * The input outline is empty and has an alpha of <code>1.0f</code>. 546efd17588bc29b1ff37143d6627f04309b1a0d7dChris Craik * 559a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * @param view The view building the outline. 569a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik * @param outline The empty outline to be populated. 579a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik */ 5831ba192dd201df2cad96a8c503f730130ab0d80fChris Craik public abstract void getOutline(View view, Outline outline); 599a347f199284ad8bcb8a81bfbd306fe0b1a710baChris Craik} 60