我有以下 ViewPager
:
我正在尝试构建一个封面流 View 。这意味着 ViewPager
中 View 的位置和大小会根据触摸输入而变化。
除了 View 的绘制顺序外,我的实现一切正常。
我可以调用上图中的 pager.setPageTransformer(false,PageTransformer())
,或者调用 setPageTransformer(true, PageTransformer())
颠倒绘制顺序。
问题是,我需要中间 View (绿色)在它的邻居(蓝色、灰色)前面。
我阅读了一些关于 view.bringToFront()
的帖子,但我找不到使用该方法的解决方案。
中间 View 到前端的解决方案会很酷,但这只有在同时显示三个 View 时才有效。如果有五个 View ,第五个 View 仍然会与第四个 View 重叠。 (令人困惑,不是吗?^^)
顺便说一下,我的 minSdk 是 16 到 18,所以 elevation(Lollipop) 是不可能的。
这是我当前的 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
,它可以在当前 Item 之后反转其绘制顺序。
注意:我已经尝试了所有可用的库,但没有任何效果。
希望有高人能帮帮我:)
最佳答案
可以覆盖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);
}
关于android - 在 ViewPager 的一半处反转绘制顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395463/