I would like to switch the activities using animation..
I have a view with 5 images and with that i set my oncliclk listener.
My main activity is
private View.OnClickListener onClickListener = new View.OnClickListener()
{
public void onClick(View testView)
{
if (testView == Main.this.myinput)
{
Intent i = new Intent(Main.this, Activity1.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
if (testView == Main.this.myinput)
{
Intent i = new Intent(Main.this, Activity2.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
}
};
and my animation files are
fade_in:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/accelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500" />
fade_out:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
Now my problem is when switching between activities, animation has no effects on real devices but which is working on emulator.... I referred to stack overflow and googled but couldn't find why animation is not working..
I tried this with various type of animations such as slide_in_left,right,top,bottom...
but animation is not working. Help me in resolving this issue.Thanks in advance..
You should add overridePendingTransition(R.anim.fade_in, R.anim.fade_out); in your second Activity. For example :
public class SecondActivity extends Activity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Activity open animation
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
setContentView(R.layout.activity_fragment_container);
}
#Override
public void onPause() {
super.onPause();
// Activity closing animation
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
}
Doing this you can control your Activity's start and close animation.
I had the same problem. Then i find decision. You should enable animation on your phone.
Go to : Settings > Display > Animation(Path can vary from device to device). Enable animation here. Hope this helps.
Related
Im trying to add a sliding animation when entering and exiting an activity but it only works when the phones back button is pressed. When pressing the up button in the toolbar or a separate button it doesn't work.
I tried adding the overridePendingTransition(R.anim.no_anim, R.anim.slide_out_right); line to the onPause() method as well as the finish() method and the buttons OnClick method but it doesn't work :/
no_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="0"
android:fromXDelta="0"
android:toXDelta="0" />
</set>
slide_out_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="#android:integer/config_longAnimTime"
android:fromXDelta="0"
android:toXDelta="100%p" />
</set>
Java:
public void button(View view) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.no_anim, R.anim.slide_out_right);
}
#Override
public void finish(){
super.finish();
overridePendingTransition(R.anim.no_anim, R.anim.slide_out_right);
}
#Override
protected void onPause() {
super.onPause();
overridePendingTransition(R.anim.no_anim, R.anim.slide_out_right);
}
You can call onBackPressed() when pressing the up button in the toolbar
Set toolbar Navigation click listener:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
finish(); //close activity
overridePendingTransition(R.anim.your_anim, R.anim.your_anim);
}
});
This will surely work!
I can't figure out why when I click my "toactility" button on the following code, the overridePendingTransition doesn't respond at all and instead I receive a default fade in style animation. Here's my code:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_information_navi);
Button ToMainActivity = (Button)findViewById(R.id.toactivity);
ToMainActivity.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Intent startIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(startIntent);
overridePendingTransition(0, R.anim.navigation_slide_left);
finish();
}
});
}
I've tried placing finish(); in various places, above startActivity(startIntent); and below it. overridePendingTransition is ignored.
However, on the Android hard back pressed button the overridePendingTransition works as expected. Here's the code:
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
#Override
public void finish() {
super.finish();
overridePendingTransition(0, R.anim.navigation_slide_left);
}
Can't figure out why when the overridePendingTransition code won't work below or above startActivity(startIntent);
How do I get it to work?
From here where I have answered, use like this:
overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left);
Then in res->anim folder:
enter_from_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="100%"
android:toXDelta="0%" >
</translate>
</set>
exit_out_left.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="0%"
android:toXDelta="-100%" >
</translate>
</set>
How can i impliment slide etc.. animation transition when i open new activity by listview item click ?
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = null;
// global string to class
selectedValue = String.valueOf(parent.getItemAtPosition(position));
if (selectedValue.equals("item1")) {
// ^^^ use any item value here you want
Intent myIntent = new Intent(view.getContext(), activity1.class);
startActivityForResult(myIntent,0);
}
else if (selectedValue.equals("item2")) {
Intent myIntent = new Intent(view.getContext(), aactivity4.class);
startActivityForResult(myIntent,0);
}
}
});
santoash kumar answer is correct. If you struggle on R.anim.layout resource here an animation code work like how other chat application work(slide animation) when you click on the listview item.
Add those into your anim resource
R.anim.push_left_in
<?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="#android:integer/config_mediumAnimTime"/>
</set>
R.anim.push_left_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-20%" android:duration="#android:integer/config_mediumAnimTime"/>
</set>
R.anim.push_right_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-20%" android:toXDelta="0" android:duration="#android:integer/config_mediumAnimTime"/>
</set>
R.anim.push_right_out
<?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="#android:integer/config_mediumAnimTime"/>
</set>
In the activity1 or any activity you will like to perform this animation while it launch,add this code after your set setContentView()
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
//rest of your code include setContentView();
}
Now you will find a problem when you try to navigation back to your listView activity either with pressing the back button or click on the view which represent the back button the animation still seem to be the default animation so do this when you try to end your current activity.
finish();
overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
For the back button pressed use this code.
#Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.push_right_in,R.anim.push_right_out);
}
If the animation I provide doesn't suit the animation you desire you can try to make your own custom animation from this link.
startActivityForResult(myIntent,0);
overridePendingTransition(R.anim.hold, R.anim.fade_in);
hold and fade in will be animation xmls
I made a sort of index activity with my personal logo.
I want that after 5 seconds change activity.
So I prepared 2 layout, I run the launcher.
In launcher activity I set:
Intent intent = new Intent(Home.this, IndexActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
startActivity(intent);
finish();
The problem is that the activity stay blocked in a white activity and after 5 seconds change activity.
Did I make a mistake?
How can I create a fade animation? And how can I run it? Thanks
You should never block the main thread. It is responsible for updating the UI and if you block it, the user interface will freeze.
Instead, use a Handler and its postDelayed method.
Thread.sleep() degrades the performance. You can use the Handler class' postDelayed() method to perform this:
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
#Override
public void run() {
Intent intent = new Intent(Home.this, IndexActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
finish();
}
}, 5000L);
First declare this in your animation folder.
<?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>
Then declare an animation in acitivity's java file from where you are going :
Animation animfadein,animFadeout;
animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);
animFadeout = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_out);
Then after startActivity(Intent);
write overridePendingTransition(animFadein, animFadeout);
here'sfadeout :
fade_out.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="1.0"
android:interpolator="#android:anim/accelerate_interpolator"
android:toAlpha="0.0" />
</set>
I'm doing an image viewer that pass pictures to next or previous, by clicking right/left button.
I wanna to animate the transition between the pictures. I did it using ImageSwitcher, it is working, but I still have a problem.
The animation loaded is always the same, always sliding out right, making no difference if I click on right or left button.
QUESTION: How can I set which animation will run when I click my buttons?
I did my code based on this blog: http://saigeethamn.blogspot.com/2010/05/image-switcher-view-android-developer.html
Here same important parts of the code:
// OnCreate()
in = AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left);
out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);
imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
imageSwitcher.setFactory(this);
imageSwitcher.setInAnimation(in);
imageSwitcher.setOutAnimation(out);
Now the click event (bm1 and bm2 are bitmaps):
private OnClickListener mClickListener = new OnClickListener() {
#Override
public void onClick(View v) {
if (v.getId()==R.id.buttonRight) {
Drawable d =new BitmapDrawable(getResources(),bm1);
imageSwitcher.setImageDrawable(d);
} else
if (v.getId()==R.id.buttonLeft) {
Drawable d =new BitmapDrawable(getResources(),bm2);
imageSwitcher.setImageDrawable(d);
}
}
};
How the ImageSwitcher know witch animation it will perform? If is In Left or Out Right?
EDITED FROM HERE ----------------------------------------------------
Solution:
private OnClickListener mClickListener = new OnClickListener() {
#Override
public void onClick(View v) {
if (v.getId()==R.id.buttonRight) {
imageSwitcher.setInAnimation(this, R.anim.slide_in_left); // added
imageSwitcher.setOutAnimation(this, R.anim.slide_out_left); // added
Drawable d =new BitmapDrawable(getResources(),bm1);
imageSwitcher.setImageDrawable(d);
} else
if (v.getId()==R.id.buttonLeft) {
imageSwitcher.setInAnimation(this, R.anim.slide_in_right); // added
imageSwitcher.setOutAnimation(this, R.anim.slide_out_right); // added
Drawable d =new BitmapDrawable(getResources(),bm2);
imageSwitcher.setImageDrawable(d);
}
}
};
Based on the answer of Rui Gaspar. Need to create the xmls he shows.
You can implement your own animation
slide_in_left.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="350"/>
</set>
slide_in_right.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="350"/>
</set>
slide_out_left.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="350"/>
</set>
slide_out_right.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="350"/>
</set>
You can use it like this:
//Switch Left
Intent myIntent = new Intent(m_context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
//Switch Right
Intent myIntent = new Intent(m_context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_right);