I have an Activity that has a handler. The handler does some work then launches an intent to another Activity. I use overridePendingTransition after I launch the intent and call finish().
In Android 4.2 the zoom animation works fine but in android 5 it doesn't.
Are there any differences between the two versions of Android I need to know about with regards to animations?
public void initHandler(){
handler = new Handler();
runnable = new Runnable() {
public void run() {
processTag();
}
private void processTag() {
Log.e(TAG, "about to process tag");
.....
process some info
.......
handler.post(new Runnable(){
public void run() {
setContentView(R.layout.successfulnfc);
}
});
Intent processPayloadIntent = new Intent(NfcActivity.this, NfcscannerActivity.class);
processPayloadIntent.putExtra("payload", payload);
processPayloadIntent.putExtra("tagid", tagId);
processPayloadIntent.setAction("NFC");
processPayloadIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//processPayloadIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(processPayloadIntent);
finish();
overridePendingTransition(0, R.anim.activity_animation_zoom_in);
}
};
}
..
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="2000"
android:fillAfter="false"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="#android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:toXScale="0.55"
android:toYScale="0.55" />
</set>
Related
I have set up the fade in functionality properly but its not working
MainActivity.java
setContentView(R.layout.activity_main);
ImageView iv = (ImageView) findViewById(R.id.sname);
final Animation animationFadeIn = AnimationUtils.loadAnimation(this, R.anim.fadein);
iv.startAnimation(animationFadeIn);
Thread timer = new Thread(){
public void run(){
try{
sleep(4000);
}catch(InterruptedException e)
{
e.printStackTrace();
}finally{
Intent in = new Intent(getApplicationContext(),HomescreenJ.class);
startActivity(in);
}
}
};
timer.start();
fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/linear_interpolator">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000"
/>
</set>
Kindly its basically my splash screen. On which i want one image to be stationary and other one to be displayed with Fade-in effect.
I have some troubles with Interpolator...
I tried to make fadeIN/OUT but this function does not work. I have set delay 1000ms, but fading effect is not shown. Could you help me out? I checked some tutorials and all should be set correctly except layout width/height which should not be presented in XML. When i remove them there is message that those fields are mandatory:(
XMLs:
FADEIN
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/accelerate_interpolator"
android:duration="1000"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
---------------------
FADEOUT
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:interpolator="#android:anim/decelerate_interpolator"
android:duration="1000"
android:fromAlpha="1.0"
android:toAlpha="0.0">
</alpha>
---------
Main Activity
public class WelcomePage extends Activity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_page);
new Handler().postDelayed(new Thread(){
public void run(){
Intent mainMenu = new Intent(WelcomePage.this,mainMenu.class);
WelcomePage.this.startActivity(mainMenu);
WelcomePage.this.finish();
overridePendingTransition(R.layout.fadein,R.layout.fadeout);
}
},GCEngine.GAME_THREAD_DELAY);
}
}
Set this to fade_out:
android:fillAfter="true"
Than use this code:
new Handler().postDelayed(new Thread(){
public void run(){
Intent mainMenu = new Intent(WelcomePage.this,mainMenu.class);
WelcomePage.this.startActivity(mainMenu);
overridePendingTransition(R.layout.fadein,R.layout.fadeout);
WelcomePage.this.finish();
}
},GCEngine.GAME_THREAD_DELAY);
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 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.
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);