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

时间:2013-06-27 14:00:12

标签: android android-viewpager android-canvas

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

在Activity中,我使用不同的参数实例化一个新视图:

this.mRenderCircleView = new RenderCircleView(this, resultList, showDemo);

resultList包含一个ArrayList<ArrayList<String>>,其圆圈在RenderCircleView中绘制。 我希望在这种情况下实现ViewPager,如果ArrayList(&gt; 5)中有很多圈子项,并且由于性能问题,以前创建和加载所有视图将是不好的。所以我最好的选择是FragmentStatePagerAdapter。这应该是交互式内容的更好解决方案。

但我无法弄清楚它是如何运作的。片段的数量取决于给定ArrayList的大小除以应该在RenderCircleView中绘制的元素的数量。例如,ArrayList大小为20,每页应绘制5个circleObjects,然后我需要4个页面(片段)。

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

1 个答案:

答案 0 :(得分:2)

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

你可以这样解决:

您的Activity使用ViewPager对象托管布局。 ViewPager托管了一个Fragments列表,让我们将它们命名为CircleFragment。 CircleFragment具有RenderCircleView布局。

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

在您的活动中:创建您需要的CircleFragments数量,并将它们放入您将用于ViewPager的FragmentStatePagerAdapter中。

编辑(关于将ArrayList<ArrayList<String>>放入Fragment.setArguments(Bundle)

ArrayList实现Serializable接口。如果你看一下Bundle,你可以在其中加入Serializable! Java负责序列化它。一块蛋糕:))

Bundle.putSerializable(String key, Serializable value) Bundle.getSerializable(String key)

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

inflater就在那里以防万一(!)你需要它。只需离开inflater,实例化RenderCircleView(就像您在原始代码中所做的那样)并在Fragment.onCreateView中返回。您可能希望在其周围包裹LinearLayoutRelativeLayout,以便更好地控制RenderCircleView的位置。