Hi i have an image view position and the bottom of the page i'm wanting to animate so it moves down does anyone know how to do this? currently when i run it nothing happens
here is what i have tried so far
heres my animation
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/accelerate_interpolator">
<translate android:fromYDelta="0" android:toXDelta="30" android:duration="1000"
android:fillAfter="true"/>
</set>
heres my java
public class IntialSetup extends Activity {
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_initialsetup);
animations();
}
public void animations(){
final ImageView image = (ImageView)findViewById(R.id.su_shirts);
Animation AnimationMovepos = AnimationUtils.loadAnimation(this, R.anim.shirt_anim);
image.startAnimation(AnimationMovepos);
}
}
Look at your animation:
<translate android:fromYDelta="0" android:toXDelta="30" .../>
fromYDelta ... toYDelta and not toXDelta.
Hope this was the problem.
Related
I'm showing issues with animation. Animation works fine when i clicked on button to show linear layout when i clicked buttton to close linear layout animation perform as i want but when i click second time to open linear layout animation doesn't work for both to show layout or close layout. I also want to inform you that button click perform properly. layout visibility GONE & VISIBLE works proper but animation didn't work second time.
public class AdminViewComplaintActivity extends AppCompatActivity implements View.OnClickListener {
ImageView btn_search, btn_close_search ;
LinearLayout ll_search;
Animation animationIn, animationOut;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_complaint);
btn_search = findViewById(R.id.btn_search);
btn_close_search = findViewById(R.id.btn_close_search);
ll_search = findViewById(R.id.ll_search);
animationIn= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_in);
animationOut= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_out);
}
#Override
public void onClick(View view) {
if (view==btn_search){
if(ll_search.getVisibility()==View.GONE){
// show linear layout with animation
ll_search.setAnimation(animationIn);
ll_search.setVisibility(View.VISIBLE);
}
}
else if(view==btn_close_search){
// close linear layout with animation
ll_search.setAnimation(animationOut);
ll_search.setVisibility(View.GONE);
}
}
}
xml for animation view_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<translate
android:duration="1000"
android:fromXDelta="100%"
android:toXDelta="0%" />
</set>
xml for animation view_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<translate
android:duration="1000"
android:fromXDelta="0%"
android:toXDelta="100%" />
</set>
add this code to view
anim.setFillEnabled(true);
anim.setFillAfter(true);
in programmatically use this :
Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.nameYourAnim);
viewToAnimate.startAnimation(animation);
for example anim :
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="#android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="#android:integer/config_mediumAnimTime" />
I'm new to android studio and I want to animate an imageButton with a sequential animation set. The animation set (animation_boutons.xml)is in res/anim.
I've tried with animationSet in java but the app crashed every time I launched the emulator.
I've spent a long time looking for a solution. I hope someone can help me !
I apologize if it's something obvious.
java code:
public class MainActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
configureCodeurBouton();
}
private void configureCodeurBouton() {
ImageButton boutonCodeur = findViewById(R.id.boutoncodeur);
Animation animBoutons = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_boutons);
animBoutons.setRepeatCount(Animation.INFINITE);
boutonCodeur.setAnimation(animBoutons);
boutonCodeur.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, codeur.class));
}
});
}
}
xml code:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true"
android:fillAfter="true">
<rotate
android:fromDegrees="0"
android:toDegrees="20"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:duration="1000"
/>
<rotate
android:startOffset="1000"
android:fromDegrees="20"
android:toDegrees="-20"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
/>
<rotate
android:fromDegrees="-20"
android:toDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="3000"
android:duration="1000"
/>
</set>
Also, Vedprakash Wagh give me the advice to try animBoutons.setRepeatCount(Animation.INFINITE) but it has no effect).
Your app is crashing every time because you're trying to find your ImageButton when the class is created first, and not after the layout is set.
You're getting NullPointerException, as there is no ImageButton with id R.id.boutoncodeur in your View hierarchy when you're trying to find it.
You need to find your ImageView AFTER it is available in your View hierarchy i.e. after your setContentView();
You can either do this:
Remove your second line
ImageButton boutonCodeur = findViewById(R.id.boutoncodeur);
as you've already found your ImageView in your configureCodeurButton() function.
Or, you can keep one class variable of ImageView, and make findViewById call after setContentView like below.
public class MainActivity extends AppCompatActivity {
ImageButton boutonCodeur;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boutonCodeur = findViewById(R.id.boutoncodeur);
configureCodeurBouton();
}
private void configureCodeurBouton() {
Animation animBoutons = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_boutons);
boutonCodeur.setAnimation(animBoutons);
boutonCodeur.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, codeur.class));
}
});
}
}
You can learn more about NullPointerException here. Also, learn how to read the errors from tutorials that are available. Or, simply open the logcat tab in Android Studio when the error occurs to know what Error you're getting.
To make your animation run infinitely, you can add this in your code.
animation.setRepeatCount(Animation.INFINITE)
I just had to change the whole xml anim_boutons file so I have only one animation and not three rotate animations. the repeatMode line says to repeat the animation backwards at each repeat. This gives the expected effect.
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true"
android:fillAfter="true">
<rotate
android:fromDegrees="-20"
android:toDegrees="20"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:duration="1000"
android:repeatCount="infinite"
android:repeatMode="reverse"
/>
</set>
I am trying to add animated text(something like"Developed by .....") to Home page of my App.
But i couldn't show it completely.every time its length equals to shows only the width of the device. How can I solve this issue.My coding are as follows.
In my Home Activity
public class HomeActivity extends AppCompatActivity implements Animation.AnimationListener {
Animation animation;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TextView txtAnimation=(TextView)findViewById(R.id.txtAnimation);
animation= AnimationUtils.loadAnimation(HomeActivity.this,R.anim.move);
String string="Developed by ................";
// set animation listener
animation.setAnimationListener(this);
txtAnimation.startAnimation(animation);
}
My move.XML
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="#android:anim/linear_interpolator"
android:fillAfter="true">
<translate
android:fromXDelta="100%"
android:toXDelta="-100%"
android:repeatMode="restart"
android:duration="8000"
android:repeatCount="infinite"/>
<!--android:toXDelta="0%p"-->
</set>
I tried by using setMaxWidth,setEmsbut not worked.
I have an activity (A) that launches another activity (B) after a calculation. My problem is that when Activity B is launched, an arrow drawable that is supposed to move from left to right while incrementing in size (scaled from .33 to 1) is first displayed for a very short fraction of time before it starts the tween animation. The end result is a bothering flicker of the full size drawable right before it starts animating.
Everything seems to point that the problem is related to the animation file (.xml) and not to the java class. This can be observed when I delete the line arrowImage.startAnimation(arrowExtent); in the following code:
protected void arrowAnimation(Animation arrowExtent) {
// TODO Auto-generated method stub
arrowImage.setImageResource(R.drawable.arrowimage);
arrowImage.startAnimation(arrowExtent);
arrowExtent.setFillAfter(true);
I have tried the following:
Using setImageDrawable instead of setImageResource to the Drawable object.
Setting arrowImage.setFillBefore(false);
Any recommendations will be greatly appreciated.
The animation xml is as follows:
<?xml version="1.0" encoding="utf-8"?>
<set android:interpolator="#android:anim/accelerate_decelerate_interpolator">
<scale
android:fromXScale="0.33"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:duration="1000"
android:fillBefore="false" />
<translate
android:fromXDelta="0%"
android:toXDelta="75%p"
android:duration="1000" />
</set>
When activity start you should make ImageView invisible in xml or in onCreate() and when animation starts, you should change it to visible.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// referencing views etc.
arrowImage.setVisibility(View.INVISIBLE);
// or make image invisible in xml
}
protected void arrowAnimation(Animation arrowExtent) {
arrowExtent.setAnimationListener(new AnimationListener() {
#Override
public void onAnimationStart(Animation animation) {
arrowImage.setVisibility(View.VISIBLE);
}
#Override
public void onAnimationRepeat(Animation animation) { }
#Override
public void onAnimationEnd(Animation animation) { }
});
arrowImage.setImageResource(R.drawable.arrowimage);
arrowImage.startAnimation(arrowExtent);
}
I still try different basics with android, and now I'm stuck with animation. I'm trying to implement a simple animation. I've defined animation in xml file like this:
alpha android:interpolator="#android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" duration="3000" repeatCount="infinite"
In my main view group I have an ImageView defined like this:
<ImageView android:id="#+id/someb" android:src="#drawable/earth_normal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dip"/>
And this is from my starting activity class:
public class Ohayou extends Activity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView earth = (ImageView)findViewById(R.id.someb);
Animation earthFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
earth.startAnimation(earthFadeInAnimation);
}
It finds ImageView successfuly and creates animation. but when I start emulator ImageView just shows the original src image, not an animation. What am I doing wrong?
Thanks
I see you have a correct code but I have doubt in your \anim\fade_in.xml, so try this
<?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="3000" android:repeatCount="infinite"/>
</set>