2014-09-16 1 views
3

Я хотел бы иметь активность, которая представляет приложение и быть закрытым, вам нужно пронести его справа налево (возможно, с гладким если это не слишком много работы), то есть другая часть приложения, которое у меня уже есть, то есть ActionBar tabs + Swipe Views. Я прочитал несколько руководств по Android, таких как implement Swipe Views, но они не были моим делом. Не могли бы вы мне помочь? [С «плавной анимации» Я имею в виду, что красть должен следовать за палец]Закройте одно действие, прокручивая справа налево с гладкой анимацией, чтобы перейти ко второму действию

+1

Если у вас есть панель действий и красть взгляды, то вы сделали, я бы сказал. Чего не хватает? – greenapps

+0

В этом упражнении не должно быть вкладки, только пустой активности. – Rick

+0

Пустая деятельность? – greenapps

ответ

6

Я обычно достичь этого с помощью жестов слушателя:

Во-первых, определить перевода анимации в res/anim:

slide_in_left.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-50%p" android:toXDelta="0" 
      android:duration="@android:integer/config_longAnimTime"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

slide_in_right.x мл:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="50%p" android:toXDelta="0" 
      android:duration="@android:integer/config_longAnimTime"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

slide_out_left.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-50%p" 
      android:duration="@android:integer/config_longAnimTime"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

slide_out_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="50%p" 
      android:duration="@android:integer/config_mediumAnimTime"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

Затем в течение текущего класса деятельности:

class MyGestureDetector extends SimpleOnGestureListener { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      try { 
       float slope = (e1.getY() - e2.getY())/(e1.getX() - e2.getX()); 
       float angle = (float) Math.atan(slope); 
       float angleInDegree = (float) Math.toDegrees(angle); 
       // left to right 
       if (e1.getX() - e2.getX() > 20 && Math.abs(velocityX) > 20) { 
        if ((angleInDegree < 45 && angleInDegree > -45)) {      
     startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); 
     CurrentActivity.this.overridePendingTransition(
      R.anim.slide_in_left, R.anim.slide_out_right); 
     finish(); 
     } 
        // right to left fling 
       } else if (e2.getX() - e1.getX() > 20 
         && Math.abs(velocityX) > 20) { 
        if ((angleInDegree < 45 && angleInDegree > -45)) { 
     startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); 
     CurrentActivity.this.overridePendingTransition(
      R.anim.slide_in_right, R.anim.slide_out_left); 
     finish(); 

        } 
       } 
       return true; 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 
    } 

Вы можете зарегистрировать любое представление, чтобы получить/прослушивание жестов:

final GestureDetector gestureDetector = new GestureDetector(new MyGestureDetector()); 
     //the parent layout 
       findViewById(R.id.parent_layout).setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         if (gestureDetector.onTouchEvent(event)) return false; 
         return false; 
        } 
       }); 
     //an image view 
     findViewById(R.id.image_view).setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         if (gestureDetector.onTouchEvent(event)) return false; 
         return false; 
        } 
       }); 
     // a text view 
     findViewById(R.id.text_view).setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         if (gestureDetector.onTouchEvent(event)) return false; 
         return false; 
        } 
       }); 
+1

Спасибо за ваш ответ, на самом деле очень полезно. Но я забываю упомянуть, что с «гладкой анимацией» я подразумеваю, что салфетка должна следовать за моим пальцем. Виноват :) – Rick

Смежные вопросы