標籤:
Picasso是Square公司開源的一個Android圖形緩衝庫,地址http://square.github.io/picasso/,可以實現圖片下載和緩衝功能。
它的使用及其的簡單,僅僅只需要一行代碼就能完全實現圖片的非同步載入:
Picasso.with(view.getContext()).load(newsItems.get(position).getThumb()).into(holder.ivHeader);//Picasso非同步載入預覽圖
完全不需要任何其他動作便可以載入圖片,而且內建緩衝功能,還最佳化了在RecyclerView中的圖片重複利用等問題,而且使用了複雜的圖片壓縮演算法來減少記憶體消耗以及內建二級緩衝
下面是博主在Adapter中寫的範例:
1 package socialnews.linccy.com.socialnews.adapter; 2 3 import android.support.v7.widget.RecyclerView; 4 import android.view.LayoutInflater; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.ImageView; 8 import android.widget.TextView; 9 10 import com.squareup.picasso.Picasso;11 12 import java.util.List;13 14 import butterknife.BindView;15 import butterknife.ButterKnife;16 import socialnews.linccy.com.socialnews.utils.NewsItem;17 import socialnews.linccy.com.socialnews.R;18 19 /**20 * Created by Lcc on 2016/7/9.21 */22 23 public class NewsItemAdapter extends RecyclerView.Adapter<NewsItemAdapter.ViewHolder> {24 25 private static List<NewsItem> newsItems;26 private View view;27 28 public NewsItemAdapter(List<NewsItem> newsItems) {29 this.newsItems = newsItems;30 }31 32 @Override33 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {34 view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_cardview_item, parent, false);35 ViewHolder holder = new ViewHolder(view);36 return holder;37 }38 39 @Override40 public void onBindViewHolder(ViewHolder holder, int position) {41 holder.tvTitle.setText(newsItems.get(position).getTitle());42 holder.tvDetail.setText(newsItems.get(position).getDescr());43 holder.tvTime.setText(newsItems.get(position).getTime());44 Picasso.with(view.getContext()).load(newsItems.get(position).getThumb()).into(holder.ivHeader);//Picasso非同步載入預覽圖45 }46 47 @Override48 public int getItemCount() {49 return newsItems.size();50 }51 52 53 public class ViewHolder extends RecyclerView.ViewHolder {54 @BindView(R.id.iv_header)55 ImageView ivHeader;56 57 @BindView(R.id.tv_title)58 TextView tvTitle;59 @BindView(R.id.tv_detail)60 TextView tvDetail;61 @BindView(R.id.tv_time)62 TextView tvTime;63 64 public ViewHolder(View itemView) {65 super(itemView);66 ButterKnife.bind(this, itemView);67 }68 }69 }
:
Android Picasso 擷取遠程圖片並顯示