Multi ViewPager 更改填充
Posted
技术标签:
【中文标题】Multi ViewPager 更改填充【英文标题】:Multi ViewPager change padding 【发布时间】:2016-03-13 13:05:03 【问题描述】:我正在 android TV 上实现 ViewPager 以显示 3 个这样的项目(背景绿色/紫色是调试背景以描绘整个 ViewPager 的页面):
我使用:
<android.support.v4.view.ViewPager
...
android:paddingLeft="300px"
android:paddingRight="300px"
android:clipToPadding="false"
...
/>
当失去焦点在 ViewPager 上时,我希望 中心项目 缩小并页面靠得更近。要实现插入动画:
ValueAnimator animator = ValueAnimator.ofInt(300, 400);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator)
Integer paddingHorizontal = (Integer) valueAnimator.getAnimatedValue();
vpScreenshots.setPadding(paddingHorizontal, 0, paddingHorizontal, 0);
);
animator.setDuration(300);
animator.start();
动画非常适合第一个元素:
但是,当移动到下一页(左右)时,填充动画开始表现得很奇怪。 移动时,例如向右 填充动画不对左侧项目执行操作,而是对中心和右侧项目执行操作。我越向右移动,效果就越深。结果是:
因此,当发生填充动画时,ViewPager 中的切换页面会破坏项目对齐。 为什么会发生?怎么解决?
【问题讨论】:
【参考方案1】:我设法解决了这个问题。唯一可行的方法是操纵左右项目的“x”参数。
这里是焦点监听器的代码:
if (hasFocus)
Map<Integer, View> neighbors = vpScreenshots.findNeighbors();
View leftNeighbor = neighbors.get(0);
View rightNeighbor = neighbors.get(1);
if (!firstFocus)
leftNeighbor.animate().xBy(-100).setDuration(FOCUS_ANIMATION_DURATION).start();
rightNeighbor.animate().xBy(100).setDuration(FOCUS_ANIMATION_DURATION).start();
firstFocus = false;
else
Map<Integer, View> neighbors = vpScreenshots.findNeighbors();
View leftNeighbor = neighbors.get(0);
View rightNeighbor = neighbors.get(1);
leftNeighbor.animate().xBy(100).setDuration(FOCUS_ANIMATION_DURATION).start();
rightNeighbor.animate().xBy(-100).setDuration(FOCUS_ANIMATION_DURATION).start();
查找邻居项附加到 MyViewPager 类:
public Map<Integer, View> findNeighbors()
neighbors = new HashMap<>();
int currentPosition = getCurrentItem();
for (int i = 0; i < getChildCount(); i++)
View childView = getChildAt(i);
int childPosition = (int) childView.getTag();
if ((currentPosition - childPosition) == 1)
neighbors.put(0, childView);
if ((currentPosition - childPosition) == -1)
neighbors.put(1, childView);
return neighbors;
【讨论】:
这对我不起作用,能否请您粘贴整个代码?以上是关于Multi ViewPager 更改填充的主要内容,如果未能解决你的问题,请参考以下文章
使用 ViewPager 在 Fragment 中创建 Listview
Android:SlidingMenu+ListView+ViewPager 的滑动冲突
一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!