使用毕加索的图像加载问题
issue in imageloading using picasso
我有一个 spinner.when 我在 spinner.load 中设置了图像不正确。所以发生了什么事有些图像看起来很小,有些图像不显示,当我向下或向上滚动时有些图像不 show.sometime 加载图像时发生的事情需要时间
SpinnerAdapterRecharge.java
public class SpinnerAdapterRecharge extends ArrayAdapter<listview_data> {
private Activity context;
listview_data data[] = null;
int layoutResourceId;
public SpinnerAdapterRecharge(Activity context, int resource,listview_data[] data)
{
super(context, resource, data);
this.context = context;
this.data = data;
this.layoutResourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
return getDropDownView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{ // This view starts when we click the spinner.
View row = convertView;
listHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new listHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.spinnerimageIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.spinnerOperator);
row.setTag(holder);
}
else
{
holder = (listHolder)row.getTag();
}
listview_data item = data[position];
if(position == 0)
{
holder.imgIcon.setVisibility(View.GONE);
holder.txtTitle.setText(context.getResources().getString(R.string.lbl_operator));
}
else {
Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.into(holder.imgIcon);
holder.txtTitle.setText(item.title);
}
return row;
}
static class listHolder
{
ImageView imgIcon;
TextView txtTitle;
}
}
为了回答你的问题:
现在 Picasso 异步加载图像:
Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.into(holder.imgIcon);
如果想同步拥有,可以使用Picasso的get()
方法
Bitmap bitmap = Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.get();
someImageView.setImageBitmap(bitmap);
这可能是来自另一个 SO 答案的更好的解决方案。
/**
* Loads the request into an imageview.
* If called from a background thread, the request will be performed synchronously.
* @param requestCreator A request creator
* @param imageView The target imageview
* @param callback a Picasso callback
*/
public static void into(RequestCreator requestCreator, ImageView imageView, Callback callback) {
boolean mainThread = Looper.myLooper() == Looper.getMainLooper();
if (mainThread) {
requestCreator.into(imageView, callback);
} else {
try {
Bitmap bitmap = requestCreator.get();
imageView.setImageBitmap(bitmap);
if (callback != null) {
callback.onSuccess();
}
} catch (IOException e) {
if (callback != null) {
callback.onError();
}
}
}
}
来源:Synchronous image loading on a background thread with Picasso - without .get()
基本上,这就是同步加载的要点。
我有一个 spinner.when 我在 spinner.load 中设置了图像不正确。所以发生了什么事有些图像看起来很小,有些图像不显示,当我向下或向上滚动时有些图像不 show.sometime 加载图像时发生的事情需要时间
SpinnerAdapterRecharge.java
public class SpinnerAdapterRecharge extends ArrayAdapter<listview_data> {
private Activity context;
listview_data data[] = null;
int layoutResourceId;
public SpinnerAdapterRecharge(Activity context, int resource,listview_data[] data)
{
super(context, resource, data);
this.context = context;
this.data = data;
this.layoutResourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
return getDropDownView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{ // This view starts when we click the spinner.
View row = convertView;
listHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new listHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.spinnerimageIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.spinnerOperator);
row.setTag(holder);
}
else
{
holder = (listHolder)row.getTag();
}
listview_data item = data[position];
if(position == 0)
{
holder.imgIcon.setVisibility(View.GONE);
holder.txtTitle.setText(context.getResources().getString(R.string.lbl_operator));
}
else {
Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.into(holder.imgIcon);
holder.txtTitle.setText(item.title);
}
return row;
}
static class listHolder
{
ImageView imgIcon;
TextView txtTitle;
}
}
为了回答你的问题:
现在 Picasso 异步加载图像:
Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.into(holder.imgIcon);
如果想同步拥有,可以使用Picasso的get()
方法
Bitmap bitmap = Picasso.with(context)
.load(item.icon)
.resize(30, 30)
.error(R.drawable.imagenotavailable)
.get();
someImageView.setImageBitmap(bitmap);
这可能是来自另一个 SO 答案的更好的解决方案。
/**
* Loads the request into an imageview.
* If called from a background thread, the request will be performed synchronously.
* @param requestCreator A request creator
* @param imageView The target imageview
* @param callback a Picasso callback
*/
public static void into(RequestCreator requestCreator, ImageView imageView, Callback callback) {
boolean mainThread = Looper.myLooper() == Looper.getMainLooper();
if (mainThread) {
requestCreator.into(imageView, callback);
} else {
try {
Bitmap bitmap = requestCreator.get();
imageView.setImageBitmap(bitmap);
if (callback != null) {
callback.onSuccess();
}
} catch (IOException e) {
if (callback != null) {
callback.onError();
}
}
}
}
来源:Synchronous image loading on a background thread with Picasso - without .get()
基本上,这就是同步加载的要点。