Подтвердить что ты не робот

Android Picasso - стиль создания закладок и ошибок

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

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

4b9b3361

Ответ 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 к рисунку
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) {
    }
};