2015-08-18 3 views
9

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

Возможно, мне нужно проверить, загружено ли оно или что-то еще, но я не знаю, как это сделать.

Glide.with(this) 
    .load(quest.get(id).getImage()) 
    .placeholder(R.drawable.load) 
    .fitCenter() 
    .crossFade() 
    .into(imageView); 

ответ

0

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

12

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

.dontAnimate() 

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

Glide.with(context) 
      .load("http://lorempixel.com/150/150") 
      .placeholder(R.drawable.no_image) 
      .override(100, 100) 
      .dontAnimate() 
      .into(imageView); 
+3

Поскольку эта ссылка также упоминает, .don'tAnimate() может также можно заменить на .animate (android.R.anim.fade_in) – Chris

+0

Удивительный! Это сработало. – Chandru

1

Я в этом отношении было использование override() для обеспечения размера изображения. Если у вас есть 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); 
1

я сделать это, как указано ниже:

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

//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> 
Смежные вопросы