Creating a custom drawable to customize shadow.
> Fixing DrapTargetBar set to visible (with alpha = 0) in the start causing unnecessary draw Bug: 37616877 Change-Id: Iaaff96099910f504f6e2f81c9376ddacde50ff6a
|
@ -82,6 +82,10 @@
|
||||||
*;
|
*;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-keep class com.android.launcher3.graphics.ShadowDrawable {
|
||||||
|
public <init>(...);
|
||||||
|
}
|
||||||
|
|
||||||
# Proguard will strip methods required for talkback to properly scroll to
|
# Proguard will strip methods required for talkback to properly scroll to
|
||||||
# next row when focus is on the last item of last row when using a RecyclerView
|
# next row when focus is on the last item of last row when using a RecyclerView
|
||||||
# Keep optimized and shrunk proguard to prevent issues like this when using
|
# Keep optimized and shrunk proguard to prevent issues like this when using
|
||||||
|
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 832 B |
Before Width: | Height: | Size: 552 B |
Before Width: | Height: | Size: 689 B |
Before Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 378 B |
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<com.android.launcher3.graphics.ShadowDrawable
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:src="@drawable/ic_info_no_shadow" />
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<com.android.launcher3.graphics.ShadowDrawable
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:src="@drawable/ic_remove_no_shadow" />
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<com.android.launcher3.graphics.ShadowDrawable
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:src="@drawable/ic_uninstall_no_shadow" />
|
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 965 B |
Before Width: | Height: | Size: 730 B |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.0 KiB |
|
@ -17,8 +17,9 @@
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:viewportWidth="24.0"
|
android:viewportWidth="24.0"
|
||||||
android:viewportHeight="24.0">
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/textColorPrimary" >
|
||||||
<path
|
<path
|
||||||
android:fillColor="?android:attr/textColorPrimary"
|
android:fillColor="#FFFFFFFF"
|
||||||
android:pathData="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z"/>
|
android:pathData="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/textColorPrimary" >
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/textColorPrimary" >
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/>
|
||||||
|
</vector>
|
|
@ -20,6 +20,7 @@
|
||||||
android:theme="@style/HomeScreenElementTheme"
|
android:theme="@style/HomeScreenElementTheme"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/dynamic_grid_drop_target_size"
|
android:layout_height="@dimen/dynamic_grid_drop_target_size"
|
||||||
|
android:visibility="invisible"
|
||||||
android:layout_gravity="center_horizontal|top"
|
android:layout_gravity="center_horizontal|top"
|
||||||
android:focusable="false">
|
android:focusable="false">
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="left"
|
android:layout_gravity="left"
|
||||||
|
android:visibility="invisible"
|
||||||
android:focusable="false"
|
android:focusable="false"
|
||||||
android:paddingTop="@dimen/vert_drop_target_vertical_gap" >
|
android:paddingTop="@dimen/vert_drop_target_vertical_gap" >
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*/
|
*/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<!-- BubbleTextView specific attributes. -->
|
<!-- BubbleTextView specific attributes. -->
|
||||||
<declare-styleable name="BubbleTextView">
|
<declare-styleable name="BubbleTextView">
|
||||||
|
@ -111,4 +111,8 @@
|
||||||
</attr>
|
</attr>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
<declare-styleable name="ShadowDrawable">
|
||||||
|
<attr name="android:src" />
|
||||||
|
<attr name="android:shadowColor" />
|
||||||
|
</declare-styleable>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -146,6 +146,7 @@
|
||||||
<dimen name="blur_size_medium_outline">2dp</dimen>
|
<dimen name="blur_size_medium_outline">2dp</dimen>
|
||||||
<dimen name="blur_size_click_shadow">4dp</dimen>
|
<dimen name="blur_size_click_shadow">4dp</dimen>
|
||||||
<dimen name="click_shadow_high_shift">2dp</dimen>
|
<dimen name="click_shadow_high_shift">2dp</dimen>
|
||||||
|
<dimen name="drawable_shadow_size">2dp</dimen>
|
||||||
|
|
||||||
<!-- Pending widget -->
|
<!-- Pending widget -->
|
||||||
<dimen name="pending_widget_min_padding">8dp</dimen>
|
<dimen name="pending_widget_min_padding">8dp</dimen>
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2017 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.
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
<drawable name="ic_info_shadow">@drawable/ic_info_no_shadow</drawable>
|
||||||
|
<drawable name="ic_remove_shadow">@drawable/ic_remove_no_shadow</drawable>
|
||||||
|
<drawable name="ic_uninstall_shadow">@drawable/ic_uninstall_no_shadow</drawable>
|
||||||
|
</resources>
|
|
@ -40,7 +40,7 @@ public class DeleteDropTarget extends ButtonDropTarget {
|
||||||
// Get the hover color
|
// Get the hover color
|
||||||
mHoverColor = getResources().getColor(R.color.delete_target_hover_tint);
|
mHoverColor = getResources().getColor(R.color.delete_target_hover_tint);
|
||||||
|
|
||||||
setDrawable(R.drawable.ic_remove_launcher);
|
setDrawable(R.drawable.ic_remove_shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -40,12 +40,10 @@ public class InfoDropTarget extends UninstallDropTarget {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void setupUi() {
|
||||||
super.onFinishInflate();
|
|
||||||
// Get the hover color
|
// Get the hover color
|
||||||
mHoverColor = Themes.getColorAccent(getContext());
|
mHoverColor = Themes.getColorAccent(getContext());
|
||||||
|
setDrawable(R.drawable.ic_info_shadow);
|
||||||
setDrawable(R.drawable.ic_info_launcher);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -28,10 +28,13 @@ public class UninstallDropTarget extends ButtonDropTarget {
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
|
setupUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setupUi() {
|
||||||
// Get the hover color
|
// Get the hover color
|
||||||
mHoverColor = getResources().getColor(R.color.uninstall_target_hover_tint);
|
mHoverColor = getResources().getColor(R.color.uninstall_target_hover_tint);
|
||||||
|
setDrawable(R.drawable.ic_uninstall_shadow);
|
||||||
setDrawable(R.drawable.ic_uninstall_launcher);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,191 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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 com.android.launcher3.graphics;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.content.res.TypedArray;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BlurMaskFilter;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.ColorFilter;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.PixelFormat;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import com.android.launcher3.R;
|
||||||
|
import com.android.launcher3.Utilities;
|
||||||
|
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A drawable which adds shadow around a child drawable.
|
||||||
|
*/
|
||||||
|
public class ShadowDrawable extends Drawable {
|
||||||
|
|
||||||
|
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
|
||||||
|
|
||||||
|
private final ShadowDrawableState mState;
|
||||||
|
|
||||||
|
public ShadowDrawable() {
|
||||||
|
this(new ShadowDrawableState());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShadowDrawable(ShadowDrawableState state) {
|
||||||
|
mState = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas) {
|
||||||
|
Rect bounds = getBounds();
|
||||||
|
if (bounds.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mState.mLastDrawnBitmap == null) {
|
||||||
|
regenerateBitmapCache();
|
||||||
|
}
|
||||||
|
canvas.drawBitmap(mState.mLastDrawnBitmap, null, bounds, mPaint);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlpha(int alpha) {
|
||||||
|
mPaint.setAlpha(alpha);
|
||||||
|
invalidateSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setColorFilter(ColorFilter colorFilter) {
|
||||||
|
mPaint.setColorFilter(colorFilter);
|
||||||
|
invalidateSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConstantState getConstantState() {
|
||||||
|
return mState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOpacity() {
|
||||||
|
return PixelFormat.TRANSLUCENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicHeight() {
|
||||||
|
return mState.mIntrinsicHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicWidth() {
|
||||||
|
return mState.mIntrinsicWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the color for the generated shadow
|
||||||
|
*/
|
||||||
|
public void setShadowColor(int color) {
|
||||||
|
if (mState.mShadowColor != color) {
|
||||||
|
mState.mShadowColor = color;
|
||||||
|
mState.mLastDrawnBitmap = null;
|
||||||
|
invalidateSelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void regenerateBitmapCache() {
|
||||||
|
Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight,
|
||||||
|
Bitmap.Config.ARGB_8888);
|
||||||
|
Canvas canvas = new Canvas(bitmap);
|
||||||
|
|
||||||
|
// Call mutate, so that the pixel allocation by the underlying vector drawable is cleared.
|
||||||
|
Drawable d = mState.mChildState.newDrawable().mutate();
|
||||||
|
d.setBounds(mState.mShadowSize, mState.mShadowSize,
|
||||||
|
mState.mIntrinsicWidth - mState.mShadowSize,
|
||||||
|
mState.mIntrinsicHeight - mState.mShadowSize);
|
||||||
|
d.draw(canvas);
|
||||||
|
|
||||||
|
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
|
||||||
|
paint.setMaskFilter(new BlurMaskFilter(mState.mShadowSize, BlurMaskFilter.Blur.NORMAL));
|
||||||
|
int[] offset = new int[2];
|
||||||
|
Bitmap shadow = bitmap.extractAlpha(paint, offset);
|
||||||
|
|
||||||
|
paint.setMaskFilter(null);
|
||||||
|
paint.setColor(mState.mShadowColor);
|
||||||
|
bitmap.eraseColor(Color.TRANSPARENT);
|
||||||
|
canvas.drawBitmap(shadow, offset[0], offset[1], paint);
|
||||||
|
d.draw(canvas);
|
||||||
|
|
||||||
|
if (Utilities.isAtLeastO()) {
|
||||||
|
bitmap = bitmap.copy(Bitmap.Config.HARDWARE, false);
|
||||||
|
}
|
||||||
|
mState.mLastDrawnBitmap = bitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs,
|
||||||
|
Resources.Theme theme) throws XmlPullParserException, IOException {
|
||||||
|
super.inflate(r, parser, attrs, theme);
|
||||||
|
|
||||||
|
final TypedArray a = theme == null
|
||||||
|
? r.obtainAttributes(attrs, R.styleable.ShadowDrawable)
|
||||||
|
: theme.obtainStyledAttributes(attrs, R.styleable.ShadowDrawable, 0, 0);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Drawable d = a.getDrawable(R.styleable.ShadowDrawable_android_src);
|
||||||
|
if (d == null) {
|
||||||
|
throw new XmlPullParserException("missing src attribute");
|
||||||
|
}
|
||||||
|
mState.mShadowColor = a.getColor(
|
||||||
|
R.styleable.ShadowDrawable_android_shadowColor, Color.BLACK);
|
||||||
|
mState.mShadowSize = r.getDimensionPixelSize(R.dimen.drawable_shadow_size);
|
||||||
|
|
||||||
|
mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize;
|
||||||
|
mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize;
|
||||||
|
mState.mChangingConfigurations = d.getChangingConfigurations();
|
||||||
|
|
||||||
|
mState.mChildState = d.getConstantState();
|
||||||
|
} finally {
|
||||||
|
a.recycle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ShadowDrawableState extends ConstantState {
|
||||||
|
|
||||||
|
int mChangingConfigurations;
|
||||||
|
int mIntrinsicWidth;
|
||||||
|
int mIntrinsicHeight;
|
||||||
|
|
||||||
|
int mShadowColor;
|
||||||
|
int mShadowSize;
|
||||||
|
|
||||||
|
Bitmap mLastDrawnBitmap;
|
||||||
|
ConstantState mChildState;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Drawable newDrawable() {
|
||||||
|
return new ShadowDrawable(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChangingConfigurations() {
|
||||||
|
return mChangingConfigurations;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|