Picasso框架的基本使用
来源:互联网 发布:淘宝企业店铺开店装修 编辑:程序博客网 时间:2024/06/05 17:25
Picasso框架下载地址:https://github.com/square/picasso
首先在Android studio中导入依赖
compile 'com.squareup.picasso:picasso:2.5.2'
1.1 加载本地图片
int resourceId = R.mipmap.ic_launcher;
Picasso.with(this).load(resourceId).into(iv1);
1.2 加载sd卡图片
File file = new File(path);
Picasso.with(this).load(file).into(iv2);
1.3 加载网络图片
String uri = "http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg";
Picasso.with(this).load(uri).into(iv3);
1.4 加载网络图片(初始图片和错误图片)
String path = "http://img.my.csdn.net/uploads/201407/26/1406382765_7341.jpg";
Picasso.with(this)
.load(path)
.placeholder(R.mipmap.ic_launcher) //默认显示图片
.error(R.mipmap.ic_launcher) //加载时出现错误显示的图片
.into(iv5);
2、加载图片不缓存
Picasso.with(this) //查看大图放弃缓存,加速内存的回收
.load(Images.imageThumbUrls[3])
.memoryPolicy(NO_CACHE, NO_STORE)
.into(iv6);
3、图片填充方式
3.1 该属性会根据Image View的大小充满整个View,不考虑比例,可能造成图片的拉伸或者缩小
Picasso会对图片的大小及imageview进行测量,计算出最佳的大小及最佳的图片质量来进行图片展示,减少内存,并对视图没有影响。
Picasso.with(this).load(imageUrl).fit().into(imageView);
3.2 按比例裁减图片,使其居中显示,充满View,会造成图片显示不全,必须与resize方法同时使用
Picasso.with(this).load(imageUrl).resize(320, 640).centerCrop().into(imageView);
3.3 按比例裁减图片,图片可以完全显示,但如果图片比View小,则无法充满整个View,必须与resize方法同时使用
Picasso.with(this).load(imageUrl).resize(320, 640).centerInside().into(imageView);
3.4 这里面使用的测试图片的大小是1240*1563,如果resize的宽高大于图片的原始宽高,则resize不起作用,采用图片原始宽高显示。
Picasso.with(this).load(imageUrl).resize(1240, 1563).onlyScaleDown().into(imageView);
4、重写ImageView的onDetachedFromWindow方法,在它从屏幕中消失时回调,去掉drawable引用,能加快内存的回收。
如果一个屏幕上顶部图片较大,而底部图片较小,因为Picasso是异步加载,所以小图会先加载出来,但是对于用户来说,更希望看到的是上面的图片先加载,
底部的图片后加载,Picasso支持设置优先级,分为HIGH, MEDIUM, 和 LOW,所有的加载默认优先级为MEDIUM。
Picasso.with(this)
.load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg")
.priority(HIGH) //
priority()设置图片加载的优先级.into(recyclerImageView);
5、取消图片的过渡显示效果noFade()
Picasso.with(this).load(imageUrl).noFade().into(imageView);
默认情况下图片显示出来都会有一个过渡的效果,添加.noFade方法后,可以使该取消该效果,基本上很少使用
6、图片旋转rotate()
//以(0,0)为中心顺时针旋转45度
Picasso.with(this).load(imageUrl).rotate(45).into(imageView);
//以(64,64)为中心顺时针旋转45度
Picasso.with(this).load(imageUrl).rotate(45, 64, 64).into(imageView);
7、缓存策略
Picasso提供缓存的调试方法,通过如下代码可设置
Picasso.with(this).setIndicatorsEnabled(true);
8、tag标签管理
使用过list加载图片的童鞋都知道在列表滚动过程中停止加载图片,停止滚动时恢复图片加载,那么这样的功能在Picasso中时如何实现的呢?
这就用到了tag标签的功能
通过如下代码设置tag:
Picasso.with(this).load(imageUrl).tag("landptf").into(imageView);
在Picasso类中提供了如下几个方法来控制tag
cancelTag(Object tag)
pauseTag(Object tag)
resumeTag(Object tag)
通过名字可以很好理解了,我们在列表滚动的时候调用
Picasso.with(this).pauseTag("landptf");
在停止滚动的时候调用
至于cancelTag用于取消下载,一般我们在Activity销毁的时候将未完成的请求取消。
9、列表加载显示
public class ListViewPicassoActivity extends Activity{
RecyclerView recyclerView;
private List<String> mDatas;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
initData();
initView();
}
private void initView(){
recyclerView = (RecyclerView) findViewById(R.id.recycler);
LinearLayoutManager manager=new LinearLayoutManager(this); // 设置布局管理LayoutManager
// manager.setOrientation(LinearLayoutManager.HORIZONTAL); //设置水平或者垂直
recyclerView.setLayoutManager(manager);
recyclerView.setHasFixedSize(true);// (可选)如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
- adapter=new Adapter(mDatas,this);
recyclerView.setAdapter(adapter);
// 设置Adapter//RecyclerView滑动时监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
- //如果tag状态为pause或者resume的话,Picasso会对tag持有一个引用,如果此时用户退出了当前Activity,
- //垃圾回收机制进行回收的时候,就会出现内存泄露,所以需要在onDestory()方法中进行相应处理;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState)
{
final Picasso picasso = Picasso.with(ListViewPicassoActivity.this);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
picasso.resumeTag("RecyclerView"); //可见标记
} else {
picasso.pauseTag("RecyclerView"); //暂停标记 取消标记 cancleTag()
}
}
});
}
private void initData() {
mDatas = new ArrayList<String>();
for (int i = 0; i <= 19; i++) {
mDatas.add("item---" +i);
}
}
}
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{
public List<String> datas = null;
private Context context;
public Adapter(List<String> datas, Context context) {
this.datas = datas;
this.context=context;
}
//创建新View,被LayoutManager所调用
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.lv_item,viewGroup,false);
return new ViewHolder(view);;
}
//将数据与界面进行绑定的操作
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.mTextView.setText(datas.get(position));
Picasso.with(context)
.load(Images.imageThumbUrls[position])
.tag("RecyclerView") //参数为 Object
.into(viewHolder.imageView);
}
//获取数据的数量
@Override
public int getItemCount() {
return datas.size();
}
- //自定义的ViewHolder,持有每个Item的的所有界面元素
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView mTextView;
public ImageView imageView;
public ViewHolder(View view){
super(view);
mTextView=(TextView)view.findViewById(R.id.textview);
imageView= (ImageView) view.findViewById(R.id.imageViewitem);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:scrollbars="none"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="115dp"
android:background="#0099ff"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="35dp"
android:gravity="center"
android:textSize="19sp"
android:textColor="#000000"
android:text="我是条目"
android:layout_marginTop="5dp"/>
<ImageView
android:id="@+id/imageViewitem"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"/>
<View
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="#FF0000"
/>
</LinearLayout>
Picasso框架就介绍到这了,具体如何使用,请参考以下资料:
picasso使用简要说明 : http://blog.csdn.net/chenguang79/article/details/50621748
阅读全文
1 0
- Picasso框架的基本使用
- 图片加载框架 --Picasso 的基本使用
- Picasso的基本使用
- Picasso的基本使用
- picasso框架的使用
- Picasso框架的使用
- Picasso框架的使用
- Picasso框架的使用
- 图片加载框架简单介绍<二> Picasso 的基本使用
- Android Picasso的基本使用
- 安卓开源库Picasso的基本使用
- Android Picasso的基本使用
- Android框架Picasso的使用简介
- 图片加载框架Picasso的使用
- Picasso网络图片加载框架的使用
- Android Picasso图片缓存框架的使用
- Picasso网络图片加载框架的使用
- 图片框架Picasso的简单使用
- 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi
- 关于微信公众号授权机制
- Java的基本循环结构
- 不用‘+’的Add函数
- 子集树与排列树
- Picasso框架的基本使用
- java方法 method
- 565. Array Nesting
- Android Studio 2.2 在已有项目中添加NDK
- Java:使用3层for循环遍历输出三维数组内容。
- hdu1010Tempter of the Bone
- 推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)
- 7/11:泛型接口
- 329. Longest Increasing Path in a Matrix