我正在尝试使用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);
}
}
答案 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; }
}