Android:具有重叠行的垂直 ListView

Posted

技术标签:

【中文标题】Android:具有重叠行的垂直 ListView【英文标题】:Android: Vertical ListView with overlapped rows 【发布时间】:2012-04-30 00:12:46 【问题描述】:

如何在 android 1.6 或 2 中创建这样的列表视图(因为 renderscript,它只能在 3 或更高版本中工作,但我需要 list 才能在几乎所有的 android 上工作):

【问题讨论】:

有什么办法可以解决这个问题吗? 【参考方案1】:

我在 drawChild 中使用了Camera.setTranslate(x, 0, z),其中更改了旋转虚拟化的 x 位置和重叠的 z 位置。然后有重叠的问题,因为最后一个项目在顶部,第一个在底层。因此,在onCreate() 方法中调用this.setChildrenDrawingOrderEnabled(true) 并覆盖protected int getChildDrawingOrder (int childCount, int i) ,我可以在其中更改中间行和后面行的顺序。 这个想法是由 Renard 提出的,他在我的其他帖子中向我建议了几乎相同的事情 here。

我的 getChildDrawingOrder(int, int) 实现需要重叠:

@Override
protected int getChildDrawingOrder (int childCount, int i) 
    int centerChild = 0;
    //find center row
    if ((childCount % 2) == 0)  //even childCount number
        centerChild = childCount / 2; // if childCount 8 (actualy 0 - 7), then 4 and 4-1 = 3 is in centre.      
        int otherCenterChild = centerChild - 1;
        //Which more in center?
        View child = this.getChildAt(centerChild);
        final int top = child.getTop();
        final int bottom = child.getBottom();
        //if this row goes through center then this
        final int absParentCenterY = getTop() + getHeight() / 2;
        //Log.i("even", i + " from " + (childCount - 1) + ", while centerChild = " + centerChild);
        if ((top < absParentCenterY) && (bottom > absParentCenterY)) 
            //this child is in center line, so it is last
            //centerChild is in center, no need to change
         else 
            centerChild = otherCenterChild;
        
    
    else //not even - done
        centerChild = childCount / 2;
        //Log.i("not even", i + " from " + (childCount - 1) + ", while centerChild = " + centerChild);
    

    int rez = i;
    //find drawIndex by centerChild
    if (i > centerChild) 
        //below center
        rez = (childCount - 1) - i + centerChild;
     else if (i == centerChild) 
        //center row
        //draw it last
        rez = childCount - 1;
     else 
        //above center - draw as always
        // i < centerChild
        rez = i;
    
    //Log.i("return", "" + rez);
    return rez;


希望这篇文章对以后的人有所帮助

屏幕截图实际上与我在问题中提到的几乎相同。我用的是 alpha,所以叠加的项目有点透视:

【讨论】:

@pengwang 什么演示?你是说结果截图? 是的,你是对的,你能分享你的结果代码截图 @PooLaS 请给我偏好链接或发布您的课程以了解要实现的这个东西。 你能解释一下你是如何“使用”Camera.setTranslate(x, 0, z) 嗨@PooLaS你能分享完整的示例代码吗

以上是关于Android:具有重叠行的垂直 ListView的主要内容,如果未能解决你的问题,请参考以下文章

根据android中的长度文本更改listview行的高度

如何在 ListView 中正确更改特定行的背景颜色? (安卓)

Android:MainActivity/Fragment 中的 ListView / GridView 重叠工具栏

底部软NavigationBar与我的ListView重叠

Android ListView.setEmptyView

android中ListView行的动态高度