Размер изображения слишком мал при загрузке SVG с помощью Glide

Я использую Glide для загрузки изображений.

В моем приложении я использую следующий пример для загрузки изображения SVG в файл ImageView, который находится внутри файла CardView.

GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;

requestBuilder = Glide.with(mContext)
        .using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
        .from(Uri.class)
        .as(SVG.class)
        .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
        .sourceEncoder(new StreamEncoder())
        .cacheDecoder(new FileToStreamDecoder<>(new SVGDecoder()))
        .decoder(new SVGDecoder())
        .placeholder(R.drawable.modulo)
        .error(R.drawable.banner_error)
        .animate(android.R.anim.fade_in)
        .listener(new SvgSoftwareLayerSetter<Uri>());

requestBuilder
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .load(Uri.parse("http://foo.bar/blah"))
        .into(cardHolder.iv_card);

ImageView имеет фиксированную ширину 102dp и фиксированную высоту 94dp в XML. Но изображения становятся меньше, чем должны после загрузки. Я делаю что-то неправильно?

ScaleType: android:scaleType="fitXY"

img_20160219_155824


person Mauker    schedule 19.02.2016    source источник
comment
Вы установили свойство scaleType в ImageView?   -  person Desdroid    schedule 19.02.2016
comment
Да, это android:scaleType="fitXY".   -  person Mauker    schedule 20.02.2016
comment
Я не уверен, но возможно, это связано с этой проблемой AndroidSVG. У меня еще не было времени исследовать этот отчет об ошибке. Это происходит только в режиме fitXY?   -  person Paul LeBeau    schedule 20.02.2016


Ответы (1)


Я решил открыть этот вопрос как проблему в репозитории libs, и тогда я смог решить проблему.

Как оказалось, проблема была связана с тем, что мой SVG имел фиксированный размер, поэтому, чтобы исправить это, мне пришлось изменить мой метод SvgDecoder.decode и добавить эти три строки:

svg.setDocumentWidth(width);
svg.setDocumentHeight(height);
svg.setDocumentPreserveAspectRatio(PreserveAspectRatio.STRETCH);

Теперь метод выглядит так:

public Resource<SVG> decode(InputStream source, int width, int height) throws IOException {
    try {
        SVG svg = SVG.getFromInputStream(source);

        svg.setDocumentWidth(width);
        svg.setDocumentHeight(height);
        svg.setDocumentPreserveAspectRatio(PreserveAspectRatio.STRETCH);

        return new SimpleResource<>(svg);
    } catch (SVGParseException ex) {
        throw new IOException("Cannot load SVG from stream.", ex);
    }
}

Теперь работает как надо.

person Mauker    schedule 29.02.2016