164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki/* 264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Copyright (C) 2015 The Android Open Source Project 364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * you may not use this file except in compliance with the License. 664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * You may obtain a copy of the License at 764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 1064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Unless required by applicable law or agreed to in writing, software 1164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 1264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * See the License for the specific language governing permissions and 1464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * limitations under the License. 1564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 1664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 1764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakipackage android.support.design.internal; 1864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; 208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas 2164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.content.Context; 2264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.content.res.TypedArray; 2364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.Canvas; 2464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.Rect; 2564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.drawable.Drawable; 2664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.annotation.NonNull; 278f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viveretteimport android.support.annotation.RequiresApi; 28c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo; 2964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.design.R; 3064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.v7.widget.LinearLayoutCompat; 3164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.util.AttributeSet; 3264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.view.Gravity; 3364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 3464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki/** 3564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @hide 3664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 378e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas@RestrictTo(LIBRARY_GROUP) 3864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakipublic class ForegroundLinearLayout extends LinearLayoutCompat { 3964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 4064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki private Drawable mForeground; 4164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 4264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki private final Rect mSelfBounds = new Rect(); 4364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 4464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki private final Rect mOverlayBounds = new Rect(); 4564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 4664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki private int mForegroundGravity = Gravity.FILL; 4764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 4864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki protected boolean mForegroundInPadding = true; 4964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 5064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki boolean mForegroundBoundsChanged = false; 5164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 5264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public ForegroundLinearLayout(Context context) { 5336459054e2064f283ae1f80b8d315e1428ba61deYuichi Araki this(context, null); 5464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 5564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 5664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public ForegroundLinearLayout(Context context, AttributeSet attrs) { 5764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki this(context, attrs, 0); 5864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 5964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 6064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public ForegroundLinearLayout(Context context, AttributeSet attrs, int defStyle) { 6164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super(context, attrs, defStyle); 6264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 6364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundLinearLayout, 6464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki defStyle, 0); 6564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 6664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundGravity = a.getInt( 6764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki R.styleable.ForegroundLinearLayout_android_foregroundGravity, mForegroundGravity); 6864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 6964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final Drawable d = a.getDrawable(R.styleable.ForegroundLinearLayout_android_foreground); 7064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (d != null) { 7164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki setForeground(d); 7264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 7364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 7464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundInPadding = a.getBoolean( 7564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki R.styleable.ForegroundLinearLayout_foregroundInsidePadding, true); 7664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 7764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki a.recycle(); 7864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 7964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 8064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki /** 8164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Describes how the foreground is positioned. 8264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 8364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @return foreground gravity. 8464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @see #setForegroundGravity(int) 8564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 86e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 8764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public int getForegroundGravity() { 8864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki return mForegroundGravity; 8964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 9064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 9164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki /** 9264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Describes how the foreground is positioned. Defaults to START and TOP. 9364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 9464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @param foregroundGravity See {@link android.view.Gravity} 9564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @see #getForegroundGravity() 9664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 97e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 9864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public void setForegroundGravity(int foregroundGravity) { 9964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForegroundGravity != foregroundGravity) { 10064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if ((foregroundGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) { 10164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki foregroundGravity |= Gravity.START; 10264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 10364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 10464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { 10564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki foregroundGravity |= Gravity.TOP; 10664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 10764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 10864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundGravity = foregroundGravity; 10964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 11064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForegroundGravity == Gravity.FILL && mForeground != null) { 11164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki Rect padding = new Rect(); 11264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground.getPadding(padding); 11364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 11464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 11564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki requestLayout(); 11664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 11764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 11864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 11964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 12064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki protected boolean verifyDrawable(Drawable who) { 12164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki return super.verifyDrawable(who) || (who == mForeground); 12264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 12364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 1248f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette @RequiresApi(11) 12564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 12664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public void jumpDrawablesToCurrentState() { 12764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.jumpDrawablesToCurrentState(); 12864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != null) { 12964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground.jumpToCurrentState(); 13064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 13164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 13264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 13364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 13464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki protected void drawableStateChanged() { 13564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.drawableStateChanged(); 13664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != null && mForeground.isStateful()) { 13764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground.setState(getDrawableState()); 13864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 13964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 14064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 14164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki /** 14264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Supply a Drawable that is to be rendered on top of all of the child 14364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * views in the frame layout. Any padding in the Drawable will be taken 14464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * into account by ensuring that the children are inset to be placed 14564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * inside of the padding area. 14664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 14764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @param drawable The Drawable to be drawn on top of the children. 14864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 149e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 15064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public void setForeground(Drawable drawable) { 15164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != drawable) { 15264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != null) { 15364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground.setCallback(null); 15464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki unscheduleDrawable(mForeground); 15564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 15664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 15764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground = drawable; 15864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 15964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (drawable != null) { 16064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki setWillNotDraw(false); 16164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki drawable.setCallback(this); 16264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (drawable.isStateful()) { 16364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki drawable.setState(getDrawableState()); 16464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 16564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForegroundGravity == Gravity.FILL) { 16664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki Rect padding = new Rect(); 16764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki drawable.getPadding(padding); 16864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 16964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } else { 17064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki setWillNotDraw(true); 17164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 17264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki requestLayout(); 17364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki invalidate(); 17464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 17564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 17664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 17764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki /** 17864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Returns the drawable used as the foreground of this FrameLayout. The 17964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * foreground drawable, if non-null, is always drawn on top of the children. 18064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * 18164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @return A Drawable or null if no foreground was set. 18264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */ 183e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 18464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public Drawable getForeground() { 18564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki return mForeground; 18664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 18764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 18864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 18964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 19064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.onLayout(changed, left, top, right, bottom); 19164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundBoundsChanged |= changed; 19264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 19364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 19464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 19564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki protected void onSizeChanged(int w, int h, int oldw, int oldh) { 19664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.onSizeChanged(w, h, oldw, oldh); 19764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundBoundsChanged = true; 19864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 19964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 20064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 20164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public void draw(@NonNull Canvas canvas) { 20264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.draw(canvas); 20364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 20464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != null) { 20564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final Drawable foreground = mForeground; 20664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 20764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForegroundBoundsChanged) { 20864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForegroundBoundsChanged = false; 20964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final Rect selfBounds = mSelfBounds; 21064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final Rect overlayBounds = mOverlayBounds; 21164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 21264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final int w = getRight() - getLeft(); 21364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki final int h = getBottom() - getTop(); 21464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 21564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForegroundInPadding) { 21664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki selfBounds.set(0, 0, w, h); 21764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } else { 21864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki selfBounds.set(getPaddingLeft(), getPaddingTop(), 21964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki w - getPaddingRight(), h - getPaddingBottom()); 22064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 22164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 22264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(), 22364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki foreground.getIntrinsicHeight(), selfBounds, overlayBounds); 22464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki foreground.setBounds(overlayBounds); 22564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 22664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 22764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki foreground.draw(canvas); 22864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 22964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 23064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 2318f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette @RequiresApi(21) 23264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki @Override 23364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki public void drawableHotspotChanged(float x, float y) { 23464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki super.drawableHotspotChanged(x, y); 23564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki if (mForeground != null) { 23664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki mForeground.setHotspot(x, y); 23764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 23864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki } 23964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki 24064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki} 241