如何获取图库的可见视图数量?

时间:2011-08-02 19:32:19

标签: android

我有一个Gallery,想知道屏幕上有多少项目可见。每个项目都占据了整个屏幕,所以我真的很想知道两个项目是否因为中间滚动而可见。感谢。

2 个答案:

答案 0 :(得分:0)

我能想到的最好的方法是在Gallery上设置一个AnimationListener,如下所示:

gallery.setLayoutAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        //schedule timer to execute halfway through animation here

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub

    }
});

使用gallery.setAnimationDuration(durationInMilliseconds)设置动画持续时间;

现在你知道动画何时开始,你知道需要多长时间。使用该信息,您可以安排计时器在动画中途执行代码,这应该是当您的图库同时显示两个视图时。

这似乎是一个非常困难的方法,所以给别人时间给出更好的建议。

答案 1 :(得分:0)

好的,我们走了。!扩展您的Gallery访问

protected boolean getChildStaticTransformation(View child, Transformation t) {}

您可以访问图库中显示的每个视图。 从现在开始你可以做两件事。

  1. 计算所有唯一子项(getChildStaticTransformation可以多次调用,例如触摸事件等,这就是为什么必须检查唯一子项)。 请注意,此方法返回由库填充的子项。 Gallery填充了top-1和bottom + 1 childs以解决性能问题。有时是+2 -2或+ n -n(取决于子宽度,原因是水平滚动小部件)。因此,对于显示在图库中的孩子来说,这可能不是你需要的原因并不总是准确的。
  2. 对于每个孩子,检查.getLeft和.getRight是否在图库边界内。如果孩子的getLeft在画廊内,而另一个孩子的getRight也在画廊中,那么你就是在卷轴中间。这是您所需要的。
  3. 如果你有一个孩子的fill_parent (一次只显示一个),那么你可以看到画廊是否正在滚动投掷。然后你在中间滚动,直到画廊“启动” setOnItemSelectedListener()。为此,你必须setCallbackDuringFling(true);