java - 如何使用 Picasso 在 Android 的 ViewPager 中加载图像

标签 java android

无论如何,我不确定如何命名标题。我目前正在将带有 TabLayoutViewPager 膨胀到这样的对话框中:

case R.id.btnInfo:
            Dialog dialogpager;
            dialogpager = new Dialog(MyActivity.this);
            dialogpager.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialogpager.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            dialogpager.setContentView(R.layout.dialog_viewpager);
            dialogpager.setCanceledOnTouchOutside(false);

            MyPageAdapter adapter = new MyPageAdapter(MyActivity.this);
            ViewPager pager = (ViewPager) dialogpager.findViewById(R.id.viewpager);
            pager.setOffscreenPageLimit(3);
            pager.setAdapter(adapter);


            TabLayout tabLayout = (TabLayout) dialogpager.findViewById(R.id.mTab_ID);
            tabLayout.setTabTextColors(ContextCompat.getColorStateList(getApplicationContext(), R.color.black));
            tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.plus_sign_color));

            tabLayout.setupWithViewPager(pager);
            tabLayout.addOnTabSelectedListener(listener(pager));


            WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
            Window window = dialogpager.getWindow();
            lp.copyFrom(window.getAttributes());
            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
            lp.height = WindowManager.LayoutParams.MATCH_PARENT;
            window.setAttributes(lp);


            dialogpager.show();

            return;

        default:

这是我的适配器:

public class MyPageAdapter extends PagerAdapter {

Context mContext;
int resId = 0;
private String tabTitles[] = new String[]{"Controls", "Video Export", "Image Export"};


public MyPageAdapter(Context context) {
    mContext = context;
}


public Object instantiateItem(ViewGroup collection, int position) {

    LayoutInflater inflater = LayoutInflater.from(mContext);
    switch (position) {
        case 0:
            resId = R.layout.information_fragment_1;
            break;
        case 1:
            resId = R.layout.information_fragment_2;
            break;
        case 2:
            resId = R.layout.information_fragment_3;
            break;
    }
    ViewGroup layout = (ViewGroup) inflater.inflate(resId, collection, false);
    collection.addView(layout);
    return layout;
}

@Override
public int getCount() {
    return 3;
}

@Override
public CharSequence getPageTitle(int position) {
    return tabTitles[position];
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == arg1;
}
}

这工作正常,但问题是我在每个布局中(在 ImageView 内)显示大图像,导致内存不足问题。我想使用像 piccaso 这样的库,但是如果我只是膨胀 View /布局,我该如何使用 picasso 设置图像?

最佳答案

那么,您正在此处创建布局:

ViewGroup layout = (ViewGroup) inflater.inflate(resId, collection, false);
collection.addView(layout);
return layout;

所以您只需要获取您的 ImageView 实例并将适当的图像加载到其中。

例如:

ViewGroup layout = (ViewGroup) inflater.inflate(resId, collection, false);

ImageView imageView = (ImageView) layout.findViewById(R.id.id_of_your_imageview);
Picasso.with(mContext).load(R.drawable.id_of_your_image_resource).into(imageView);

collection.addView(layout);
return layout;

如果您最初在布局 XML 中静态设置图像,请不要忘记删除那些 android:src 属性(因为您将从代码中动态设置它们)。

关于java - 如何使用 Picasso 在 Android 的 ViewPager 中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195106/

相关文章:

java - 将 protobuf 3 与 Hive 和 Elephant-Bird 结合使用

android - ndk-stack 获取不到全栈

java - LinkedHashMap entrySet 的顺序未保存在流中 (Android)

android - 如何在应用栏中添加 Assets 图像作为 Flutter 应用程序中的操作图标?

android - 如何使用多对多 sqlite 关系为 notifyChange 设计内容 URI?

java - android 中允许使用 java 库吗?

java - 理解java代码中的数组

java - Hibernate - 强制父类和子类之间的内部连接

java - 代码重构作业?

java - 错误:NumberFormatException unable to parse '20'