gpt4 book ai didi

android - 检测适配器中的滚动方向(上/下)

转载 作者:IT老高 更新时间:2023-10-28 23:27:03 25 4
gpt4 key购买 nike

我正在尝试在我的项目中模仿 Google Plus 应用程序,因为它现在似乎是引用。

滚动时的listview效果非常好,我想做类似的事情。

我从 LayoutAnimationController 开始 http://android-er.blogspot.be/2009/10/listview-and-listactivity-layout.html

LayoutAnimationController controller 
= AnimationUtils.loadLayoutAnimation(
this, R.anim.list_layout_controller);
getListView().setLayoutAnimation(controller);

这似乎很糟糕,因为并非所有元素都是动画的:

所以我最终使用了适配器的 getView 并使用了这个:

        AnimationSet set = new AnimationSet(true);

Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(800);
set.addAnimation(animation);

animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f,Animation.RELATIVE_TO_SELF, 0.0f
);
animation.setDuration(600);
set.addAnimation(animation);

row.startAnimation(set);

结果太棒了,我真的很高兴!

不幸的是,它仅在我从列表的顶部滚动到底部时才有效!

我想让它在另一边滚动时工作,我需要稍微改变一下 TranslateAnimation。

所以我的问题是,有没有办法检测我在适配器中是向上还是向下滚动?

最佳答案

分配 OnScrollListener到您的 ListView。创建一个标志,指示用户是向上还是向下滚动。通过检查当前 first 可见项位置是否大于或小于前一个 first 可见项位置,为标志设置适当的值。将该检查放入 onScrollStateChanged()

示例代码:

private int mLastFirstVisibleItem;
private boolean mIsScrollingUp;

public void onScrollStateChanged(AbsListView view, int scrollState) {
final ListView lw = getListView();

if (view.getId() == lw.getId()) {
final int currentFirstVisibleItem = lw.getFirstVisiblePosition();

if (currentFirstVisibleItem > mLastFirstVisibleItem) {
mIsScrollingUp = false;
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
mIsScrollingUp = true;
}

mLastFirstVisibleItem = currentFirstVisibleItem;
}
}

getView()中检查mIsScrollingUp是真还是假,并相应地分配动画。

关于android - 检测适配器中的滚动方向(上/下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12114963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com