Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Glide库中的位图转换未按预期工作_Android_Android Glide - Fatal编程技术网

Android Glide库中的位图转换未按预期工作

Android Glide库中的位图转换未按预期工作,android,android-glide,Android,Android Glide,我是Glide库的新手,遵循这里的转换指南: 我试图创建一个自定义转换,但当我在transformation类的transform方法中放置一条特征线时,我发现它从未被调用 下面是我的代码: private static class CustomTransformation extends BitmapTransformation { private Context aContext; public CustomTransformation(Context context)

我是Glide库的新手,遵循这里的转换指南:

我试图创建一个自定义转换,但当我在transformation类的
transform
方法中放置一条特征线时,我发现它从未被调用

下面是我的代码:

private static class CustomTransformation extends BitmapTransformation {

    private Context aContext;

    public CustomTransformation(Context context) {
        super(context);
        aContext = context;
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return bitmapChanger(toTransform, 1080, (int) aContext.getResources().getDimension(R.dimen.big_image));
    }

    @Override
    public String getId() {
        return "some_id";
    }

}

private static Bitmap bitmapChanger(Bitmap bitmap, int desiredWidth, int desiredHeight) {
    float originalWidth = bitmap.getWidth();
    float originalHeight = bitmap.getHeight();

    float scaleX = desiredWidth / originalWidth;
    float scaleY = desiredHeight / originalHeight;

    //Use the larger of the two scales to maintain aspect ratio
    float scale = Math.max(scaleX, scaleY);

    Matrix matrix = new Matrix();

    matrix.postScale(scale, scale);

    //If the scaleY is greater, we need to center the image
    if(scaleX < scaleY) {
        float tx = (scale * originalWidth - desiredWidth) / 2f;
        matrix.postTranslate(-tx, 0f);
    }

    return Bitmap.createBitmap(bitmap, 0, 0, (int) originalWidth, (int) originalHeight, matrix, true);
}


但两者都不起作用。有什么想法吗?同样,我不是在寻找关于矩阵本身的建议,我只是不明白为什么
transform(…)
根本没有被调用。谢谢

您很可能遇到缓存问题。第一次编译和执行代码时,转换的结果被缓存,因此下次不必将其应用于同一源映像

每个转换都有一个用于确定转换结果是否已更改的方法。通常,转换不会更改,但可以应用也可以不应用。您可以在开发过程中对每个构建进行更改,但也可以是tedius

要解决此问题,您可以向滑动载重线添加以下两个调用:

// TODO remove after transformation is done
.diskCacheStrategy(SOURCE) // override default RESULT cache and apply transform always
.skipMemoryCache(true) // do not reuse the transformed result while running
第一个可以更改为“无”,但您必须等待url每次从internet加载,而不是仅从手机读取图像。第二个是有用的,如果您可以导航到或离开有问题的转换,并希望调试它。它有助于在每次加载后不需要重新启动来清除内存缓存

在完成转换的开发之后,不要忘记删除它们,因为它们会对生产性能产生很大影响,如果需要的话,应该在充分考虑之后使用


看起来您正在尝试在加载之前将图像大小调整到一定的大小,您可以将
.override(width,height)
.centerCrop()
/
.fitCenter()
.dontTransform()结合使用。

也许他们的测试用例会很有用:我没有看到任何明显的错误,想在GitHub上提交一个问题以便我们进行调查吗@samajudd刚刚添加了这个问题,感谢您的回复!交叉链接:谢谢。至于你的补充说明,我想做的是使图像居中于顶部(通常是面)。比如,如果您的imageview边界的宽度/高度只有1平方米,并且您的图像看起来像这样:[1][2][3][4][5][6][7][8][9],我希望imageview显示的是平方米。好吧,评论将其全部放在一段中,但我认为您明白了。不管怎么说,你的问题解决了我当前的问题,那就是转换没有被调用,谢谢!
Glide.with(this).load(url).bitmapTransform(new CustomTransformation(this)).into(imageView);
// TODO remove after transformation is done
.diskCacheStrategy(SOURCE) // override default RESULT cache and apply transform always
.skipMemoryCache(true) // do not reuse the transformed result while running