Статьи

Добавить скользящее меню с анимацией в Activity

Я играл с анимацией, слоями и так далее, и я кодировал это простое скользящее меню. Идея очень проста, когда пользователь касается экрана и поднимает палец, приложение показывает меню, когда пользователь касается экрана и опускает палец, это меню исчезает. Как видите, идея очень проста, но может быть полезна, когда мы хотим добавить меню в наши приложения.

android sliding menu drag up android sliding menu drag down

Первым шагом является создание нашего скользящего слоя, который будет содержать наше меню. Для простоты я просто покажу TextView, но вы можете изменить код для отображения вашего меню. Предположим, что activity_main.xml — это xml-макет нашей Activity, поэтому мы имеем:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/green">
 
    <LinearLayout
    android:id="@+id/slider"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="false"
    android:layout_alignParentTop="false"
    android:layout_centerInParent="true"
    android:background="@color/gray"
    android:content="@+id/content"
    android:gravity="bottom|center_horizontal"
    android:orientation="vertical" >
 
    <TextView android:id="@id/content"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="Surviving with android"/>
 
   </LinearLayout>
</RelativeLayout>

Это базовый слой, который будет перемещаться вверх и вниз, следуя указаниям пальца пользователя. Если вы хотите добавить меню, замените TextView на ваше меню (возможно, с кнопками и т. Д.). Теперь давайте посмотрим на активность, которая должна управлять этим меню. При запуске этот слой должен быть невидимым, поэтому мы должны добавить:

1
2
3
4
5
6
7
8
9
@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 
     ll = (LinearLayout) findViewById(R.id.slider);
     ll.setVisibility(View.GONE);
      ....
}

Мы просто устанавливаем видимость макета в View.GONE . Теперь мы должны отслеживать движения пальцев пользователя, чтобы реагировать на эти движения. Для этого нам нужно просто переопределить метод public boolean onTouchEvent (событие MotionEvent). Если мы хотим получить больше информации о том, как обрабатывать события сенсорного экрана, посмотрите здесь . Чтобы узнать, перемещает ли пользователь палец вверх или вниз, нам просто нужно сохранить положение Y, когда пользователь впервые касается экрана (событие MotionEvent.ACTION_DOWN ), и сравнить его значение с положением Y, когда пользователь перемещает палец вверх ( Событие MotionEvent.ACTION_UP ). Итак, мы имеем:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN : {
            startY = event.getY();
            break ;           
        }
        case MotionEvent.ACTION_UP: {
            float endY = event.getY();
 
            if (endY < startY) {
                System.out.println("Move UP");
                ll.setVisibility(View.VISIBLE);
 
            }
            else {
                ll.setVisibility(View.GONE);
            }
        }
 
    }
    return true;
}

Таким образом, мы создали простое меню ВКЛ / ВЫКЛ, которое отображается, когда пользователь поднимает палец вверх, и становится невидимым, когда пользователь перемещает палец вниз. Мы могли бы добавить некоторый элемент управления, например, порог, который вызывает меню.

Добавить анимацию

Чтобы сделать это меню более привлекательным и сделать слой движущимся вверх или вниз, мы можем добавить анимацию. Для этого под каталогом res добавьте каталог с именем anim (если его нет). Мы хотим создать две анимации, одна из которых показывает, что макет движется вверх, а другая — его перемещение вниз. Мы создаем два файла, один из которых называется anim_up.xml, с таким содержанием:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
    <translate android:fromYDelta="100%"
                android:toYDelta="40%"
                android:duration="400"/>
 
</set>

и еще один, называемый anim_down.xml:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
    <translate android:fromYDelta="0%"
                android:toYDelta="100%"
                android:duration="400"/>
 
</set>

Теперь нам нужно просто загрузить эту анимацию в нашу активность и запустить ее, когда пользователь перемещает палец вверх и вниз. Итак, код нашей Деятельности выглядит так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private Animation animUp;
private Animation animDown;
 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    ll = (LinearLayout) findViewById(R.id.slider);
    ll.setVisibility(View.GONE);
 
    animUp = AnimationUtils.loadAnimation(this, R.anim.anim_up);
    animDown = AnimationUtils.loadAnimation(this, R.anim.anim_down);
}
 
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN : {
        startY = event.getY();
        break ;           
    }
    case MotionEvent.ACTION_UP: {
        float endY = event.getY();
 
        if (endY < startY) {
            System.out.println("Move UP");
            ll.setVisibility(View.VISIBLE);
            ll.startAnimation(animUp);
        }
        else {
 
            ll.startAnimation(animDown);
            ll.setVisibility(View.GONE);
        }
    }
 
    }
    return true;
}
  • Исходный код для раскрывающегося меню здесь
  • Исходный код для левого-правого меню здесь

Ссылка: добавьте скользящее меню с анимацией в Activity от нашего партнера JCG Франческо Аццолы в блоге Surviving с Android .