在andengine中自定义ScrollView

时间:2013-05-15 08:48:42

标签: java android andengine

如何制作一个可以移动所有方面的自定义ScrollView。我如何找到我在andengine中点击ScrollView的位置?

提前致谢。

3 个答案:

答案 0 :(得分:4)

我写了一个小型的ShapeScrollContainer.java类,这是一项正在进行的工作,但功能正常,欢迎您使用,

https://skydrive.live.com/redir?resid=EB5E1E510A150D4D!105

它允许用户在容器区域内滚动,添加到ShapeScrollContainer的内容会自动相应地移动。如果内容移动到ShapeScrollContainer的边界之外,它会将内容项可见性设置为false(如稍后所述,您也可以在内容接近这些边界时淡出内容)。

我已经包含完整的java doc以及每种方法的解释。本质上,它扩展了Rectangle并实现了IScrollDetectorListener,IClickDetectorListener接口。只需将其添加到场景中,就像另一个Shape,

一样
ShapeScrollContainer ScrollableArea = new ShapeScrollContainer(x, y, width, height, new IShapeScrollContainerTouchListener()
{

    @Override
    public void OnContentClicked(Shape pShape) {
        // TODO Auto-generated method stub

    }

});
mScene.registerTouchArea(ScrollableArea);
mScene.attachChild(ScrollableArea);

如果您添加到ShapeScrollContainer的项被用户单击,将调用OnContentClicked接口方法。 pShape参数将是指向单击的Shape的指针。 ShapeScrollContainer移动内容而不是相机,因此您未添加到容器中的任何其他精灵都不会受到影响。

然后你只需调用ShapeScrollContainer.Add()方法来添加你的Sprites,Animated / Tiled Sprites,Rectangles e.t.c.例如,ChangeableText,

final ChangeableText mMessage = new ChangeableText(x, y, mFont, "Scroll Me", HorizontalAlign.LEFT, 14);
mMessage.setVisible(true);
mMessage.setZIndex(10);
mMessage.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
mScene.attachChild(mMessage);

ScrollableArea.Add(mMessage);

一旦你添加了所有东西,ShapeScrollContainer就有多种方法可以根据你的需要定制它,

//Whether you want to allow user to scroll vertical/horizontal
ScrollableArea.SetScrollableDirections(false, true);
//Only allow the user to scroll in a direction to available content
//(no more content in that direction - the user will be prevented from scrolling)
ScrollableArea.SetScrollLock(true);
//By how much over the last content in any direction the user is allowed to scroll (% of height/width)
ScrollableArea.SetAlphaPadding(10.0f, 0);
//Allow ShapeScrollContainer to increase alpha of contents and by what distance it starts inside
//the ShapeScrollContainer itself. (Fades content as it approaches the edges due to user scrolling)
ScrollableArea.SetScrollLockPadding(50.0f,0.0f);
//Whether scroll bars will be visible, (horizontal/vertical)
ScrollableArea.SetScrollBarVisibitlity(true,true)
//...
//A lot more methods to refine the ScrollableArea appearence and behaviour - see java doc

希望这是有用的。

答案 1 :(得分:2)

您可以从ClipEntity开始添加一个孩子Entity,其中包含您可以根据TouchEvent s翻译的所有列表项。

答案 2 :(得分:0)

您可以以优选的方式创建scrollview。

您必须创建一个实体作为容器。您必须在其中添加任意数量的对象。对于所有这些对象,您必须添加触摸区域启用,因为您要选择特定项目。

对于滚动,您必须实现滚动检测器侦听器并使用滚动检测器对象。使用此侦听器可以获得距x和y的触摸距离,您可以使用它来移动容器。

这些都是您必须要做的基本概述。