Android Glide размер заполнителя

голоса
11

У меня есть проблема с Android Glide. Я пытаюсь быстро поменять свой имидж, они просто становятся всем размером заполнителя, и мой заполнитель изображение очень маленького размер. Так что мне нужно сделать?

Может быть, мне нужно проверить, если он загружен или что-то, но я не знаю, как.

Glide.with(this)
    .load(quest.get(id).getImage())
    .placeholder(R.drawable.load)
    .fitCenter()
    .crossFade()
    .into(imageView);
Задан 18/08/2015 в 15:31
источник пользователем
На других языках...                            


4 ответов

голоса
14

По этой проблеме на Glide GitHub странице вы можете это исправить с добавлением следующей строки к вашему запросу Glide:

  .dontAnimate()

Это сделает вашу полную линию нагрузки:

  Glide.with(context)
            .load("http://lorempixel.com/150/150")
            .placeholder(R.drawable.no_image)
            .override(100, 100)
            .dontAnimate()
            .into(imageView);
Ответил 27/10/2015 в 07:17
источник пользователем

голоса
1

Я делаю это, как указано ниже:

Идея заключается в том, чтобы установить тип шкалы в соответствии с требованиями держателя мест первоначально и прикрепить слушатель изменить тип шкалы снова в соответствии с требованиями скачанного изображением после изображения загружаются.

//ivBuilderLogo = Target ImageView
//Set the scale type to as required by your place holder
//ScaleType.CENTER_INSIDE will maintain aspect ration and fit the placeholder inside the image view
holder.ivBuilderLogo.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

//AnimationDrawable is required when you are using transition drawables
//You can directly send resource id to glide if your placeholder is static
//However if you are using GIFs, it is better to create a transition drawable in xml 
//& use it as shown in this example
AnimationDrawable animationDrawable;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
     animationDrawable=(AnimationDrawable)context.getDrawable(R.drawable.anim_image_placeholder);
else
     animationDrawable=(AnimationDrawable)context.getResources().getDrawable(R.drawable.anim_image_placeholder);
animationDrawable.start();

Glide.with(context).load(logo_url)
                   .placeholder(animationDrawable)
                   .listener(new RequestListener<String, GlideDrawable>() {
                        @Override
                        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource)
                        {
                           return false;
                        }

                        //This is invoked when your image is downloaded and is ready 
                        //to be loaded to the image view
                        @Override
                        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource)
                        {   
                        //This is used to remove the placeholder image from your ImageView 
                        //and load the downloaded image with desired scale-type(FIT_XY in this case)
                        //Changing the scale type from 'CENTER_INSIDE' to 'FIT_XY' 
                        //will stretch the placeholder for a (very) short duration,
                        //till the downloaded image is loaded
                        //setImageResource(0) removes the placeholder from the image-view 
                        //before setting the scale type to FIT_XY and ensures that the UX 
                        //is not spoiled, even for a (very) short duration
                            holder.ivBuilderLogo.setImageResource(0);
                            holder.ivBuilderLogo.setScaleType(ImageView.ScaleType.FIT_XY);
                            return false;
                        }
                    })
                    .into( holder.ivBuilderLogo);

Мой переход вытяжка (R.drawable.anim_image_placeholder):

(Не требуется, если используется статическое изображение)

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/loading_frame1" android:duration="100" />
    <!--<item android:drawable="@drawable/loading_frame2" android:duration="100" />-->
    <item android:drawable="@drawable/loading_frame3" android:duration="100" />
    <!--<item android:drawable="@drawable/loading_frame4" android:duration="100" />-->
    <item android:drawable="@drawable/loading_frame5" android:duration="100" />
    <!--<item android:drawable="@drawable/loading_frame6" android:duration="100" />-->
    <item android:drawable="@drawable/loading_frame7" android:duration="100" />
    <!--<item android:drawable="@drawable/loading_frame8" android:duration="100" />-->
    <item android:drawable="@drawable/loading_frame9" android:duration="100" />
    <!--<item android:drawable="@drawable/loading_frame10" android:duration="100" />-->
</animation-list>
Ответил 04/01/2017 в 08:31
источник пользователем

голоса
1

То, что я сделал в связи с этим было использовать переопределение () для обеспечения размера изображения. Если у вас есть GridView и вы должны иметь два изображений в каждой строке, это то, как вы находите размер экрана в пикселях, чтобы вычислить правильную ширину и высоту изображения:

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    placeholderWidth = size.x / 2 ;
    placeholderHeight = size.x * 3 / 2 ; // based on the image's height to width ratio

После того, как требуемая ширина и высота для каждого изображения в руке, его легко использовать переопределение:

    Glide.with(context)
            .load(url)
            .placeholder(R.drawable.loading)
            .override(placeholderWidth,placeholderHeight)                
            .into(viewHolder.imageViewHolder);
Ответил 04/02/2016 в 19:52
источник пользователем

голоса
0

Если я правильно понимаю вашу проблему, вам необходимо загрузить изображения, но они должны иметь ширину и высоту больше, чем ваш шаблонного изображения. Для того, чтобы решить вашу проблему, то вы должны сначала прочитать документацию для Glide. Я не могу видеть ваше определение ImageView в файле XML, но я думаю, что вы используете wrap_content атрибут для ширины и высоты. Если я прав, есть узкие места. Перед началом загрузки изображения, Glide получает точную ширину и высоту ImageView. После этого он загружает изображение из сети и в то же самое время изменить его размер в соответствии с одним из атрибутов ImageView (ширина или высота). Вот почему вы получите небольшие изображения после загрузки. Для того, чтобы решить вашу проблему просто установить ширину или высоту ImageView в значении, которое вы ожидаете увидеть. Другая сторона изображения будет автоматически рассчитываются с помощью логики Glide.

Ответил 20/08/2015 в 16:11
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more