Как анимировать выдвижной ящик?

Моя активность

Когда я нажимаю кнопку запуска, мне нужно получить это:

:введите здесь описание изображения

Итак, у меня есть выдвижной ящик, который мне нужно анимировать, нажав кнопку «Пуск». Как видите, контекст выдвижного ящика содержит панель поиска и 3 кнопки. Когда пользователь нажимает кнопку запуска, должна запускаться анимация, которая должна скрывать кнопки.

Мой xml-файл выглядит так:

<SlidingDrawer
    android:id="@+id/slidingDrawer1"
    android:layout_width="match_parent"
    android:layout_height="140dp"
    android:layout_alignParentBottom="true"
    android:layout_x="3dp"
    android:layout_y="374dp"
    android:content="@+id/content"
    android:handle="@+id/handle" >

    <Button
        android:id="@+id/handle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Handle" />

    <RelativeLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="84dp" >

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="wrap_content"
            android:layout_height="47dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:background="@drawable/bcg9" >

            <Button
                android:id="@+id/button1"
                android:layout_width="106.6dp"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_marginTop="0dp"
                android:background="@drawable/rev" />

            <Button
                android:id="@+id/button2"
                android:layout_width="106.6dp"
                android:layout_height="match_parent"
                android:layout_marginTop="0dp"
                android:background="@drawable/pause" />

            <Button
                android:id="@+id/button3"
                android:layout_width="106.6dp"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_marginTop="0dp"
                android:layout_toRightOf="@+id/button2"
                android:layout_weight="1"
                android:background="@drawable/forv" />
        </LinearLayout>

        <SeekBar
            android:id="@+id/seekBar1"
            android:layout_width="match_parent"
            android:layout_height="11dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@null"
            android:progressDrawable="@drawable/seekbar_progress"
            android:thumb="@drawable/thumb_drawable" />
    </RelativeLayout>
</SlidingDrawer>

<SeekBar
    android:id="@+id/seekBar2"
    android:layout_width="match_parent"
    android:layout_height="15px"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="62dp"
    android:maxHeight="3dp"
    android:progressDrawable="@drawable/seekbar_progress"
    android:thumb="@drawable/thumb_drawable" />

<Button
    android:id="@+id/animate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="start" />

</RelativeLayout>

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

int topOfsd = getWindowManager().getDefaultDisplay().getHeight()-sd.getHeight();
                Animation animation = new TranslateAnimation(0,            0,topOfsd,topOfsd-100);
                animation.setDuration(1000);
                animation.setFillAfter(true);
                sd.startAnimation(animation);
                sd.setVisibility(0);        

Как это можно сделать?


person sekula87    schedule 01.08.2012    source источник


Ответы (2)


Если вы получите дескриптор SlidingDrawer с помощью findViewById, вы можете просто вызвать функции animateOpen и animateClose. http://developer.android.com/reference/android/widget/SlidingDrawer.html#animateOpen()

Если вы не хотите, чтобы выдвижной ящик открывался полностью, просто установите высоту на что-то в провалах.

person Frank Sposaro    schedule 01.08.2012
comment
Привет, но проблема в том, что я не хочу закрывать его полностью, см. второе изображение, панель поиска должна быть видна. - person sekula87; 02.08.2012
comment
Если у кого-то есть идея, как это можно сделать, дайте мне знать, пожалуйста. - person sekula87; 02.08.2012
comment
Хам. Интересно, можете ли вы просто добавить отступы. Почему элементы управления находятся в выдвижном ящике? Кажется, что их перемещение очень разрушительно. Возможно, стоит подумать о редизайне. Вы можете иметь элементы управления всегда внизу, а затем поставить выдвижной ящик об этом. - person Frank Sposaro; 02.08.2012
comment
Я решил использовать выдвижной ящик из-за требований клиента, он спросил: при выдвижении управления музыкой вверх, а при скольжении вниз элементы управления музыкой прячутся, но в то же время он добавил другое требование. Если песня воспроизводится и нет сенсорного события, то должна начаться анимация, показанная на рисунках выше (управление музыкой опускается, так что единственной видимой частью управления музыкой является полоса поиска). У вас есть идея, как это можно сделать без выдвижного ящика (у меня есть идея, чтобы обернуть элементы управления музыкой в ​​​​некоторой группе просмотра и перевести анимацию)? - person sekula87; 03.08.2012
comment
обновленный ответ. Просто установите высоту на что-то в провалах. Это должно сработать. Отметьте, если это так, и дайте мне знать, если это не так, и я покопаюсь в своем приложении. - person Frank Sposaro; 03.08.2012
comment
Я думаю, вы меня не совсем поняли, посмотрите на картинки, когда выдвижной ящик находится в открытом положении и когда нет сенсорных событий в течение 10 секунд, должна начаться анимация, в которой выдвижной ящик должен опуститься, поэтому единственная видимая вещь содержание. панель поиска. - person sekula87; 03.08.2012

Мне удалось решить эту проблему с помощью анимации свойств.

Display display = getWindowManager().getDefaultDisplay(); 
        int y = display.getHeight();
android.widget.SlidingDrawer  sd;
sd = (android.widget.SlidingDrawer)findViewById(R.id.slidingDrawer1);
sd.animate().translationY(someValue);
person sekula87    schedule 08.08.2012