【问题标题】:Swap android view交换安卓视图
【发布时间】:2012-08-14 09:32:07
【问题描述】:

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

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

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

【问题讨论】:

  • 更好地使用自定义视图

标签: android


【解决方案1】:

您可以在此处使用图库。每个项目的内部画廊,设置布局参数(宽度)以适应您的要求。

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

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

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

【讨论】:

  • Aww... 太可悲了.. 那么我们将不得不自己做所有的视图适配器。
【解决方案2】:

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

【讨论】:

  • 但问题是我们不能将两个viewpager放在单个活动或布局中。
  • @user861973 - 啊,你的帖子说'底部有 viewpager',因此我认为你已经在使用 ViewPager 作为底部滚动条而不是主要内容。在这种情况下,我可能会建议使用ViewPagerIndicator,特别是TabPageIndicator。在这种情况下,您可能只想在布局本身中使用负边距,以使侧选项卡图像仅显示一半。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 您能否发表任何评论,无论此解决方案是否适合您?
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多