android listview视差滚动,android – ListView在滚动时覆盖另一个布局

实际上我不知道如何正确调用 – 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的对象都是好主意.

需要你的帮助和新想法.问候.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值