/* * Copyright (C) 2016 Peng fei Pan <sky@xiaopan.me> * * 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 me.xiaopan.sketch.drawable; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import java.lang.ref.WeakReference; import me.xiaopan.sketch.request.DisplayRequest; import me.xiaopan.sketch.request.ImageFrom; import me.xiaopan.sketch.util.DrawableWrapper; /** * 加载中占位图专用Drawable,可绑定请求 */ public class LoadingDrawable extends DrawableWrapper implements RefDrawable { private WeakReference<DisplayRequest> weakReference; private RefDrawable refDrawable; private SketchDrawable sketchDrawable; public LoadingDrawable(Drawable drawable, DisplayRequest displayRequest) { super(drawable); this.weakReference = new WeakReference<>(displayRequest); if (drawable instanceof RefDrawable) { refDrawable = (RefDrawable) drawable; } if (drawable instanceof SketchDrawable) { sketchDrawable = (SketchDrawable) drawable; } } public DisplayRequest getRequest() { return weakReference.get(); } @Override public void setIsDisplayed(String callingStation, boolean displayed) { if (refDrawable != null) { refDrawable.setIsDisplayed(callingStation, displayed); } } @Override public void setIsCached(String callingStation, boolean cached) { if (refDrawable != null) { refDrawable.setIsCached(callingStation, cached); } } @Override public void setIsWaitingUse(String callingStation, boolean waitingUse) { if (refDrawable != null) { refDrawable.setIsWaitingUse(callingStation, waitingUse); } } @Override public boolean isRecycled() { return refDrawable != null && refDrawable.isRecycled(); } @Override public String getKey() { return sketchDrawable != null ? sketchDrawable.getKey() : null; } @Override public String getUri() { return sketchDrawable != null ? sketchDrawable.getUri() : null; } @Override public int getOriginWidth() { return sketchDrawable != null ? sketchDrawable.getOriginWidth() : 0; } @Override public int getOriginHeight() { return sketchDrawable != null ? sketchDrawable.getOriginHeight() : 0; } @Override public String getMimeType() { return sketchDrawable != null ? sketchDrawable.getMimeType() : null; } @Override public int getOrientation() { return sketchDrawable != null ? sketchDrawable.getOrientation() : 0; } @Override public int getByteCount() { return sketchDrawable != null ? sketchDrawable.getByteCount() : 0; } @Override public Bitmap.Config getBitmapConfig() { return sketchDrawable != null ? sketchDrawable.getBitmapConfig() : null; } @Override public ImageFrom getImageFrom() { return sketchDrawable != null ? sketchDrawable.getImageFrom() : null; } @Override public void setImageFrom(ImageFrom imageFrom) { if (sketchDrawable != null) { sketchDrawable.setImageFrom(imageFrom); } } @Override public String getInfo() { return sketchDrawable != null ? sketchDrawable.getInfo() : null; } }