【问题标题】:Issue on ViewPager by usng Picasso使用毕加索在 ViewPager 上的问题
【发布时间】:2018-03-10 03:02:43
【问题描述】:

我有一个代码,其中图像将显示在 ViewPager 上,并且图像将来自服务器。我正在使用 Picasso 库,但是当我使用 Picasso 时,图像不会出现在 ViewPager 上。 Array IMAGES 具有我在加载方法中添加的图像 URL,请检查我的代码并向我提出问题。下面是 XML 和 java 代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="1dip" >

<ImageView
    android:id="@+id/image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:adjustViewBounds="true"
    android:layout_gravity="right|top" />

<ProgressBar android:id="@+id/progressBar"
    android:progressDrawable="@drawable/loader_image"
    android:layout_width="fill_parent" android:layout_height="8dip"
    style="?android:attr/progressBarStyleHorizontal"
    android:indeterminateOnly="false"
    android:max="100">
</ProgressBar>

public class SlidingImage_Adapter extends PagerAdapter {
private ArrayList<String> IMAGES;
private LayoutInflater layoutInflater;
private Context context;
ProgressBar progressBar;
private ImageLoader imageLoader;

public SlidingImage_Adapter(Context context, ArrayList<String> IMAGES) {
    this.context = context;
    this.IMAGES=IMAGES;
    for(int i=0;i<IMAGES.size();i++)
        layoutInflater = LayoutInflater.from(context);
}


@Override
public Object instantiateItem(ViewGroup view, int position) {
  //  ImageView imageLayout = (ImageView) inflater.inflate(R.layout.screen_slide_fragment, view, false);
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View item_view = layoutInflater.inflate(R.layout.screen_slide_fragment, view, false);
    ImageView imageView = (ImageView) item_view.findViewById(R.id.image);
    Log.e("instantiateItem: ",IMAGES.get(position) );
    Picasso.with(context)
            .load(IMAGES.get(position))
            .error(R.drawable.girl)
            .placeholder(R.drawable.loader_image)
            .fit()
            .centerCrop()
            .into(imageView);
    return item_view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

@Override
public int getCount() {
    return IMAGES.size();
}


@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);

}

@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}

@Override
public Parcelable saveState(){
    return null;
   }
  }   

【问题讨论】:

  • 为什么需要这个代码? for(int i=0;i&lt;IMAGES.size();i++) layoutInflater = LayoutInflater.from(context);是多余的,删除它
  • 我还想在 ImagesView 上添加进度条,这就是我使用它的原因。
  • 你能分享一下吗 Log.e("instantiateItem: ",IMAGES.get(position) );价值?
  • 日志是 instantiateItem:: maangal.com/photos/…

标签: android


【解决方案1】:

试试这个。在代码中添加 view.addView(item_view);

@Override
public Object instantiateItem(ViewGroup view, int position) {
  //  ImageView imageLayout = (ImageView) inflater.inflate(R.layout.screen_slide_fragment, view, false);
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View item_view = layoutInflater.inflate(R.layout.screen_slide_fragment, view, false);
    ImageView imageView = (ImageView) item_view.findViewById(R.id.image);
    Log.e("instantiateItem: ",IMAGES.get(position) );
    Picasso.with(context)
            .load(IMAGES.get(position))
            .error(R.drawable.girl)
            .placeholder(R.drawable.loader_image)
            .fit()
            .centerCrop()
            .into(imageView);

    //you need to add this line
    view.addView(item_view);

    return item_view;
}

显示 progressBar 使用下面的代码并编译它

compile 'com.github.bumptech.glide:glide:3.7.0'

进入应用程序 gradle 文件

public class SlidingImage_Adapter extends PagerAdapter {
private ArrayList<String> IMAGES;
private LayoutInflater layoutInflater;
private Context context;
ProgressBar progressBar;
private ImageLoader imageLoader;

public SlidingImage_Adapter(Context context, ArrayList<String> IMAGES) {
    this.context = context;
    this.IMAGES=IMAGES;
}


@Override
public Object instantiateItem(ViewGroup view, int position) {
  //  ImageView imageLayout = (ImageView) inflater.inflate(R.layout.screen_slide_fragment, view, false);
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View item_view = layoutInflater.inflate(R.layout.screen_slide_fragment, view, false);
    ImageView imageView = (ImageView) item_view.findViewById(R.id.image);
    Log.e("instantiateItem: ",IMAGES.get(position) );

    ProgressBar spinner = (ProgressBar) item_view.findViewById(R.id.progressBar);

    //This will help to load image and show progressBar
    imageLoader = new ImageLoader(imageView, spinner, IMAGES.get(position));

    //you need to add this line
    view.addView(item_view);

    return item_view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

@Override
public int getCount() {
    return IMAGES.size();
}


@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);

}

@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}

@Override
public Parcelable saveState(){
    return null;
   }



    public class ImageLoader{

        public ImageLoader(ImageView imageView, final ProgressBar progressBar, String imagePath){

            Glide.with(context).load(imagePath).listener(new RequestListener<String, GlideDrawable>() {

                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                    //handle error
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    progressBar.setVisibility(View.GONE);
                    return false;
                }
            }).into(imageView);
        }
    }

}

xml文件代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:padding="1dip" >

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:max="100"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:layout_gravity="right|top"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

【讨论】:

  • 好吧,我使用了这段代码,图像即将到来,但图像的某些部分正在剪切,而且我需要进度条,直到图像无法加载
  • 好吧,我已经删除了 fit 和 centerCrop 方法,图像的尺寸也随之而来,但进度条没有显示
  • 对于progressBar你可以refer this link
  • 如果您得到了答案,请标记此答案以帮助他人
  • 我使用了那个代码,当我编辑它时有很多错误请你把编辑过的带有进度条的代码发给我谢谢
猜你喜欢
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2021-04-22
  • 1970-01-01
相关资源
最近更新 更多