带动画的Slidedown和slideup布局

时间:2014-05-29 04:52:44

标签: android animation slidedown slideup

当我按下按钮时如何在中心显示布局,然后再次按下以隐藏...在ANDROID中的slideDown

帮助我,思考

5 个答案:

答案 0 :(得分:107)

在res / anim文件夹下创建两个动画xml

slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
    android:duration="1000"
    android:fromYDelta="0"
    android:toYDelta="100%" />
</set>

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
    android:duration="1000"
    android:fromYDelta="100%"
    android:toYDelta="0" />
</set>

加载动画类似于下面的代码并根据您的要求启动动画

//Load animation 
Animation slide_down = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_down);

Animation slide_up = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_up);

// Start animation
linear_layout.startAnimation(slide_down); 

答案 1 :(得分:24)

我使用这些简单的函数,它像jquery slideUp slideDown一样工作,在helper类中使用它,只是传递你的视图:

public static void expand(final View v) {
    v.measure(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    final int targetHeight = v.getMeasuredHeight();

    // Older versions of android (pre API 21) cancel animations for views with a height of 0.
    v.getLayoutParams().height = 1;
    v.setVisibility(View.VISIBLE);
    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            v.getLayoutParams().height = interpolatedTime == 1
                    ? WindowManager.LayoutParams.WRAP_CONTENT
                    : (int)(targetHeight * interpolatedTime);
            v.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    // 1dp/ms
    a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density));
    v.startAnimation(a);
}

public static void collapse(final View v) {
    final int initialHeight = v.getMeasuredHeight();

    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            if(interpolatedTime == 1){
                v.setVisibility(View.GONE);
            }else{
                v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
                v.requestLayout();
            }
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    // 1dp/ms
    a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
    v.startAnimation(a);
}

答案 2 :(得分:6)

上面的方法有效,但是从屏幕顶部看,这是更现实的向上和向下滑动动画。

只需在anim文件夹下创建这两个动画

slide_down.xml

.abort

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="-100%"
        android:toYDelta="0" />
</set> 

像这样在Java类中加载动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="-100%" />
</set>

答案 3 :(得分:3)

这对我不起作用,我想要喜欢jquery slideUp / slideDown函数,我试过这段代码,但它只移动了动画结束后留在同一个地方的内容,视图应该有一个0dp的高度在幻灯片的开始和动画结束后的视图高度(带有wrap_content)。

答案 4 :(得分:0)

我在我正在开发的应用程序中有类似的要求。而且,我找到了一个第三方库,可以在Android中进行向上滑动,向下滑动和向右滑动。

有关详细信息,请参阅该链接:https://github.com/mancj/SlideUp-Android

设置库(根据请求从其Github页面的自述文件部分复制):

获取幻灯片库

将JitPack存储库添加到构建文件中。将其添加到存储库末尾的根build.gradle中:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
    maven { url "https://maven.google.com" } // or google() in AS 3.0
  }
}

添加依赖项(在模块gradle中)

dependencies {
    compile 'com.github.mancj:SlideUp-Android:2.2.1'
    compile 'ru.ztrap:RxSlideUp2:2.x.x' //optional, for reactive listeners based on RxJava-2
    compile 'ru.ztrap:RxSlideUp:1.x.x' //optional, for reactive listeners based on RxJava
}

要将SlideUp添加到项目中,请执行以下三个简单步骤:

第1步:

创建任何类型的布局

<LinearLayout
  android:id="@+id/slideView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>

第2步:

在您的活动/片段中找到该视图

View slideView = findViewById(R.id.slideView);

第3步:

创建一个SlideUp对象并传入您的视图

slideUp = new SlideUpBuilder(slideView)
                .withStartState(SlideUp.State.HIDDEN)
                .withStartGravity(Gravity.BOTTOM)

                //.withSlideFromOtherView(anotherView)
                //.withGesturesEnabled()
                //.withHideSoftInputWhenDisplayed()
                //.withInterpolator()
                //.withAutoSlideDuration()
                //.withLoggingEnabled()
                //.withTouchableAreaPx()
                //.withTouchableAreaDp()
                //.withListeners()
                //.withSavedState()
                .build();

您也可以参考链接上的示例项目。我发现它非常有用。