gpt4 book ai didi

android - Volley 的 NetworkImageView 中的模糊图像

转载 作者:太空狗 更新时间:2023-10-29 13:25:01 28 4
gpt4 key购买 nike

我有一个包含 NetworkImageView 项目的列表,我遇到了一个奇怪的错误。我希望能够使用滑动手势删除列表项,所以我使用了 EnhancedListView图书馆。问题是,当我使用滑动手势删除列表中的项目时,NetworkImageView 中的图像变得模糊。

可以找到删除项目前的列表截图here可以找到使用滑动手势删除第一个元素后列表的屏幕截图 here .

当项目的 View 在适配器中被回收时会出现问题。如果我不使用 ViewHolder 并且每次在 getView(int position, View convertView, ViewGroup parent) 中扩充布局,问题就不会发生(即使在这种情况下,删除项目后列表会闪烁)。

下面是 fragment 中的代码,它使用滑动手势设置删除元素:

mListView.setDismissCallback(new de.timroes.android.listview.EnhancedListView.OnDismissCallback() {
@Override
public EnhancedListView.Undoable onDismiss(EnhancedListView listView, final int position) {
final Cafe cafe = mAdapter.getItem(position);
mAdapter.removeAt(position);
return new EnhancedListView.Undoable() {
/**
* This method is called if undo button is pressed
*/
@Override
public void undo() {
mAdapter.insertAt(position, cafe);
}

/**
* Returns the text in the Toast next to "Undo"
* @return text
*/
@Override public String getTitle() {
return getString(R.string.removed_from_favorites);
}

/**
* This method is called after the undo text has been discarded.
* It must remove the favorite in the model.
*/
@Override public void discard() {
CafeHelper.getInstance().toggleCafeStarredStatus(cafe.getId());
}
};
}
});

mListView.enableSwipeToDismiss();
mListView.setSwipeDirection(EnhancedListView.SwipeDirection.START);

您可以看到滑动手势只是调用了 mAdapter.removeAt(position);。以下是 getView(int position, View convertView, ViewGroup parent) 方法的代码和适配器中 ViewHolder 的定义:

static class ViewHolder {
TextView name;
NetworkImageView image;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater
.inflate(R.layout.fragment_starred_cafe_list_item, null);

viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.starred_cafe_list_item_name);
viewHolder.image = (NetworkImageView) convertView
.findViewById(R.id.starred_cafe_list_item_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.image.setImageUrl(null, VolleySingleton.getInstance().getImageLoader());
}
Cafe cafe = getItem(position);

viewHolder.name.setText(cafe.getName());
viewHolder.image.setImageUrl(cafe.getThumbUrl(), VolleySingleton.getInstance().getImageLoader());

return convertView;
}

注意事项:

  • 适配器是基于 StableArrayAdapter 的自定义适配器.我也尝试使用普通的 ArrayAdapter 并出现同样的问题。我真的怀疑问题与适配器有关。
  • 我也试过android-swipelistview作为实现滑动删除功能的库。发生完全相同的问题。这就是让我相信该错误与 Volley 而不是滑动库有关的原因。
  • 只需调用 mAdapter.removeAt(position); 而无需使用滑动即可完美地删除库。
  • ImageViewPicasso 结合使用加载图像没有任何问题。
  • 我正在使用 Volley 作为使用应用程序上下文的单例。

在深入研究 Volley 的代码后,问题似乎与获取 NetworkImageView 的宽度和高度有关,但我还没有时间调试该库。如果任何对 Volley 有深入了解的人可以帮助查明问题并找到解决方案,欢迎您的回答。

最佳答案

我有同样的问题,加载的图像很模糊,我认为这是由布局属性引起的:

android:adjustViewBounds="true"

通过用下面的行替换它解决了它:

android:scaleType="centerCrop"

我认为你是对的,Volley 只能得到图像的原始宽度,而不是经过某种调整后的宽度

关于android - Volley 的 NetworkImageView 中的模糊图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22430187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com