2017-07-30 72 views
0

的一半繪製順序我有以下ViewPager反向在ViewPager

Screenshot

我試圖建立一個覆蓋流視圖。這意味着ViewPager中視圖的位置和大小會根據觸摸輸入而改變。

除了視圖的繪製順序以外,一切正常,我的實現正常。

我可以打電話pager.setPageTransformer(false,PageTransformer()),看起來像在上面的圖像,或setPageTransformer(true, PageTransformer())這將顛倒繪圖順序。

問題是,我需要中間視圖(綠色)在它的鄰居(藍色,灰色)前面。

我看了一些關於view.bringToFront()的帖子,但是我找不到解決方法。 中間到前端的解決方案將會很酷,但是這隻有在一次可見三個視圖的情況下才有效。在五種觀點中,第五種觀點仍然與第四種觀點重疊。 (令人困惑,不是嗎?^^)

順便說一句,我的minSdk是16到18,所以海拔(棒棒糖)是不可能的。

這是我目前的PageTransformer

class PageTransformer() : ViewPager.PageTransformer { 
    val MIN_SCALE = 0.75f 

    override fun transformPage(view: View, position: Float) { 
     val pageWidth = view.width 
     val pageHeight = view.height 
     var vertMargin = pageHeight * (1 - MIN_SCALE)/2 
     var horzMargin = pageWidth * (1 - MIN_SCALE)/2 
     view.scaleX = MIN_SCALE 
     view.scaleY = MIN_SCALE 
     if (position < -2) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.translationX = horzMargin - vertMargin/2 
     } else if (position <= 2) { // [-1,1] 
      // Modify the default slide transition to shrink the page as well 
      val scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)) 
      vertMargin = pageHeight * (1 - scaleFactor)/2 
      horzMargin = pageWidth * (1 - scaleFactor)/2 
      if (position < 0) { 
       view.translationX = horzMargin - vertMargin/2 
      } else { 
       view.translationX = -horzMargin + vertMargin/2 
      } 
      // Scale the page down (between MIN_SCALE and 1) 
      view.scaleX = scaleFactor 
      view.scaleY = scaleFactor 
      view.rotationY = position * -30 
     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.translationX = -horzMargin + vertMargin/2 
     } 
    } 
} 

總結一下,我需要一個ViewPager可逆轉當前項目後,其繪製順序。

注:我已經嘗試了每個可用的庫,但沒有任何工作。

我希望有一個天才誰可以幫我:)

+0

你能的什麼是您需要的鉛筆素描?我不太明白它 – Mani

+0

灰色的視圖重疊綠色的一個bevause繪圖順序是從左到右。我想要一箇中間的訂單。 – Appyx

+0

嘿,你有沒有找到解決辦法? –

回答

0

可以覆蓋viewpager類的getChildDrawingOrder: 像這樣

@Override 
protected int getChildDrawingOrder (int childCount, int i) { 
    int j = getCurrentItem(); 
    if (i == j) { 
     return childCount - 1; 
    } 

    if (i == childCount - 1) { 
     return j; 
    } 

    if (j == 0) { 
     if (i == 1) { 
      i = 2; 
     } else if (i == 2) { 
      i = 1; 
     } 
    } 

    return super.getChildDrawingOrder (childCount, i); 
} 
+0

在viewpager的動畫過程中不起作用... – Appyx