Android 带动画的Slidedown和slideup布局

Android 带动画的Slidedown和slideup布局,android,animation,slidedown,slideup,Android,Animation,Slidedown,Slideup,当我按下按钮并再次按下以隐藏时,如何使用slideUp在中心显示布局。。。ANDROID中的滑动下降 请帮助我,thnkss在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:durati

当我按下按钮并再次按下以隐藏时,如何使用slideUp在中心显示布局。。。ANDROID中的滑动下降


请帮助我,thnkss在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>
<?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> 

这对我不起作用,我想喜欢jquery slideUp/slideDown函数,我尝试了这段代码,但它只移动动画结束后停留在同一位置的内容,视图在slideDown开始时应该有0dp高度,动画结束后应该有视图高度(带有wrap_内容)。

我使用这些简单的函数,它的工作原理类似于jquery slideUp slideDown,在助手类中使用它,只需传递您的视图:

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);
}

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

有关更多详细信息,请参阅链接:

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

获取幻灯片库

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

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
    maven { url "https://maven.google.com" } // or google() in AS 3.0
  }
}
添加依赖项(在模块渐变中)

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

第1步:

创建任何类型的布局

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

创建一个SlideUp对象并在视图中传递

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

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

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

上面的方法是可行的,但这里有更逼真的从屏幕顶部向上滑动和向下滑动的动画

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

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>
<?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> 

linar_布局应具有什么高度和/或可见性?我试过“消失”,但看不见。我已将高度设置为0dp,它从不向下滑动。您错过了一整节关于如何最初“隐藏”视图的内容。@lostintranslation您可以在调用“开始动画”之前添加一个animationlistener,然后可以在显示时在onAnimationStart处可见,在隐藏时在onAnimationEnd处不可见。您可以解释一下如何使用插值器来加速/减速以获得反弹吗结束还是什么?最初向上滑动不起作用。一旦滑下,只有滑上才能工作。不知道为什么?不在安道尔工作4.4.2。但在其他设备上工作,现在最好的方法是:这只是一个布局动画。它实际上不会将项目移动到布局中的其他位置。你需要对象动画。如果您希望视图在动画之后消失或可见,只需在动画之前或之后设置视图的可见性。做得好!接近的视图也会产生相应的动画库代码(不是带有xml文件的应用程序资源)的伟大解决方案您还应该输入OP应该使用的代码,而不仅仅是引用链接。。。
slideUp = new SlideUpBuilder(slideView)
                .withStartState(SlideUp.State.HIDDEN)
                .withStartGravity(Gravity.BOTTOM)

                //.withSlideFromOtherView(anotherView)
                //.withGesturesEnabled()
                //.withHideSoftInputWhenDisplayed()
                //.withInterpolator()
                //.withAutoSlideDuration()
                //.withLoggingEnabled()
                //.withTouchableAreaPx()
                //.withTouchableAreaDp()
                //.withListeners()
                //.withSavedState()
                .build();
<?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> 
<?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>
imageView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.slide_up));
imageView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.slide_down));