实际上我不知道如何正确调用 – overlay,parallax或slideUP,无论如何,我有一个名为“cafe details”的Activity,它提供了一个带有标题信息的Container(LinearLayout)(名称,最低价格,交货时间等)和其他容器(ViewPager)包含一个带有信息(菜单和菜肴)的ExpandableListView,我想要做的就是在将listview滚动到scpecific Y位置以覆盖(或覆盖)标题信息时向上滑动我的Viewpager.
类似的效果(但我不需要使用的视差)看起来像这样
我可以检测用户何时向下滚动列表视图但是如何使用ViewPager移动容器以覆盖其他容器?请给我一些想法,问候.
UPD
我已经尝试了很多方法来实现它,但遗憾的是它们都不适合.所以现在我来到下一个变体 – 向ListView添加滚动侦听器,计算视图的scrollY位置,然后基于通过调用setTranslationY()移动y轴上的viewpager;
这是一些代码
1)ViewPager的片段
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
if (getActivity() != null) {
((MainActivity) getActivity()).resizePagerContainer(absListView);
}
}
});
2)MainActivity
//object fields
int previousPos;
private float minTranslation;
private float minHeight;
minTranslation = - (llVendorDescHeaders.getMeasuredHeight()+llVendorDescNote.getMeasuredHeight());
//llVendorDescHeaders is linearLayout with headers that should be hidden
//lVendorDescNote is a textView on green background;
minHeight = llVendorDescriptionPagerContainer.getMeasuredHeight();
//llVendorDescriptionPagerContainer is a container which contains ViewPager
--------->
public void resizePagerContainer(AbsListView absListView){
final int scrollY = getScrollY(absListView);
if (scrollY != previousPos) {
final float translationY = Math.max(-scrollY, minTranslation);
llVendorDescriptionPagerContainer.setTranslationY(translationY);
previousPos = scrollY;
}
}
private int getScrollY(AbsListView view) {
View child = view.getChildAt(0);
if (child == null) {
return 0;
}
int firstVisiblePosition = view.getFirstVisiblePosition();
int top = child.getTop();
return -top + firstVisiblePosition * child.getHeight() ;
}
不幸的是,这个简单的解决方案有一个问题 – 当缓慢滚动时,它正在闪烁和抽搐(我不知道如何正确调用它).所以改为setTranslationY()我使用了objectAnimator:
public void resizePagerContainer(AbsListView absListView){
.............
ObjectAnimator moveAnim = ObjectAnimator.ofFloat(llVendorDescriptionPagerContainer, "translationY", translationY);
moveAnim.start();
..............
}
我不喜欢这个解决方案,因为1)无论如何它会延迟调整viewpager,而不是立即调整2)我不认为每次滚动listView时创建很多ObjectAnimator的对象都是好主意.
需要你的帮助和新想法.问候.