【问题标题】:List view with custom view items with partially overlaps (Android)具有部分重叠的自定义视图项的列表视图 (Android)
【发布时间】:2012-11-25 13:34:01
【问题描述】:

我想在 Android 中实现一个包含一些自定义视图的列表。 我的问题是我希望视图一个接一个地放置,它们之间有一点重叠。就像在以下架构中:

我还想控制这种重叠,当用户点击其中一个项目时,它们会彼此分开。

我试图扩展 ListView 但它似乎很模糊,有什么建议吗?

编辑: 这可以更清楚:

我通过将分隔线高度设置为 -50dp 来做到这一点。 这正是我想要实现的目标,但不知何故它并没有反映在我的应用上。

【问题讨论】:

    标签: android android-layout android-listview android-ui


    【解决方案1】:

    我设法通过使用具有单个相对布局的滚动视图作为孩子来实现这一点。 然后我通过定义规则和边距来动态放置视图:

    for (int i = 0; i < 30; i++) {
            TextView tv = new TextView(context);
            tv.setText("Text \n Text" + i);
    
            tv.setBackgroundColor(i % 2 == 0 ? Color.RED : Color.GREEN);
    
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            lp.leftMargin = 0;
            lp.topMargin = (i * 45);
            rl.addView(tv, lp);
    }
    

    稍后,您可以通过更改它们的 y 值来控制子视图的位置(例如:如果要添加动画)。

    这是最终结果:

    【讨论】:

    • ScrollView 不支持视图回收。因此,如果性能是一个因素,那么它对于多个视图来说毫无用处。
    • 我已经为基于 ScrollView 的视图实现了视图回收。
    • @DanielL. 你愿意在 github 或任何你喜欢的地方分享你的代码吗?
    【解决方案2】:

    这可以通过使用Camera.setTranslate 函数来实现。类似问题请见Android: Vertical ListView with overlaped rowsAndroid: vertical 3d listview(附解决方案)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2013-03-14
      相关资源
      最近更新 更多