【发布时间】:2019-08-14 12:27:41
【问题描述】:
我将 viewpager2 与 fragmentStateAdapter 一起使用。 此外,将页面转换器设置为 DepthPageTransformation(转换按我想要的方式正常工作)
但是当我向上滑动页面时,该片段上的点击事件在双击时起作用(事件在点击两次后起作用)
如果我从 viewPager 中删除 pageTransformation,那么它可以正常工作。 因此,无法理解为什么转换会导致点击事件问题。
private static final float MIN_SCALE = 0.75f;
public void transformPage(@NonNull View view, float position) {
int pageHeight = view.getHeight();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0f);
Log.d("batman",position+" <-1");
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1f);
view.setTranslationY(0f);
view.setScaleX(1f);
view.setScaleY(1f);
Log.d("batman",position+" <=0");
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationY(pageHeight * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
Log.d("batman",position+" <=1");
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0f);
Log.d("batman",position+" else");
}
}
}
HomeFragment(adapter setting):
mAdapter = new ViewPagerAdapter(this);
setPageChangeListener();
mViewPager.setAdapter(mAdapter);
// mViewPager.setOffscreenPageLimit(3);
mViewPager.setPageTransformer( new DepthPageTransformer());
我希望当页面向上滑动时,按钮单击事件应该在一次单击时起作用。
【问题讨论】:
-
尝试将
mViewPager.setPageTransformer( new DepthPageTransformer());更改为mViewPager.setPageTransformer(true,new DepthPageTransformer());并在(position <= 0)之后添加view.bringToFront();(position <= 0)view.setScaleY(1f); -
@Piyush ViewPager2 只允许 setPageTransformer() 中的转换对象,不支持其中的布尔值。另外,view.bringToFront() 会抛出这个异常(java.lang.IllegalStateException: Page 只能偏移正数,不能偏移-1138)
标签: android android-pagetransformer android-viewpager2