Android Picasso – стиль размещения и ошибки изображения

Я использую библиотеку Picasso для загрузки изображений из сети. Мне просто интересно, могу ли я использовать диалог прогресса или изображение GIF в качестве владельца места? Также любая идея о том, как сделать изображение держателя места меньшим (и поместиться в центр), чем фактическое загруженное изображение?

Я попытался пройти через образцы, но не повезло. Любой, кто получил это, чтобы работать?

Solutions Collecting From Web of "Android Picasso – стиль размещения и ошибки изображения"

Вы можете использовать образ заполнителя, используя * .placeholder (R.drawable.image_name) * в своем вызове Picasso, например:

Picasso.with(context) .load(imageUrl) .placeholder(R.drawable.image_name) 

Если вы хотите использовать индикатор выполнения вместо изображения замещающего объекта, вы можете создать обратный вызов внутри функции .into . Сделайте что-то похожее на следующее:

На ваш взгляд:

 //create the progressBar here and set it to GONE. This can be your adapters list item view for example <RelativeLayout android:id="@+id/myContainer" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_marginTop="20dp" android:layout_marginBottom="20dp"/> <ImageView android:id="@+id/myImageView" android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="center" android:layout_margin="5dp" android:paddingLeft="60dp" android:scaleType="centerCrop"></ImageView> </RelativeLayout> 

В вашем адаптере / классе:

 //create a new progress bar for each image to be loaded ProgressBar progressBar = null; if (view != null) { progressBar = (ProgressBar) view.findViewById(R.id.progressBar); progressBar.setVisibility(View.VISIBLE); } //get your image view ImageView myImage = (ImageView) view.findViewById(R.id.myImageView); //load the image url with a callback to a callback method/class Picasso.with(context) .load(imageUrl) .into(myImage, new ImageLoadedCallback(progressBar) { @Override public void onSuccess() { if (this.progressBar != null) { this.progressBar.setVisibility(View.GONE); } } }); 

Внутри вашего адаптера / класса, как указано выше, я создаю внутренний класс для обратного вызова:

 private class ImageLoadedCallback implements Callback { ProgressBar progressBar; public ImageLoadedCallback(ProgressBar progBar){ progressBar = progBar; } @Override public void onSuccess() { } @Override public void onError() { } } 

Надеюсь, это имеет смысл!

Я реализовал диалог прогресса до загрузки изображения и его очень простой. Возьмите ImageView в относительной компоновке и поставьте загрузчик хода на один и тот же вид изображения. Примените приведенный ниже код и просмотрите только видимость диалогового окна прогресса.

  holder.loader.setVisibility(View.VISIBLE); holder.imageView.setVisibility(View.VISIBLE); final ProgressBar progressView = holder.loader; Picasso.with(context) .load(image_url) .transform(new RoundedTransformation(15, 0)) .fit() .into(holder.imageView, new Callback() { @Override public void onSuccess() { progressView.setVisibility(View.GONE); } @Override public void onError() { // TODO Auto-generated method stub } }); } 

Надеюсь, это поможет кому-то! 🙂

Его очень просто показать индикатор выполнения.

Добавьте этот код в действие, чтобы загрузить изображение с индикатором выполнения.

 Picasso.with(this) .load(hoteImageStr) .error(R.drawable.loading) .into(img, new com.squareup.picasso.Callback() { @Override public void onSuccess() { if (progress != null) { progress .setVisibility(View.GONE); } } @Override public void onError() { } }); 

Добавьте это в свой файл макета.

  <RelativeLayout android:id="@+id/hoteldetails_myContainer" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ProgressBar android:id="@+id/hoteldetails_progressBar" style="?android:attr/progressBarStyleSmall" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:visibility="gone" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_marginTop="20dp" android:layout_marginBottom="20dp" /> <ImageView android:id="@+id/hoteldetails_imageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitXY" /> </RelativeLayout> 

Сначала создайте подходящий макет следующим образом:
progress_animation.xml:

 <?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/loading" android:pivotX="50%" android:pivotY="50%"/> 

Добавьте loading.png в drawable
loading.png
Применение:

 Picasso.with(context).load(imageUri).placeholder(R.drawable.progress_animation).into(imgView); 

Вы должны настроить ProgressBar в дополнение к библиотеке Picasso, и вы должны управлять ее видимостью вручную с помощью прослушивателей.

Я использую UniversalImageLoader, и библиотека Picasso должна быть очень похожей.

 private ImageLoadingListener photoSuccess = new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { if(progress != null) progress.setVisibility(View.GONE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if(progress != null) progress.setVisibility(View.GONE); if(mImage != null) mImage.setVisibility(View.VISIBLE); } @Override public void onLoadingCancelled(String imageUri, View view) { } };