/*
* Copyright (C) 2013 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.BitmapDrawable;
import me.xiaopan.sketch.request.ImageFrom;
import me.xiaopan.sketch.util.SketchUtils;
public class RefBitmapDrawable extends BitmapDrawable implements RefDrawable {
protected String logName = "RefBitmapDrawable";
private RefBitmap refBitmap;
private ImageFrom imageFrom;
public RefBitmapDrawable(RefBitmap refBitmap) {
super(null, refBitmap.getBitmap());
if (refBitmap.isRecycled()) {
throw new IllegalArgumentException("refBitmap recycled. " + refBitmap.getInfo());
}
this.refBitmap = refBitmap;
// 这一步很重要,让BitmapDrawable的density和Bitmap的density保持一致
// 这样getIntrinsicWidth()和getIntrinsicHeight()方法得到的就是bitmap的真实的(未经过缩放)尺寸
setTargetDensity(refBitmap.getBitmap().getDensity());
}
protected void setLogName(String logName) {
this.logName = logName;
}
@Override
public String getKey() {
return refBitmap.getKey();
}
@Override
public String getUri() {
return refBitmap.getUri();
}
@Override
public int getOriginWidth() {
return refBitmap.getAttrs().getOriginWidth();
}
@Override
public int getOriginHeight() {
return refBitmap.getAttrs().getOriginHeight();
}
@Override
public String getMimeType() {
return refBitmap.getAttrs().getMimeType();
}
@Override
public int getOrientation() {
return refBitmap.getAttrs().getOrientation();
}
@Override
public ImageFrom getImageFrom() {
return imageFrom;
}
@Override
public void setImageFrom(ImageFrom imageFrom) {
this.imageFrom = imageFrom;
}
@Override
public String getInfo() {
// TODO: 2017/4/3 图片信息里加上ImageAttrs里的全部信息
return SketchUtils.makeImageInfo(logName, getBitmap(), getMimeType(), getByteCount());
}
@Override
public int getByteCount() {
return refBitmap.getByteCount();
}
@Override
public Bitmap.Config getBitmapConfig() {
return refBitmap.getBitmapConfig();
}
@Override
public void setIsDisplayed(String callingStation, boolean displayed) {
refBitmap.setIsDisplayed(callingStation, displayed);
}
@Override
public void setIsCached(String callingStation, boolean cached) {
refBitmap.setIsCached(callingStation, cached);
}
@Override
public void setIsWaitingUse(String callingStation, boolean waitingUse) {
refBitmap.setIsWaitingUse(callingStation, waitingUse);
}
@Override
public boolean isRecycled() {
return refBitmap.isRecycled();
}
}