问题背景
有时候在使用drawable绘制图片的时候,要实现类似ImageView中各种 ScaleType的效果。但是每种ScaleType还得自己去实现具体的算法。有点麻烦,后来我想能不能直接复用ImageView的算法。于是有了以下这个类。这个类,亲测可用。记录一下,以备后面使用。
代码实现
package com.trs.huaqiao.news.list.ui.view;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.trs.news.ui.TRSApp;
/**
* <pre>
* Created by zhuguohui
* Date: 2024/5/17
* Time: 17:29
* Desc:使用ImageView来实现各种对图片的操作,比如各种ScaleType
* </pre>
*/
public class ImageViewDrawable extends Drawable {
private final ImageView imageView;
public ImageViewDrawable(int imageResId) {
imageView = new ImageView(TRSApp.app());
imageView.setImageResource(imageResId);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
@Override
public void draw(Canvas canvas) {
imageView.draw(canvas);
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
int widthSpec = View.MeasureSpec.makeMeasureSpec(getBounds().width(), View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(getBounds().height(), View.MeasureSpec.EXACTLY);
imageView.measure(widthSpec, heightSpec);
imageView.layout(left, top, right, bottom);
}
@Override
public void setAlpha(int alpha) {
imageView.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
imageView.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.OPAQUE;
}
}