|
4 | 4 | import android.graphics.drawable.Drawable; |
5 | 5 | import androidx.annotation.NonNull; |
6 | 6 | import androidx.annotation.Nullable; |
7 | | -import androidx.appcompat.graphics.drawable.DrawableWrapper; |
| 7 | +import androidx.core.graphics.drawable.DrawableCompat; |
| 8 | +import android.graphics.Canvas; |
| 9 | +import android.graphics.ColorFilter; |
| 10 | +import android.graphics.PixelFormat; |
8 | 11 | import android.text.Html; |
9 | 12 | import android.widget.TextView; |
10 | 13 |
|
@@ -77,19 +80,19 @@ public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) { |
77 | 80 |
|
78 | 81 | private class WrapperTarget extends SimpleTarget<Drawable> { |
79 | 82 | private int mMaxWidth; |
80 | | - private DrawableWrapper wrapperDrawable; |
| 83 | + private SimpleDrawableWrapper wrapperDrawable; |
81 | 84 |
|
82 | 85 | @SuppressLint("RestrictedApi") |
83 | 86 | public WrapperTarget(int maxWidth) { |
84 | 87 | //这里只缩小不放大 |
85 | 88 | super(maxWidth, TexureUtil.fitMaxHeight()); |
86 | 89 | this.mMaxWidth = maxWidth; |
87 | | - wrapperDrawable = new DrawableWrapper(null); |
| 90 | + wrapperDrawable = new SimpleDrawableWrapper(); |
88 | 91 | wrapperDrawable.setCallback(GlideImageGetter.this); |
89 | 92 | updateWrapperedDrawable(mLoadingDrawable); |
90 | 93 | } |
91 | 94 |
|
92 | | - public DrawableWrapper getWrapperDrawable() { |
| 95 | + public SimpleDrawableWrapper getWrapperDrawable() { |
93 | 96 | return wrapperDrawable; |
94 | 97 | } |
95 | 98 |
|
@@ -128,4 +131,63 @@ public void updateWrapperedDrawable(Drawable drawable) { |
128 | 131 | } |
129 | 132 | } |
130 | 133 |
|
| 134 | + // Simple replacement for DrawableWrapper which was removed in newer Material library |
| 135 | + private static class SimpleDrawableWrapper extends Drawable { |
| 136 | + private Drawable wrappedDrawable; |
| 137 | + |
| 138 | + public void setWrappedDrawable(Drawable drawable) { |
| 139 | + if (this.wrappedDrawable != null) { |
| 140 | + this.wrappedDrawable.setCallback(null); |
| 141 | + } |
| 142 | + this.wrappedDrawable = drawable; |
| 143 | + if (drawable != null) { |
| 144 | + drawable.setCallback(getCallback()); |
| 145 | + } |
| 146 | + } |
| 147 | + |
| 148 | + @Override |
| 149 | + public void draw(@NonNull Canvas canvas) { |
| 150 | + if (wrappedDrawable != null) { |
| 151 | + wrappedDrawable.draw(canvas); |
| 152 | + } |
| 153 | + } |
| 154 | + |
| 155 | + @Override |
| 156 | + public void setAlpha(int alpha) { |
| 157 | + if (wrappedDrawable != null) { |
| 158 | + wrappedDrawable.setAlpha(alpha); |
| 159 | + } |
| 160 | + } |
| 161 | + |
| 162 | + @Override |
| 163 | + public void setColorFilter(@Nullable ColorFilter colorFilter) { |
| 164 | + if (wrappedDrawable != null) { |
| 165 | + wrappedDrawable.setColorFilter(colorFilter); |
| 166 | + } |
| 167 | + } |
| 168 | + |
| 169 | + @Override |
| 170 | + public int getOpacity() { |
| 171 | + return wrappedDrawable != null ? wrappedDrawable.getOpacity() : PixelFormat.TRANSPARENT; |
| 172 | + } |
| 173 | + |
| 174 | + @Override |
| 175 | + public void setBounds(int left, int top, int right, int bottom) { |
| 176 | + super.setBounds(left, top, right, bottom); |
| 177 | + if (wrappedDrawable != null) { |
| 178 | + wrappedDrawable.setBounds(left, top, right, bottom); |
| 179 | + } |
| 180 | + } |
| 181 | + |
| 182 | + @Override |
| 183 | + public int getIntrinsicWidth() { |
| 184 | + return wrappedDrawable != null ? wrappedDrawable.getIntrinsicWidth() : -1; |
| 185 | + } |
| 186 | + |
| 187 | + @Override |
| 188 | + public int getIntrinsicHeight() { |
| 189 | + return wrappedDrawable != null ? wrappedDrawable.getIntrinsicHeight() : -1; |
| 190 | + } |
| 191 | + } |
| 192 | + |
131 | 193 | } |
0 commit comments