6

我需要提供如图所示的设施。

在此处输入图像描述

第二视图

在底部有 viewpager 时的第一个视图。当用户从右到左交换时,第一个应替换为第二个。我能做到的。但
我的问题是如何将下一个视图的一半放在右侧和左侧的末端。

即第一视图的“第一”和第二视图的“第三”。

4

4 回答 4

6

你可以在这里使用画廊。在每个项目的画廊内,设置布局参数(宽度)以符合您的要求。

画廊的问题是它不会旋转项目。这意味着一旦你到达列表的末尾,你就不会得到第一个项目。

但也有一个技巧可以克服这一点。您需要做的就是将列表计数设置为非常大的数字 (INT_MAX),并在您的适配器中通过 % 计算小心地返回正确的视图。

这将确保您不会很快到达列表末尾。

于 2012-08-14T10:09:48.557 回答
5

我建议查看问题的解决方案Android ViewPager with previous and next pages visible? ) - 使用负页边距 (via ViewPager.setPageMargin) 将允许您一次查看多个页面(即,在当前页面的左侧和右侧)。

于 2012-09-17T00:16:31.867 回答
4

您应该使用 Horizo​​ntalScrollView 而不是画廊,因为它已从 jellybeans 版本中弃用。

http://developer.android.com/reference/android/widget/Gallery.html

于 2012-08-14T10:15:44.287 回答
2

最后我找到了解决方案。您正在项目中使用视图寻呼机指示器的 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 文件进行这些更改。

于 2012-09-19T19:06:48.243 回答