通过Glide加载占位符图像后图像显得拉长?

时间:2016-02-11 12:59:29

标签: android android-glide

我正在尝试使用Glide在Listview中加载一些图像。如果我在加载图像时不使用占位符,则图像会正确加载。但是,当我尝试设置占位符时,我通过网络加载的图像显示为拉伸。这仅在使用占位符图像的情况下发生。如果我要离开屏幕并返回(这样就不会加载占位符图像),那么图像就会正确显示。

这是我简单的Glide实现:

void tokenize(char *oneline, FILE *fileName) {
    const char delimiter[6] = DELIMITER__;
    char time_str[50];
    char date_str[50];
    char *token;
    int counter = 0;
    /* parse time and date */
    for(token = strtok(oneline, delimiter);
            token != NULL;
            token = strtok(NULL, delimiter), ++counter)
    {
        if(counter == 1) {
            char *strA = "\"", *strB = ":", str[50], strC[50], strD[50];
            int v = 0, x = 3, y = 6, z=13;
            strncpy(str,token,v);
            str[v] = '\0';
            strcat(str,strA);
            strcat(str,token+v);
            strncpy(strC,str,x);
            strC[x] = '\0';
            strcat(strC,strB);
            strcat(strC,str+x);
            strncpy(strD,strC,y);
            strD[y] = '\0';
            strcat(strD,strB);
            strcat(strD,strC+y);
            strncpy(time_str,strD,z);
            time_str[z] = '\0';
            strcat(time_str,strA);
            strcat(time_str,strD+z);        
        } else if (counter == 9) {
            char *strA = "\"", *strB = "-", str[50], strC[50], strD[50];
            int v = 0, x = 3, y = 6, z=9;
            strncpy(str,token,v);
            str[v] = '\0';
            strcat(str,strA);
            strcat(str,token+v);
            strncpy(strC,str,x);
            strC[x] = '\0';
            strcat(strC,strB);
            strcat(strC,str+x);
            strncpy(strD,strC,y);
            strD[y] = '\0';
            strcat(strD,strB);
            strcat(strD,strC+y);
            strncpy(date_str,strD,z);
            date_str[z] = '\0';
            strcat(date_str,strA);
            strcat(date_str,strD+z);        
        }
    }
    if(counter < 10) {
        /* handle error case */
    } else {
        fprintf(fileName,"\"date\": %s %s", time_str, date_str);
    }
}

3 个答案:

答案 0 :(得分:9)

我知道我很晚才回答,但这就是它对我的帮助:

Glide.with(context).load(url).placeholder(R.drawable.empty_logo).dontAnimate().into(imageView);

使用dontAnimate(),它对我有用。希望它有所帮助:)

答案 1 :(得分:3)

我遇到了同样的问题,如果占位符小于正在提取的图像,则在加载到ImageView时图像将被拉伸。我尝试了所有我能想到的东西,以下对我来说非常有效:

我在ImageView上设置了以下属性:

<ImageView
    android:id="@+id/my_image_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"/>

以下列方式使用Glide:

Glide.with(myImageView.getContext())
            .load(imageUrl)
            .placeholder(R.drawable.placeholder)
            .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
            .into(myImageView);

这里要注意的关键事项是ImageView上的 adjustViewBounds 属性设置为true,最重要的是 .override(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL) - 这个将强制Glide使用图像的原始大小。

您还可以在 .override()中指定像素大小,但请确保为ImageView指定正确的ScaleType,否则它也会拉伸图像。

答案 2 :(得分:1)

我想,你已经将Imageview的高度和高度都视为Wrap_content。 因此,每当Glide加载图像时,某些图像的大小可能会更大,因此它会被拉伸。

试一试。

public class Attachment
{
    public int ImageId { get; set; }
    public int FontId { get; set; }
    [Required] public int GarmentId { get; set; }
    [MaxLength(50)] [Required] public string PanelId { get; set; }

    public Image Image { get; set; }
    public Font Font { get; set; }
}