i need to understand animation on Android.
For example, my application starts with an activity with a button in the bottom, when the user click on the button i want that another activity appears with an animation from bottom to top and i want that the button becomes the "header" of this second activity.
How can i achieve this?
Thank You
Daniele
Thank you to DecodeGnome for the answer! It works!
But i have some problem with the animation when i want to close this activity, i create a anim_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0%p"
android:fromYDelta="0%p"
android:toXDelta="0"
android:toYDelta="100%p"
android:duration="300" />
</set>
but this doesn't work (the second parameter of overridePendingTransition what is used for?).
I try to call a new overridePendingTransition in onStop() function:
public void onStop(){
super.onStop();
overridePendingTransition(R.anim.top_to_bottom, R.anim.top_to_bottom);
}
But when i call finish to the second activity, i still see the default animation (from left to right)!
Thank you again to who'll help me.
1) Create a folder called anim in res folder
2) Add 2 new XML animations there (example, anim_in.xml & anim_out.xml)
3) put this line of code in the new activities onCreate:
overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
Anim_in.xml example:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0%p"
android:fromYDelta="100%p"
android:toXDelta="0"
android:toYDelta="0%p"
android:duration="300" />
</set>
4) Place the button (header) in the top of the layout of the second activity.
Use this code:
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.top_to_bottom, R.anim.top_to_bottom);
}
Related
I have a navigation bar at the bottom with icons. When I click on an icon a new activity starts with intent.
context.startActivity(intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP));
Like this.
If I test it on my Android Pixel emulator the animation is always from bottom to top when a new activity starts.
If I test it on my physical android device (Android 7.1) the animation is always from right to left when a new activity starts. When I close an activity the animation goes from left to right away.
I want always this slide animation (like on my physical device). What do I have to do?
I added
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
In the onCreate() of the activites, so I have the slide when the activity starts, but no slide animation when the activity close.
Thanks for your help
you'll need 2 new animation files in your anim folder and some code in the Activity which you want to close with the animation, add changes to onBackPressed method
First the animation files: left_to_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="-100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
right_to_left.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
</set>
And in Activity do the following:
#Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
PS Also be aware that even if your code is okay, your phone might have animation turned off
I have many activities with each having a group of textViews. what i want to
1) when activity loaded all the textViews should slide in.
2) when second activity loads the textViews of first activity slides out.
However, I already figured out the transition/animation, and also achieved the solution for first by calling the animation in onWindowFocusChanged(boolean hasFocus).
but I am unable to find the correct method through which I have to called slide out part.
this is my slide_in
<?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="500"/>
</set>
this is my slide_out
<?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="500"/>
</set>
Here I call slide in and slide out but slide out is not working.
#Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus){
animShow();
}
else
{
animHide();
}
}
this is my animHide method
private void animHide()
{
etname.startAnimation(animHide[0]);
etmail.startAnimation(animHide[1]);
etmobile.startAnimation(animHide[2]);
etaddress.startAnimation(animHide[3]);
etlanguage.startAnimation(animHide[4]);
}
When starting the second Activity from you first one, call overridePendingTransition immediately after you call startActivity.
I suggest watching Custom Activity Animations from Google's DevBytes series.
An expert from Google, Chet Haase, explains in details how to deal Activity transition animations. Below the video you will also find link to the source code of the presented example.
If you are interested in more Android animations, checkout the rest of DevBytes series episodes.
I have an activity and another activity.
I want my first activity to end when I slide up the screen. The animation should be like the activity is sliding up too. Like the notification screen.
Is that possible? I have done many Google searches before posting this question, but could not get anything.
P.S - I don't want this to be seen as a casual question since there is no code shown. I just need some point to start and I am completely baffled.
make an anim folder in res->
Make an xml file in anim folder slide_up_info.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
slide_down_info.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="0%p"
android:interpolator="#android:anim/accelerate_interpolator"
android:toYDelta="100%p" />
</set>
no_change.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%p" android:toYDelta="0" android:duration="500"/>
</set>
Now when you want to activity up then write below code
Intent intent_info = new Intent(MainActivity.this,ToActivity.class);
startActivity(intent_info);
overridePendingTransition(R.anim.slide_up_info,R.anim.no_change);
For down Activity animation
Intent intent_home=new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent_home);
overridePendingTransition(R.anim.no_change,R.anim.slide_down_info);
Animations can be introduced to Activity Launch using OverridePendingTransition. Take a look at this example where they have showed a sample code. Animation between activities
To end an activity, you can call finish() on the first activity.
The know about the slideup, you can check onFling from GestureDetector or onTouch from OnTouchListener
You can also do it this way : in your animation, override the onAnimationEnd method, and use startActivity in it to launch your new activity after the end of the animation
I have two activities and I want that when the user touches a button on the first activity, the new activity slides in from the left and moves to the right while the first activity does the same, it moves to the right and slides out, so it would give an effect in which the new activity pushes the old one to the right and replaces it.
In order to do that, I have written the following XMLs:
In animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="1250" />
</set>
Out animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="-100%"
android:duration="1250" />
</set>
I call the overridePendingTransition(R.anim.anim_in,R.anim.anim_out); function in the onCreate method of the new activity. In the resulting effect, the new activity moves from the left to right correctly, but the first, older activity moves into the opposite direction; it moves to the left. I want to revert the moving direction of this first activity. How can I do that, is there a XML property which serves to this purpose?
Change
android:toXDelta="-100%"
to
android:toXDelta="100%"
in the out animation.
It should be a pretty simple question that I cannot find through google or the docs for the life of me. How do I change the transition style of my activity?
From what I've heard, there are the grow, left/right and up/down transitions for presenting and dismissing activities, but I don't have a clue how to implement them.
WHen you are doing:
startActivity(intent);
just put:
startActivity(intent);
overridePendingTransition(animIn, animOut);
animIn and animOut are ints that you can just define in anim resources folder for example:
slideInLeft.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%p" android:toXDelta="0%p"
android:duration="#android:integer/config_longAnimTime" />
slideOutLeft.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="#android:integer/config_longAnimTime" />
And when you want to return to the first activity you need to do the same but in finish method of activity:
finish();
overridePendingTransition(animIn, animOut);
You can use activity.overridePendingTransition. It takes an enter and exit animation resource ids.