Android 用于自定义画布对象视图的ViewPager

Android 用于自定义画布对象视图的ViewPager,android,android-viewpager,android-canvas,Android,Android Viewpager,Android Canvas,我正在寻找一个解决方案来实现自定义视图的ViewPager。有很多关于ViewPager的教程,可以扩展xml布局,但是我找不到一个自定义视图的示例。 我的自定义视图类在画布上绘制多个对象(周围有文本的圆圈)。 通过实现OnTouchListener,可以移动和缩放对象。 对象是动态生成的(文本来自ArrayList) 在活动中,我用不同的参数实例化了一个新视图: this.mRenderCircleView = new RenderCircleView(this, resultList, sh

我正在寻找一个解决方案来实现自定义视图的ViewPager。有很多关于ViewPager的教程,可以扩展xml布局,但是我找不到一个自定义视图的示例。 我的自定义视图类在画布上绘制多个对象(周围有文本的圆圈)。 通过实现OnTouchListener,可以移动和缩放对象。 对象是动态生成的(文本来自ArrayList)

在活动中,我用不同的参数实例化了一个新视图:

this.mRenderCircleView = new RenderCircleView(this, resultList, showDemo);
resultList包含一个
ArrayList
,其中包含要在RenderCircView中绘制的圆。 在这种情况下,我想实现ViewPager,如果ArrayList(>5)中有很多圆形项目,并且由于性能问题,以前创建和加载所有视图是不好的。所以我认为最好的选择是碎纸机。这应该是交互式内容的更好解决方案

但我不知道它是怎么工作的。片段的计数将取决于给定ArrayList的大小除以RenderCircView中应绘制的元素的计数。例如,ArrayList大小为20,每个页面上应绘制5个圆形对象,然后我需要4个页面(片段)


在这种情况下,使用ViewPager最简单的方法是什么?

如果我理解正确,结果列表中的每个条目都代表一个圆圈。 使用FragmentStatePagerAdapter确实是个好主意

你可以这样解决:

您的活动承载一个带有ViewPager对象的布局。ViewPager承载一个片段列表,我们将其命名为CircleFragment。CircleFragment具有带有RenderView的布局

实例化CircleFragment时,将ArrayList放入Fragment.setArguments(Bundle)中,并在CircleFragment视图膨胀时检索这些参数。(请参见关于放置arraylist的编辑)

在您的活动中:创建所需的圈片段数量,并将它们放入FragmentStatePagerAdapter中,您将用于ViewPager

编辑(关于放置
ArrayList

编辑2(关于使用
Fragment.onCreateView()


充气机就在那里,以防(!)您需要它。只需让充气机保持原样,实例化
渲染视图
(就像您在原始代码中所做的那样)然后在
片段中返回它。一旦创建视图
。你可能想在它周围包装一个
线性布局
相对布局
,以便更好地控制你的
渲染视图的位置

是的,这正是我想要实现的。我会尝试实现它并将结果发布在这里。我不知道我能做到使用setArguments检索数据。如何放置ArrayList类型的参数,Bundle不支持此类型。好的,谢谢!但是在此上下文中,如何在
Fragment
类的
onCreateView
中使用
充气器呢?充气器参数仅匹配布局xml的id,而不是自定义的id查看
rendercreview
。我遵循这一点,充气机就在那里,以防(!)您需要它。只需让充气机保持原样,实例化
rendercreview
(就像您在原始代码中所做的那样)然后在
片段中返回它。一旦创建视图
。你可能想在它周围包装一个
线性布局
相对布局
,以便更好地控制你的
渲染视图
的位置。太棒了……终于可以工作了。非常感谢!我一直在努力让充气机工作……但我想是因为有了ViewPager触摸特定对象时,无法在屏幕上添加弹出对话框!?