Android Left to Right slide animation

前端 未结 9 943
旧时难觅i
旧时难觅i 2020-11-22 08:18

I have three activities whose launch modes are single instance.
Using onfling(), I swing them left and right.

The problem is when I swipe right to

相关标签:
9条回答
  • 2020-11-22 08:48

    Also, you can do this:

    FirstClass.this.overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    

    And you don't need to add any animation xml

    0 讨论(0)
  • 2020-11-22 08:50

    For from right to left slide

    res/anim/in.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:shareInterpolator="false">
       <translate
        android:fromXDelta="100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700" />
    </set>
    

    res/anim/out.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:shareInterpolator="false">
       <translate
        android:fromXDelta="0%" android:toXDelta="-100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700" />
    </set>
    

    in Activity Java file:

    Intent intent = new Intent(HomeActivity.this, ActivityCapture.class);
    startActivity(intent);
    overridePendingTransition(R.anim.in,R.anim.out);
    

    you can change the duration times in the xml files for the longer or shorter slide animation.

    0 讨论(0)
  • 2020-11-22 08:52

    If you want to apply the animation on "activity" start. then write below code.

    startActivity(intent);
    overridePendingTransition(R.anim.opening_anim, R.anim.closing_anim);
    

    If you want to apply the animation on "dialog" then firstly add below code in styles.xml file

    <style name="my_style”> 
     <item 
      name="@android:windowEnterAnimation">@anim/opening_anim</item> 
     <item 
     name="@android:windowExitAnimation">@anim/closing_anim</item>
    </style>
    

    Use this style as I defined below.

    final Dialog dialog = new Dialog(activity);
    dialog.getWindow().getAttributes().windowAnimations = R.style.my_style;
    

    If you want to apply the animation on "view" then write below code

    txtMessage = (TextView) findViewById(R.id.txtMessage);
         
    // load the animation
    Animation animFadein = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.animation); 
    
    // start the animation
    txtMessage.startAnimation(animFadein);
    

    Below, I have mentioned most of the animation .xml code.

    appear - make it just appear.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:interpolator="@android:anim/accelerate_interpolator"
            android:duration="1"
               android:fromAlpha="1.0"
               android:toAlpha="1.0"/>
    </set>
    

    ===========================================

    make it slowly fades into view.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:fromAlpha="0.0"
            android:toAlpha="1.0"
            android:interpolator="@android:anim/accelerate_interpolator" 
            android:duration="300"
            android:repeatCount="0" />
    </set>
    

    ==========================================

    fadeout - make it slowly fade out of view.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:fromAlpha="1.0"
            android:toAlpha="0.0"
            android:interpolator="@android:anim/accelerate_interpolator" 
            android:duration="300"
            android:repeatCount="0" />
    </set>
    

    ==========================================

    push_down_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="400"/>
    </set>
    

    ==========================================

    push_down_out.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="400"/>
    </set>
    

    ==========================================

    push_left_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
    </set>
    

    ==========================================

    push_left_out.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
    </set>
    

    ==========================================

    push_right_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
    </set>
    

    ==========================================

    push_right_out.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="300"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
    </set>
    

    ==========================================

    push_up_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
    </set>
    

    ==========================================

    push_up_out.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="300"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
    </set>
    

    ==========================================

    rotation.xml

    <?xml version="1.0" encoding="utf-8"?>
    <rotate
     xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:toDegrees="-90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="0" android:fillAfter="true">
    </rotate>
    

    ==========================================

    scale_from_corner.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromYScale="0" android:toYScale="1.0"
            android:fromXScale="0" android:toXScale="1.0" 
            android:duration="500" android:pivotX="100%"
            android:pivotY="100%" />
    </set>
    

    ==========================================

    scale_torwards_corner.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromYScale="1.0" android:toYScale="0"
            android:fromXScale="1.0" android:toXScale="0" 
            android:duration="500"/>
    </set>
    

    ==========================================

    shrink_and_rotate_a(exit).xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1.0" android:toXScale="0.8"
        android:fromYScale="1.0" android:toYScale="0.8"
        android:pivotX="50%p" android:pivotY="50%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="100"
    />
    <scale
        android:fromXScale="1.0" android:toXScale="0.0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:pivotX="50%p" android:pivotY="50%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="150"
        android:startOffset="100"
    />
    

    ==========================================

    shrink_and_rotate_b(entrance).xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="0.0" android:toXScale="1.0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:pivotX="50%p" android:pivotY="50%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="150"
        android:startOffset="250"
    />
    
    <scale
        android:fromXScale="0.8" android:toXScale="1.0"
        android:fromYScale="0.8" android:toYScale="1.0"
        android:pivotX="50%p" android:pivotY="50%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="100"
        android:startOffset="400"
    />
    

    ========================================

    blink.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha android:fromAlpha="0.0"
          android:toAlpha="1.0"
          android:interpolator="@android:anim/accelerate_interpolator"
          android:duration="800"
          android:repeatMode="reverse"
          android:repeatCount="infinite"/>
    </set>
    

    ========================================

    ZoomIn.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true" >
        <scale
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="1000"
           android:fromXScale="1"
           android:fromYScale="1"
           android:pivotX="50%"
           android:pivotY="50%"
           android:toXScale="3"
           android:toYScale="3" >
        </scale>
    </set>
    

    ========================================

    ZoomOut.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true" >
        <scale
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="1000"
           android:fromXScale="1.0"
           android:fromYScale="1.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:toXScale="0.5"
           android:toYScale="0.5" >
        </scale>
    </set>
    

    ========================================

    FadeIn.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true" >
        <alpha
           android:duration="1000"
           android:fromAlpha="0.0"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:toAlpha="1.0" />
    </set>
    

    ========================================

    FadeOut.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true" >
        <alpha
           android:duration="1000"
           android:fromAlpha="1.0"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:toAlpha="0.0" />
    </set>
    

    ========================================

    Move.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/linear_interpolator"
       android:fillAfter="true">
       <translate
           android:fromXDelta="0%p"
           android:toXDelta="80%p"
           android:duration="1000" />
    </set>
    

    ========================================

    SlideDown.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true">
        <scale
           android:duration="800"
           android:fromXScale="1.0"
           android:fromYScale="0.0"
           android:interpolator="@android:anim/linear_interpolator"
           android:toXScale="1.0"
           android:toYScale="1.0" />
    </set>
    

    ========================================

    SlideUp.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true" >
        <scale
           android:duration="800"
           android:fromXScale="1.0"
           android:fromYScale="1.0"
           android:interpolator="@android:anim/linear_interpolator"
           android:toXScale="1.0"
           android:toYScale="0.0" />
    </set>
    

    ========================================

    Bounce.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:fillAfter="true"
       android:interpolator="@android:anim/bounce_interpolator">
        <scale
           android:duration="800"
           android:fromXScale="1.0"
           android:fromYScale="0.0"
           android:toXScale="1.0"
           android:toYScale="1.0" />
    </set>
    
    0 讨论(0)
  • 2020-11-22 08:53

    If you want the transition work for whole application you can create a rootacivity and inherit it in the activity you need. In Root Activity's onCreate call overridePendingTransition with desired direction. And onStart call overridePendingTransition with other direction if activity is resumed. Here I am giving full running code below.Correct me if I am wrong.

    create this xml file on your anim folder

    anim_slide_in_left.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="600"
            android:fromXDelta="100%"
            android:toXDelta="0%" >
        </translate>
    </set>
    

    anim_slide_in_right.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="600"
            android:fromXDelta="-100%"
            android:toXDelta="0%" >
        </translate>
    </set>
    

    anim_slide_out_left.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="600"
            android:fromXDelta="0%"
            android:toXDelta="-100%" >
        </translate>
    </set>
    

    anim_slide_out_right.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="600"
            android:fromXDelta="0%"
            android:toXDelta="100%" >
        </translate>
    </set>
    

    RootActivity

    import android.app.Activity;
    import android.os.Bundle;
    
    public class RootActivity extends Activity {
        int onStartCount = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            onStartCount = 1;
            if (savedInstanceState == null) // 1st time
            {
                this.overridePendingTransition(R.anim.anim_slide_in_left,
                        R.anim.anim_slide_out_left);
            } else // already created so reverse animation
            { 
                onStartCount = 2;
            }
        }
    
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            if (onStartCount > 1) {
                this.overridePendingTransition(R.anim.anim_slide_in_right,
                        R.anim.anim_slide_out_right);
    
            } else if (onStartCount == 1) {
                onStartCount++;
            }
    
        }
    
    }
    

    FirstActivity

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class FirstActivity extends RootActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView tv = (TextView) findViewById(R.id.tvTitle);
            tv.setText("First Activity");
            Button bt = (Button) findViewById(R.id.buttonNext);
            bt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(FirstActivity.this, SecondActivity.class);
                    startActivity(i);
    
                }
            });
        }
    
    }
    

    SecondActivity

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class SecondActivity extends RootActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView tv = (TextView) findViewById(R.id.tvTitle);
            tv.setText("Second Activity");
            Button bt = (Button) findViewById(R.id.buttonNext);
            bt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(SecondActivity.this, ThirdActivity.class);
                    startActivity(i);
    
                }
            });
    
        }
    
    }
    

    ThirdActivity

    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class ThirdActivity extends RootActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView tv = (TextView) findViewById(R.id.tvTitle);
            tv.setText("Third Activity");
            Button bt = (Button) findViewById(R.id.buttonNext);
            bt.setText("previous");
            bt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
    
                }
            });
        }
    
    }
    

    and finally Manifest

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.transitiontest"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.transitiontest.FirstActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name="com.example.transitiontest.SecondActivity"
                android:label="@string/app_name" >
            </activity>
            <activity
                android:name="com.example.transitiontest.ThirdActivity"
                android:label="@string/app_name" >
            </activity>
        </application>
    
    </manifest>
    
    0 讨论(0)
  • 2020-11-22 08:55

    If your API level is 19+ you can use translation as above. If your API level is less than 19, you can take a look at similar tutorial: http://trickyandroid.com/fragments-translate-animation/

    0 讨论(0)
  • 2020-11-22 08:58

    Use this xml in res/anim/

    This is for left to right animation:

    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false">
      <translate android:fromXDelta="-100%" android:toXDelta="0%"
                 android:fromYDelta="0%" android:toYDelta="0%"
                 android:duration="700"/>
    </set>
    

    This is for right to left animation:

    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false">
      <translate
         android:fromXDelta="0%" android:toXDelta="100%"
         android:fromYDelta="0%" android:toYDelta="0%"
         android:duration="700" />
    </set>
    

    In your coding use intent like for left to right:

    this.overridePendingTransition(R.anim.animation_enter,
                       R.anim.animation_leave);
    

    In your coding use intent like for right to left

    this.overridePendingTransition(R.anim.animation_leave,
                                   R.anim.animation_enter);
    
    0 讨论(0)
提交回复
热议问题