如何使用滑动将图像下载到drawable中?

时间:2016-08-22 03:23:25

标签: android android-glide

我使用ViewPager学习了Image Slider。为此,我希望图像是动态的。滑翔很容易,但我想我没有正确使用它。 这就是我想要做的事情。

//Initialize by default Images
private static final Integer[] IMAGES = {R.drawable.image1,R.drawable.image2};

// Load images into Drawables using Glide 
        Glide.with(this)
                .load("https://google.com/someImage1.jpg")
                  .error(R.drawable.image1)
                  .into(R.drawable.image1);
        Glide.with(this)
                .load("https://google.com/someImage2.jpg")
                  .error(R.drawable.image2)
                  .into(R.drawable.image2);

// Set Again
 IMAGES[0]= R.drawable.image1;
 IMAGES[1]= R.drawable.image2;

但是.into(java.lang.Integer)没有定义,我知道。但我想要一些可以解决我问题的东西。我有滑块视图。在那里我需要传递图像作为drawables或类似的东西。图像加载将由适配器承载。据我所知,我无法直接加载。有没有办法在drawable中加载滑行图像。

此外,在本地捕获或存储图像的最佳方法是什么,这样如果没有互联网连接,滑块仍可顺利工作。

这是我的Adapater

public class MainPageSlideImageAdapter extends PagerAdapter {
    private ArrayList<Integer> IMAGES;
    private LayoutInflater inflater;
    private Context context;


    public MainPageSlideImageAdapter(Context context,ArrayList<Integer> IMAGES) {
        this.context = context;
        this.IMAGES=IMAGES;
        inflater = LayoutInflater.from(context);
    }

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

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

    @Override
    public Object instantiateItem(ViewGroup view, int position) {
        View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false);

        assert imageLayout != null;
        final ImageView imageView = (ImageView) imageLayout
                .findViewById(R.id.image);

        imageView.setImageResource(IMAGES.get(position));
        view.addView(imageLayout, 0);

        return imageLayout;
    }

    @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;
    }

}

3 个答案:

答案 0 :(得分:1)

您必须在.into()中提供视图,请查看示例

样本布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/myImage"
        android:layout_width="100dp"
        android:layout_height="100dp"/>



</LinearLayout>

<强>更新

 @Override
    public Object instantiateItem(ViewGroup view, int position) {
        View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false);

        assert imageLayout != null;
        final ImageView imageView = (ImageView) imageLayout
                .findViewById(R.id.image);

        Glide.with(this)
                .load(IMAGES.get(position))
                  .error(R.drawable.image2)
                  .into(imageView);
        //imageView.setImageResource();
        view.addView(imageLayout, 0);

        return imageLayout;
    }

答案 1 :(得分:0)

imageView.setImageResource只需要用Glide调用替换。

或者为要下载的Url使用StringAdapter of Strings。我认为你不能覆盖&#34;来自Glide的抽签

答案 2 :(得分:-1)

而不是将图像存储在内存中,而是存储地址。

private static final String[] IMAGES = {"https://google.com/someImage1.jpg", "https://google.com/someImage2.jpg"};

然后在instantiateItem

时加载图片
@Override
public Object instantiateItem(ViewGroup view, int position) {
    View imageLayout = inflater.inflate(R.layout.main_page_slidingimages, view, false);
    assert imageLayout != null;
    final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
    Glide.with(context)
         .load(IMAGES.get(position))
         .error(R.drawable.image1)
         .into(imageView);    
    view.addView(imageLayout, 0);    
    return imageLayout;
}

此外,glide还提供内存和磁盘缓存。这意味着即使没有互联网,它也应该能够显示图像。