【问题标题】:How to efficiently add multiple images on ViewPager如何在 ViewPager 上高效地添加多个图像
【发布时间】:2014-12-26 03:14:07
【问题描述】:

这是我学习安卓应用的第三天。目前使用,android studio,我的问题与 ViewPager 类有关。下面是我的片段和 viewPager 类的代码。

ViewPager 和适配器类:

包 com.syedabdullah.syed.quran_memorization_application;

导入 android.content.pm.ActivityInfo;导入android.os.Bundle; 导入android.support.v4.app.Fragment;进口 android.support.v4.app.FragmentActivity;进口 android.support.v4.app.FragmentManager;进口 android.support.v4.app.FragmentStatePagerAdapter;进口 android.support.v4.view.PagerAdapter;进口 android.support.v4.view.ViewPager;导入android.view.Window;

公共类 ViewPagerActivity 扩展 FragmentActivity {

ViewPager myPager;
PagerAdapter myAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Remove Title bar
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    //force portrait orientation. (No landscape orientation).
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.activity_view_pager);

    myPager = (ViewPager) findViewById(R.id.pager);
    myAdapter = new adapterClass(getSupportFragmentManager());
    myPager.setAdapter(myAdapter);
}

/*
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_view_pager, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
} */

/*Nested class needed for custom Adapter */
private class adapterClass extends FragmentStatePagerAdapter {

    int[] images = new int[3];
    images[0] = R.drawable._2;

    String extract = "R.drawable._";



    public adapterClass(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        //initialiseArray(images);
        return viewPageFragment.newInstance(position, images[position]);
    }

    @Override
    public int getCount() {
        return images.length;
    }

    private int[] initialiseArray(int[] array) {
        for (int i = 2; i <= array.length + 1; i++) {
            extract += i;
            array[i-2] = Integer.parseInt(extract);
        }
        return array;
    }
}

}

片段类:

包 com.syedabdullah.syed.quran_memorization_application;

/** * 由 syed 于 2014 年 12 月 25 日创建。 */

导入android.os.Bundle;导入android.support.v4.app.Fragment; 导入 android.view.LayoutInflater;导入android.view.View;进口 android.view.ViewGroup;导入android.widget.ImageView;

/** * 一个包含简单视图的占位符片段。 */

公共类 viewPageFragment 扩展片段 {

public viewPageFragment() {
}

public static viewPageFragment newInstance(int position, int imageId) {
    viewPageFragment myFrag = new viewPageFragment();
    Bundle myBundle = new Bundle();

    myBundle.putInt("imagePosition", position);
    myBundle.putInt("imageId", imageId);
    myFrag.setArguments(myBundle);

    return myFrag;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_view_pager,
            container, false);

    int imageId = getArguments().getInt("imageId");
    ImageView myImageView = (ImageView) rootView.findViewById(R.id.imageView);
    myImageView.setImageResource(imageId);

    return rootView;
} }

目前我的initialiseArray 不起作用。如果我按如下方式初始化我的数组:

int[] images = {R.drawable._2, R.drawable._3, R.drawable._4};

它将在我的 ViewPager 中显示适当的图像。但是,我有 500 多张图像,如果我这样做,将需要很长时间。这就是为什么我想知道是否有更简单的方法来插入这些图像。我所有的图像都按升序命名。所以我的第一张图片被命名为 ._2 一直到 ._550 之类的。

还有 1 个问题。 如果我们可以制作一个像

这样的数组

int[] 图像 = {R.drawable._2, R.drawable._3, R.drawable._4};

那怎么不行呢?

int[] 图像 = 新的 int[3]; 图像[0] = R.drawable._2;

谁能解释一下?谢谢。

【问题讨论】:

  • 唯一的问题是我需要我所有的图片来覆盖整个页面,不知道画廊是否可以做到(只做了 3 天的 android。但我可能会检查一下。)
  • 那么快问一下,我的应用程序将要求我单独查明这些图像中的某些位置。画廊里也可以吗?

标签: java android android-layout android-fragments


【解决方案1】:

我想出了一种方法可以有效地将大量页面添加到 ViewPager。只需向可能面临类似问题的任何其他新人发布答案。我试图做的是在应用程序内存中添加数百张图像,这是非常非常低效的。假设完成的方式是您必须下载图像(使用 AsynTask 或 DownloadManger)并将它们存储在外部存储中,然后您应该从那里提取图像。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多