在不同的 ViewPagers 之间切换

Switch between different ViewPagers

我正在尝试在不同的 ViewPagers 之间切换(例如使用按钮)。它基本上是一个用于光学比较不同版本图像的小工具。现在我只实现了一个嵌套在 RelativeLayout 中的单个 ViewPager(需要其他布局)。内容由自定义的 PagerAdapter 填充。

关于如何在多个 ViewPager 之间来回切换的任何想法?

MainActivity.java

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager mViewPager = (ViewPager) findViewById(R.id.view_pager);
        mViewPager.setAdapter(new SheetPagerAdapter());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

SheetPagerAdapter.java

public class SheetPagerAdapter extends PagerAdapter {
    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        SheetView sheetView = new SheetView(container.getContext(), position);
        container.addView(sheetView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
        return sheetView;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}

SheetView.java

public class SheetView extends RelativeLayout {

    private final String[] images = {
            "page01.jpg",
            "page02.jpg",
            "page03.jpg",
            "page04.jpg"
    };
    private SubsamplingScaleImageView scaleImageView;

    public SheetView(Context context, int page) {
        super(context);
        scaleImageView = new SubsamplingScaleImageView(context);
        this.addView(scaleImageView, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        scaleImageView.setImage(ImageSource.asset(images[page]));
    }
}

我最终使用了一个 FrameLayout 和多个 ViewPagers 作为子元素。 只有 "active" 布局设置为可见:

public class MainActivity extends ActionBarActivity {
    private ArrayList<ViewPager> viewPagerList = new ArrayList<>();
    private final int NUM_LAYERS = 10;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FrameLayout container = (FrameLayout) findViewById(R.id.frame_container);

        // Add ViewPagers and fill ArrayList
        for(int i = 0; i < NUM_LAYERS; i++) {
            ViewPager vp = new ViewPager(this);
            vp.setVisibility(View.INVISIBLE); // Make invisible
            viewPagerList.add(vp);
            container.addView(vp);
        }

        // Make first ViewPager visible
        viewPagerList.get(0).setVisibility(View.VISIBLE);
    }

    // Switch to other ViewPager
    public void setViewPager(int number) {
        for (ViewPager vp : viewPagerList) {
            vp.setVisibility(View.INVISIBLE);
        }
        viewPagerList.get(number).setVisibility(View.VISIBLE);
    }
}