gpt4 book ai didi

Android:滚动动画?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:04 25 4
gpt4 key购买 nike

我是Android开发的新手,我想了解一下Scroller widget (android.widget.Scroller)。它如何使 View 动画化?是否可以访问 Animation 对象(如果存在)?如果是这样,如何?我已经阅读了源代码,但找不到任何线索,或者我太新了?

我只是想在Scroller完成滚动后做一些操作,比如

m_scroller.getAnimation().setAnimationListener(...);

最佳答案

Scroller 小部件实际上并没有为您做很多工作。它不会触发任何回调,不会为任何内容设置动画,它只会响应各种方法调用。

那有什么好处呢?好吧,它完成了所有的计算,例如为你一掷千金,这很方便。所以你通常会做的是创建一个 Runnable,它反复询问 Scroller,“我的滚动位置现在应该是什么?我们完成 throw 了吗?”然后,您在处理程序(通常在 View )上重新发布该可运行文件,直到完成投递。

这是我正在处理的 Fragment 中的一个示例:

private class Flinger implements Runnable {
private final Scroller scroller;

private int lastX = 0;

Flinger() {
scroller = new Scroller(getActivity());
}

void start(int initialVelocity) {
int initialX = scrollingView.getScrollX();
int maxX = Integer.MAX_VALUE; // or some appropriate max value in your code
scroller.fling(initialX, 0, initialVelocity, 0, 0, maxX, 0, 10);
Log.i(TAG, "starting fling at " + initialX + ", velocity is " + initialVelocity + "");

lastX = initialX;
getView().post(this);
}

public void run() {
if (scroller.isFinished()) {
Log.i(TAG, "scroller is finished, done with fling");
return;
}

boolean more = scroller.computeScrollOffset();
int x = scroller.getCurrX();
int diff = lastX - x;
if (diff != 0) {
scrollingView.scrollBy(diff, 0);
lastX = x;
}

if (more) {
getView().post(this);
}
}

boolean isFlinging() {
return !scroller.isFinished();
}

void forceFinished() {
if (!scroller.isFinished()) {
scroller.forceFinished(true);
}
}
}

使用Scroller.startScroll的细节应该是类似的。

关于Android:滚动动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5495855/

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