2

因为我是 MS Paint 的高手,所以我将上传一张自描述我想要实现的目标的图片。

在此处输入图像描述

我已经搜索过了,但我不确定我要搜索什么。我发现了一个叫做动画的东西。我设法从视图中旋转、淡化等元素(通过这个很棒的教程http://www.vogella.com/articles/AndroidAnimation/article.html

但这对于我想要实现的目标有点限制,现在,我被卡住了,因为我不知道这在 android 开发中是如何真正调用的。试过像“滚动布局”这样的词,但我没有得到更好的结果。

你能给我一些建议吗?

谢谢你。

你可以看到一个活生生的例子,这个应用程序:https ://play.google.com/store/apps/details?id=alexcrusher.just6weeks

真挚地,

塞尔吉

4

2 回答 2

1

您可以通过在事件 onClick() 上使用 setvisibility 功能手动执行此操作

或者

用这个

动态添加两个视图,一个在另一个之下

于 2013-03-13T15:02:42.117 回答
1

使用类似这样的布局(如果您愿意,可以使用线性、相对或其他布局):

<LinearLayout
    android:id="@+id/lty_parent">
    <LinearLayout
        android:id="@+id/lyt_first" />
    <LinearLayout 
        android:id="@+id/lyt_second"/>
</LinearLayout>

然后在onClick任何你想用来控制它的方法中,设置Visibility介于VisibleGone.

public void buttonClickListener(){

    ((Button) findViewById(R.id.your_button))
        .setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {


        if (lyt_second.getVisibility() == View.GONE) {
            lyt_second.setVisibility(View.VISIBILE);
        } 
        else {
            lyt_second.setVisibility(View.GONE);            
        }
    });

如果您只想简单地出现/消失而没有什么花哨的,那很好。如果你想为它制作动画,事情会变得有点复杂,因为你需要使用负边距来让它看起来像这样增长和缩小:

我们使用与onClick之前相同的方法,但这次当我们单击它时,会启动SlideAnimation隐藏/可见视图的自定义。

@Override
public void onClick(View v) {
    SlideAnimation slideAnim = new SlideAnimation(lyt_second, time);
    lyt_second.startAnimation(slideAnim);
}

的实现SlideAnimation基于一个通用Animation类,我们对其进行扩展然后覆盖转换。

public SlideAnimation(View view, int duration) {

        //Set the duration of the animation to the int we passed in
        setDuration(duration);

        //Set the view to be animated to the view we passed in
        viewToBeAnimated = view;

        //Get the Margin Parameters for the view so we can edit them
        viewMarginParams = (MarginLayoutParams) view.getLayoutParams();

        //If the view is VISIBLE, hide it after. If it's GONE, show it before we start.
        hideAfter = (view.getVisibility() == View.VISIBLE);

        //First off, start the margin at the bottom margin we've already set. 
        //You need your layout to have a negative margin for this to work correctly.
        marginStart = viewMarginParams.bottomMargin;

        //Decide if we're expanding or collapsing
        if (marginStart == 0){
            marginEnd = 0 - view.getHeight();
        }
        else {
            marginEnd = 0;
        }

        //Make sure the view is visible for our animation
        view.setVisibility(View.VISIBLE);
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        super.applyTransformation(interpolatedTime, t);

        if (interpolatedTime < 1.0f) {

            // Setting the new bottom margin to the start of the margin 
            // plus the inbetween bits
            viewMarginParams.bottomMargin = marginStart
                    + (int) ((marginEnd - marginStart) * interpolatedTime);

            // Request the layout as it happens so we can see it redrawing
            viewToBeAnimated.requestLayout();

        // Make sure we have finished before we mess about with the rest of it
        } else if (!alreadyFinished) {
            viewMarginParams.bottomMargin = marginEnd;
            viewToBeAnimated.requestLayout();

            if (hideAfter) {
                viewToBeAnimated.setVisibility(View.GONE);
            }
            alreadyFinished = true;
        }
            hideAfter = false;
    }
}

编辑:如果有人以前使用过此代码并发现如果您在动画完成之前多次单击启动动画的按钮,那么它会从那时起弄乱动画,导致它总是在之后隐藏视图动画完成。我错过了hideAfter代码底部附近布尔值的重置,现在添加它。

于 2013-03-13T15:12:42.383 回答