Подтвердить что ты не робот

Разметка слайдов и слайдов с анимацией

как я могу отобразить макет в центре с помощью слайда, когда я нажимаю кнопку, и еще раз нажмите, чтобы скрыть... slideDown в ANDROID

помогите мне с этим, thnkss

4b9b3361

Ответ 1

Создайте два анимационных 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); 

Ответ 2

Я использую эти простые функции, он работает как 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);
}

Ответ 3

Это не работает для меня, я хочу любить функцию jQuery slideUp/slideDown, я пробовал этот код, но он только перемещает содержимое, которое остается на том же месте после окончания анимации, представление должно иметь высоту 0dp при запуске slideDown и высоты представления (с wrap_content) после окончания анимации.

Ответ 4

У меня было аналогичное требование в приложении, над которым я работаю. И я нашел стороннюю библиотеку, которая делает слайд-шоу, слайд-вниз и слайд-право в 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();

Вы также можете обратиться к образцу проекта по ссылке. Я нашел это весьма полезным.