package cn.qqtheme.framework.http;
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.AbsListView;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;
import cn.qqtheme.framework.util.LogUtils;
/**
* <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
* <p>
* 集成第三方图片加载框架(如:Glide、Picasso、Universal-Image-Loader、Fresco),
* 遵循“高内聚低耦合”原则,实现本类即可更换框架内核,降低各模块之间的依赖。
* <p>
* UIL:https://github.com/nostra13/Android-Universal-Image-Loader
* Picasso:https://github.com/square/picasso
* Glide:http://github.com/bumptech/glide
* Fresco:https://github.com/facebook/fresco
*
* @author 李玉江[QQ:1032694760]
* @see ImageLoadEngine
* @since 2015/12/9
*/
public class ImageHelper implements ImageLoadEngine, AbsListView.OnScrollListener {
public static final int PLACEHOLDER_LOADING = android.R.drawable.ic_menu_report_image;
public static final int PLACEHOLDER_FAILURE = android.R.drawable.ic_menu_report_image;
private static ImageHelper instance;
private Context context;
private ImageHelper() {
}
public static ImageHelper getInstance() {
if (instance == null) {
instance = new ImageHelper();
}
return instance;
}
@Override
public void display(String urlOrPath, ImageView view) {
display(urlOrPath, view, -1, -1);
}
@Override
public void display(String urlOrPath, ImageView view, int width, int height) {
LogUtils.verbose("Image>>>" + urlOrPath);
if (null == context) {
context = view.getContext();
}
RequestCreator creator = Picasso.with(context).load(urlOrPath);
creator.placeholder(PLACEHOLDER_LOADING);
creator.error(PLACEHOLDER_FAILURE);
creator.config(urlOrPath.endsWith(".png") ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
if (width > 0 && height > 0) {
creator.resize(width, height);
}
creator.into(view);
}
@Override
public void onScrollFling(AbsListView view) {
if (null == context) {
context = view.getContext();
}
Picasso.with(context).pauseTag(view);
}
@Override
public void onScrollFinish(AbsListView view) {
if (null == context) {
context = view.getContext();
}
Picasso.with(context).resumeTag(view);
}
@Override
public final void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_FLING) {
onScrollFling(view);
} else {
onScrollFinish(view);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItems, int totalItems) {
}
}