android Glide某1-2张图出现尺寸比较小而其他是充满的

android Glide某1-2张图出现尺寸比较小,而其他是充满的。
图片imageView控件的布局为:

没有什么特殊的。而尝试了Glide RequestOptions 如下几种case。

   switch (i) {
        case 1:
            option1 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(12)))
            ;
            options2 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)))
            ;
            options3 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)));
            options4 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8))).centerCrop();
            break;
        case 2:
            option1 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(12, 0));
            options2 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0));
            options3 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0));
            options4 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0));
            break;
        case 3:
            option1 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(12, 0))
                            .override(284, 152);
            options2 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0))
                            .override(246, 346);
            options3 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0))
                            .override(372, 208);
            options4 =
                    RequestOptions.bitmapTransform(new GlideRoundTransform(8, 0))
                            .override(372, 208);
            break;
        case 4:
            option1 =
                    new RequestOptions().override(284, 152)
                            .transform(new GlideRoundTransform(12, 0));
            options2 =
                    new RequestOptions().override(246, 346)
                            .transform(new GlideRoundTransform(8, 0));
            options3 =
                    new RequestOptions().override(372, 208).
                            transform(new GlideRoundTransform(8, 0));
            options4 =
                    new RequestOptions().override(372, 208).
                            transform(new GlideRoundTransform(8, 0));
            break;
        case 5:
            option1 =
                    new RequestOptions().override(284, 152)
                            .transform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(12)));
            options2 =
                    new RequestOptions().override(246, 346)
                            .transform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)));
            options3 =
                    new RequestOptions().override(372, 208)
                            .transform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)));
            options4 =
                    new RequestOptions().override(372, 208)
                            .transform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)));
            break;
        default:
            option1 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(12)))
                            .override(284, 152);
            options2 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)))
                            .override(246, 346);
            options3 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)))
                            .override(372, 208);
            options4 =
                    RequestOptions.bitmapTransform(new MultiTransformation<>(new CenterCrop(),
                            new RoundedCorners(8)))
                            .override(372, 208);
            break;
    }

共计尝试了如上共计6种case的。
最后得出结论,2,3,4是稳定的不会出现小图了。
跟机型和版本有关系,glide4.8.具体有空还需要继续研究。目前满足使用。

附录代码:
public class GlideRoundTransform extends BitmapTransformation {
    private static final int VERSION = 1;
    private static final String ID = "jp.wasabeef.glide.transformations.RoundedCornersTransformation." + VERSION;

    public enum CornerType {
        ALL,
        TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT,
        TOP, BOTTOM, LEFT, RIGHT,
        OTHER_TOP_LEFT, OTHER_TOP_RIGHT, OTHER_BOTTOM_LEFT, OTHER_BOTTOM_RIGHT,
        DIAGONAL_FROM_TOP_LEFT, DIAGONAL_FROM_TOP_RIGHT
    }

    private int radius;
    private int diameter;
    private int margin;
    private CornerType cornerType;
    private int bgColor;

    public GlideRoundTransform(int radius, int margin) {
        this(radius, margin, CornerType.ALL);
    }

    public GlideRoundTransform(int radius, int margin, CornerType cornerType) {
        this.radius = radius;
        this.diameter = this.radius * 2;
        this.margin = margin;
        this.cornerType = cornerType;
    }

    @Override
    protected Bitmap transform(@NonNull BitmapPool pool,
                               @NonNull Bitmap toTransform, int outWidth, int outHeight) {
        Bitmap tmp = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);

        int width = tmp.getWidth();
        int height = tmp.getHeight();

