滑动和滑动布局与animationandroid

当我按下button时,如何使用slideUp显示中心的布局,然后再次按下以隐藏… slideDown in ANDROID

帮我解决这个问题

Solutions Collecting From Web of "滑动和滑动布局与animationandroid"

在res / anim文件夹下创build两个animationxml

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> 

加载animation像下图所示的代码,并根据您的要求启动animation

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

我使用这些简单的function,它像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); } 

这对我不起作用,我想要像jQuery的slideUp / slideDown函数,我试过这个代码,但它只移动内容至less在animation结束后留在相同的地方,视图应该有一个0DP高度在开始slideDown和animation结束后的视图高度(使用wrap_content)。

我在我正在开发的应用程序中有类似的要求。 而且,我发现了一个第三方库,它在Android中进行了滑动,滑动和滑动。

请参阅链接了解更多详情: https : //github.com/mancj/SlideUp-Android

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

获取SlideUp库

将JitPack存储库添加到您的构build文件。 将其添加到您的根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.xx' //optional, for reactive listeners based on RxJava-2 compile 'ru.ztrap:RxSlideUp:1.xx' //optional, for reactive listeners based on RxJava } 

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

步骤1:

创build任何types的布局

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

第2步:

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

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

第3步:

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

 slideUp = new SlideUpBuilder(slideView) .withStartState(SlideUp.State.HIDDEN) .withStartGravity(Gravity.BOTTOM) //.withSlideFromOtherView(anotherView) //.withGesturesEnabled() //.withHideSoftInputWhenDisplayed() //.withInterpolator() //.withAutoSlideDuration() //.withLoggingEnabled() //.withTouchableAreaPx() //.withTouchableAreaDp() //.withListeners() //.withSavedState() .build(); 

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