android - 带有 Picasso 或 Universal Image Loader 的厨房
android - galley with Picasso or Universal Image Loader
我正在尝试使用 GridView + Picasso\Universal Image Loader 创建图库,但我遇到了一些问题。每次我只加载 local 文件(来自外部存储),而不是来自网络。我制作了两个视频,比文字更能描述问题。
我使用自定义适配器扩展 BaseAdapter
。
thumbs
是 File
的数组,图片
毕加索
加载图像足够快,但滚动速度很慢。Here the video demonstration on youtube
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Get the view
View view;
if (convertView == null)
view=inflater.inflate(R.layout.gallery_photo_item,parent,false);
else
view = convertView;
//find the componetnts
final ImageView image_view = (ImageView)view.findViewById(R.id.galley_photo_item_image);
final CheckBox check = (CheckBox)view.findViewById(R.id.galley_photo_item_checkbox);
//Toggling checkbox if DELETE MODE
if(is_checking) {
check.setChecked(false);
check.setVisibility(View.VISIBLE);
}
else
check.setVisibility(View.INVISIBLE);
view.setTag(position);
check.setTag(position);
//Some event handling
check.setOnClickListener(this);
view.setOnClickListener(this);
//Setting up Picasso
Picasso.Builder builder = new Picasso.Builder(context);
builder.listener(new com.squareup.picasso.Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Log.e("Picasso","Loading failed: "+exception.getMessage());
image_view.setVisibility(View.GONE);
}
});
//Display image
Picasso pic = builder.build();
pic
.load(thumbs[position])
//.placeholder(R.drawable.ic_launcher)
.fit()
.into(image_view);
return view;
}
通用图像加载器
滚动速度很快,但加载速度很慢。此外,当您快速滚动时,您会看到错误的图像,这些图像将在几秒钟内被正确的(当它们加载后)替换。 Demonstration on youtube
我在这里添加了 View Holder
模式。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view_holder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.gallery_photo_item,parent,false);
ImageView image = (ImageView)convertView.findViewById(R.id.galley_photo_item_image);
CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.galley_photo_item_checkbox);
view_holder = new ViewHolder(convertView,image,checkBox);
convertView.setTag(view_holder);
}
else
view_holder = (ViewHolder)convertView.getTag();
//Toggle checkbox on DELETE MODE
if(is_checking) {
view_holder.CheckBox.setChecked(false);
view_holder.CheckBox.setVisibility(View.VISIBLE);
}
else
view_holder.CheckBox.setVisibility(View.INVISIBLE);
//view.setTag(position);
//check.setTag(position);
//Event handling
view_holder.CheckBox.setOnClickListener(this);
view_holder.View.setOnClickListener(this);
//Display image
String uri = Uri.fromFile(thumbs[position]).toString();
ImageLoader loader = ImageLoader.getInstance();
loader.displayImage(uri,view_holder.ImageView, options);
return convertView;
}
问题
有什么好方法可以让图库运行得更快(作为本机 android 应用程序,完美)?
尝试使用 google 推荐的 Glide Image Loader Library
参考这里:- https://coderzpassion.com/android-working-glide-image-loader-library/
我正在尝试使用 GridView + Picasso\Universal Image Loader 创建图库,但我遇到了一些问题。每次我只加载 local 文件(来自外部存储),而不是来自网络。我制作了两个视频,比文字更能描述问题。
我使用自定义适配器扩展 BaseAdapter
。
thumbs
是 File
的数组,图片
毕加索
加载图像足够快,但滚动速度很慢。Here the video demonstration on youtube
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Get the view
View view;
if (convertView == null)
view=inflater.inflate(R.layout.gallery_photo_item,parent,false);
else
view = convertView;
//find the componetnts
final ImageView image_view = (ImageView)view.findViewById(R.id.galley_photo_item_image);
final CheckBox check = (CheckBox)view.findViewById(R.id.galley_photo_item_checkbox);
//Toggling checkbox if DELETE MODE
if(is_checking) {
check.setChecked(false);
check.setVisibility(View.VISIBLE);
}
else
check.setVisibility(View.INVISIBLE);
view.setTag(position);
check.setTag(position);
//Some event handling
check.setOnClickListener(this);
view.setOnClickListener(this);
//Setting up Picasso
Picasso.Builder builder = new Picasso.Builder(context);
builder.listener(new com.squareup.picasso.Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Log.e("Picasso","Loading failed: "+exception.getMessage());
image_view.setVisibility(View.GONE);
}
});
//Display image
Picasso pic = builder.build();
pic
.load(thumbs[position])
//.placeholder(R.drawable.ic_launcher)
.fit()
.into(image_view);
return view;
}
通用图像加载器
滚动速度很快,但加载速度很慢。此外,当您快速滚动时,您会看到错误的图像,这些图像将在几秒钟内被正确的(当它们加载后)替换。 Demonstration on youtube
我在这里添加了 View Holder
模式。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view_holder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.gallery_photo_item,parent,false);
ImageView image = (ImageView)convertView.findViewById(R.id.galley_photo_item_image);
CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.galley_photo_item_checkbox);
view_holder = new ViewHolder(convertView,image,checkBox);
convertView.setTag(view_holder);
}
else
view_holder = (ViewHolder)convertView.getTag();
//Toggle checkbox on DELETE MODE
if(is_checking) {
view_holder.CheckBox.setChecked(false);
view_holder.CheckBox.setVisibility(View.VISIBLE);
}
else
view_holder.CheckBox.setVisibility(View.INVISIBLE);
//view.setTag(position);
//check.setTag(position);
//Event handling
view_holder.CheckBox.setOnClickListener(this);
view_holder.View.setOnClickListener(this);
//Display image
String uri = Uri.fromFile(thumbs[position]).toString();
ImageLoader loader = ImageLoader.getInstance();
loader.displayImage(uri,view_holder.ImageView, options);
return convertView;
}
问题
有什么好方法可以让图库运行得更快(作为本机 android 应用程序,完美)?
尝试使用 google 推荐的 Glide Image Loader Library 参考这里:- https://coderzpassion.com/android-working-glide-image-loader-library/