        Bitmap bitmap = pool.get(width, height, Bitmap.Config.ARGB_4444);
        bitmap.setHasAlpha(true);

        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);

        if(bgColor != 0) {
            paint.setColor(bgColor);
            paint.setStyle(Paint.Style.FILL);
            RectF rectBg = new RectF(0, 0, canvas.getWidth() - radius, canvas.getHeight() - radius);
            canvas.drawRoundRect(rectBg, radius, radius, paint);
        }

        paint.setShader(new BitmapShader(tmp, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
        drawRoundRect(canvas, paint, width, height);
        return bitmap;
    }

    private void drawRoundRect(Canvas canvas, Paint paint, float width, float height) {
        float right = width - margin;
        float bottom = height - margin;

        switch (cornerType) {
            case ALL:
                canvas.drawRoundRect(new RectF(margin, margin, right, bottom), radius, radius, paint);
                break;
            case TOP_LEFT:
                drawTopLeftRoundRect(canvas, paint, right, bottom);
                break;
            case TOP_RIGHT:
                drawTopRightRoundRect(canvas, paint, right, bottom);
                break;
            case BOTTOM_LEFT:
                drawBottomLeftRoundRect(canvas, paint, right, bottom);
                break;
            case BOTTOM_RIGHT:
                drawBottomRightRoundRect(canvas, paint, right, bottom);
                break;
            case TOP:
                drawTopRoundRect(canvas, paint, right, bottom);
                break;
            case BOTTOM:
                drawBottomRoundRect(canvas, paint, right, bottom);
                break;
            case LEFT:
                drawLeftRoundRect(canvas, paint, right, bottom);
                break;
            case RIGHT:
                drawRightRoundRect(canvas, paint, right, bottom);
                break;
            case OTHER_TOP_LEFT:
                drawOtherTopLeftRoundRect(canvas, paint, right, bottom);
                break;
            case OTHER_TOP_RIGHT:
                drawOtherTopRightRoundRect(canvas, paint, right, bottom);
                break;
            case OTHER_BOTTOM_LEFT:
                drawOtherBottomLeftRoundRect(canvas, paint, right, bottom);
                break;
            case OTHER_BOTTOM_RIGHT:
                drawOtherBottomRightRoundRect(canvas, paint, right, bottom);
                break;
            case DIAGONAL_FROM_TOP_LEFT:
                drawDiagonalFromTopLeftRoundRect(canvas, paint, right, bottom);
                break;
            case DIAGONAL_FROM_TOP_RIGHT:
                drawDiagonalFromTopRightRoundRect(canvas, paint, right, bottom);
                break;
            default:
                canvas.drawRoundRect(new RectF(margin, margin, right, bottom), radius, radius, paint);
                break;
        }
    }

    private void drawTopLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, margin + diameter), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin + radius, margin + radius, bottom), paint);
        canvas.drawRect(new RectF(margin + radius, margin, right, bottom), paint);
    }

    private void drawTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(right - diameter, margin, right, margin + diameter), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin, right - radius, bottom), paint);
        canvas.drawRect(new RectF(right - radius, margin + radius, right, bottom), paint);
    }

    private void drawBottomLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, bottom - diameter, margin + diameter, bottom), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin, margin + diameter, bottom - radius), paint);
        canvas.drawRect(new RectF(margin + radius, margin, right, bottom), paint);
    }

    private void drawBottomRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(right - diameter, bottom - diameter, right, bottom), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin, right - radius, bottom), paint);
        canvas.drawRect(new RectF(right - radius, margin, right, bottom - radius), paint);
    }

    private void drawTopRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, right, margin + diameter), radius, radius,
                paint);
        canvas.drawRect(new RectF(margin, margin + radius, right, bottom), paint);
    }

    private void drawBottomRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, bottom - diameter, right, bottom), radius, radius,
                paint);
        canvas.drawRect(new RectF(margin, margin, right, bottom - radius), paint);
    }

    private void drawLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, bottom), radius, radius,
                paint);
        canvas.drawRect(new RectF(margin + radius, margin, right, bottom), paint);
    }

    private void drawRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(right - diameter, margin, right, bottom), radius, radius, paint);
        canvas.drawRect(new RectF(margin, margin, right - radius, bottom), paint);
    }

    private void drawOtherTopLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, bottom - diameter, right, bottom), radius, radius,
                paint);
        canvas.drawRoundRect(new RectF(right - diameter, margin, right, bottom), radius, radius, paint);
        canvas.drawRect(new RectF(margin, margin, right - radius, bottom - radius), paint);
    }

    private void drawOtherTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, bottom), radius, radius,
                paint);
        canvas.drawRoundRect(new RectF(margin, bottom - diameter, right, bottom), radius, radius,
                paint);
        canvas.drawRect(new RectF(margin + radius, margin, right, bottom - radius), paint);
    }

    private void drawOtherBottomLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, right, margin + diameter), radius, radius,
                paint);
        canvas.drawRoundRect(new RectF(right - diameter, margin, right, bottom), radius, radius, paint);
        canvas.drawRect(new RectF(margin, margin + radius, right - radius, bottom), paint);
    }

    private void drawOtherBottomRightRoundRect(Canvas canvas, Paint paint, float right,
                                               float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, right, margin + diameter), radius, radius,
                paint);
        canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, bottom), radius, radius,
                paint);
        canvas.drawRect(new RectF(margin + radius, margin + radius, right, bottom), paint);
    }

    private void drawDiagonalFromTopLeftRoundRect(Canvas canvas, Paint paint, float right,
                                                  float bottom) {
        canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, margin + diameter), radius,
                radius, paint);
        canvas.drawRoundRect(new RectF(right - diameter, bottom - diameter, right, bottom), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin + radius, right - diameter, bottom), paint);
        canvas.drawRect(new RectF(margin + diameter, margin, right, bottom - radius), paint);
    }

    private void drawDiagonalFromTopRightRoundRect(Canvas canvas, Paint paint, float right,
                                                   float bottom) {
        canvas.drawRoundRect(new RectF(right - diameter, margin, right, margin + diameter), radius,
                radius, paint);
        canvas.drawRoundRect(new RectF(margin, bottom - diameter, margin + diameter, bottom), radius,
                radius, paint);
        canvas.drawRect(new RectF(margin, margin, right - radius, bottom - radius), paint);
        canvas.drawRect(new RectF(margin + radius, margin + radius, right, bottom), paint);
    }

    @Override
    public String toString() {
        return "RoundedTransformation(radius=" + radius + ", margin=" + margin + ", diameter="
                + diameter + ", cornerType=" + cornerType.name() + ")";
    }

    @Override
    public boolean equals(Object o) {
        return o instanceof GlideRoundTransform &&
                ((GlideRoundTransform) o).radius == radius &&
                ((GlideRoundTransform) o).diameter == diameter &&
                ((GlideRoundTransform) o).margin == margin &&
                ((GlideRoundTransform) o).cornerType == cornerType;
    }

    @Override
    public int hashCode() {
        return ID.hashCode() + radius * 10000 + diameter * 1000 + margin * 100 + cornerType.ordinal() * 10;
    }


    @Override
    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
        try {
            messageDigest.update((ID + radius + diameter + margin + cornerType).getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置图片底部的颜色值
     */
    public void setBgColor(int bgColor){
        this.bgColor = bgColor;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值