Android Picasso - стиль создания закладок и ошибок
Я использую библиотеку Picasso для загрузки изображений из сети. Я просто задаюсь вопросом, могу ли я использовать диалог прогресса или изображение GIF в качестве владельца места? Также любая идея о том, как сделать изображение держателя места меньше (и поместиться в центре), чем загруженное фактическое изображение?
Я попытался пройти через образцы, но не повезло. Кто-нибудь, кто получил это, чтобы работать?
Ответы
Ответ 1
Вы можете использовать образ заполнителя с помощью *.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() {
}
}
Надеюсь, это имеет смысл!
Ответ 2
Я реализовал диалог прогресса до загрузки изображения и его очень простой. Возьмите 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
}
});
}
Надеюсь, это поможет кому-то!:)
Ответ 3
Его очень просто показать индикатор выполнения.
Добавьте этот код в действие, чтобы загрузить изображение с индикатором выполнения.
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>
Ответ 4
сначала создайте макет, подобный этому:
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
к рисунку
Применение:
Picasso.with(context).load(imageUri).placeholder(R.drawable.progress_animation).into(imgView);
Ответ 5
Вам необходимо настроить 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) {
}
};