как я могу отобразить макет в центре с помощью слайда, когда я нажимаю кнопку, и еще раз нажмите, чтобы скрыть... slideDown в ANDROID
помогите мне с этим, thnkss
как я могу отобразить макет в центре с помощью слайда, когда я нажимаю кнопку, и еще раз нажмите, чтобы скрыть... slideDown в ANDROID
помогите мне с этим, thnkss
Создайте два анимационных xml файла под папкой res/anim
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);
Я использую эти простые функции, он работает как 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, я пробовал этот код, но он только перемещает содержимое, которое остается на том же месте после окончания анимации, представление должно иметь высоту 0dp при запуске slideDown и высоты представления (с wrap_content) после окончания анимации.
У меня было аналогичное требование в приложении, над которым я работаю. И я нашел стороннюю библиотеку, которая делает слайд-шоу, слайд-вниз и слайд-право в Android.
Подробнее см. ссылку: https://github.com/mancj/SlideUp-Android
Чтобы настроить библиотеку (скопированную с части ReadMe на странице Github по запросу):
Получить библиотеку SlideUp
Добавьте репозиторий JitPack в файл сборки. Добавьте его в свой root 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();
Вы также можете обратиться к образцу проекта по ссылке. Я нашел это весьма полезным.