2012-04-18 41 views
14

Làm thế nào để tạo listview như thế này trong Android 1.6 hoặc 2 (vì RenderScript, mà chỉ hoạt động trong vòng 3 hay muộn, nhưng tôi cần danh sách việc cần làm việc trên hầu hết các android):Android: Dọc ListView với hàng chồng chéo

enter image description here

+0

Bất kỳ ý tưởng nào để tiếp cận điều đó? –

Trả lời

9

Tôi đã sử dụng Camera.setTranslate(x, 0, z) trong drawChild, vị trí x đã thay đổi cho ảo hóa xoay và z để chồng chéo. Sau đó, có vấn đề với chồng chéo, bởi vì mục cuối cùng là trên đầu và đầu tiên trên lớp dưới cùng. Vì vậy, trong phương thức onCreate() được gọi là this.setChildrenDrawingOrderEnabled(true) và ghi đè số protected int getChildDrawingOrder (int childCount, int i) {} nơi tôi có thể thay đổi thứ tự cho các hàng ở giữa và sau đó. Ý tưởng này đã được đưa ra bởi Renard, người đề nghị tôi trong bài viết khác của tôi về gần như cùng một điều here.

My getChildDrawingOrder (int, int) thực hiện để có được chồng chéo tôi cần:

@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; 

} 

Tôi hy vọng bài viết này sẽ giúp ai đó trong tương lai

Ảnh chụp màn hình thực sự là gần như giống như tôi đã đề cập trong câu hỏi của tôi . Tôi đã sử dụng alpha, vì vậy các mục được xếp chồng có thể nhìn thấy một chút:

+0

@pengwang bản trình diễn nào? bạn có nghĩa là ảnh chụp màn hình của kết quả? –

+0

vâng, bạn có quyền, bạn có thể chia sẻ ảnh chụp màn hình của bạn về mã kết quả – pengwang

+0

@PooLaS vui lòng cung cấp cho tôi liên kết ưu tiên hoặc đăng lớp học của bạn để hiểu điều này để thực hiện. –

Các vấn đề liên quan