我需要提供如图所示的设施。
在底部有 viewpager 时的第一个视图。当用户从右到左交换时,第一个应替换为第二个。我能做到的。但
我的问题是如何将下一个视图的一半放在右侧和左侧的末端。
即第一视图的“第一”和第二视图的“第三”。
我需要提供如图所示的设施。
在底部有 viewpager 时的第一个视图。当用户从右到左交换时,第一个应替换为第二个。我能做到的。但
我的问题是如何将下一个视图的一半放在右侧和左侧的末端。
即第一视图的“第一”和第二视图的“第三”。
你可以在这里使用画廊。在每个项目的画廊内,设置布局参数(宽度)以符合您的要求。
画廊的问题是它不会旋转项目。这意味着一旦你到达列表的末尾,你就不会得到第一个项目。
但也有一个技巧可以克服这一点。您需要做的就是将列表计数设置为非常大的数字 (INT_MAX),并在您的适配器中通过 % 计算小心地返回正确的视图。
这将确保您不会很快到达列表末尾。
我建议查看问题的解决方案Android ViewPager with previous and next pages visible? ) - 使用负页边距 (via ViewPager.setPageMargin
) 将允许您一次查看多个页面(即,在当前页面的左侧和右侧)。
您应该使用 HorizontalScrollView 而不是画廊,因为它已从 jellybeans 版本中弃用。
http://developer.android.com/reference/android/widget/Gallery.html
最后我找到了解决方案。您正在项目中使用视图寻呼机指示器的 TitlePageIndicator。为了达到这个效果,您需要对 TitlePageIndicator 类进行少量修改。
这个想法是将左侧的文本向左移动等于其大小一半的量(可以是任何东西),而右侧的文本向右移动等于其大小一半的量(可以是任何东西) .
为设置左侧文本的边界,使用clipViewOnTheLeft(...)方法,用于设置右侧文本的边界,使用clipViewOnTheRight(...)方法。在这里您需要进行这些修改。
这是您需要做的:
/**
* Set bounds for the right textView including clip padding.
*
* @param curViewBound
* current bounds.
* @param curViewWidth
* width of the view.
*/
private void clipViewOnTheRight(RectF curViewBound, float curViewWidth, int right) {
curViewBound.right = right - mClipPadding + curViewWidth/2;
curViewBound.left = curViewBound.right - curViewWidth;
}
/**
* Set bounds for the left textView including clip padding.
*
* @param curViewBound
* current bounds.
* @param curViewWidth
* width of the view.
*/
private void clipViewOnTheLeft(RectF curViewBound, float curViewWidth, int left) {
curViewBound.left = left + mClipPadding - curViewWidth/2;
curViewBound.right = mClipPadding + curViewWidth;
}
您需要对 TitlePageIndicator.java 文件进行这些更改。