Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Animate button move and set new position in Android

Tags:

java

android

xml

I've an ImageButton that I want to move when pressed and when animation finish I want that this button stops in the new position.

This is button code:

<ImageButton
    android:id="@+id/move_button"
    android:layout_width="120dp"
    android:layout_height="35dp"
    android:layout_centerInParent="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="0dp"
    android:scaleType="fitCenter"
    android:background="@drawable/background_button"
    android:src="@drawable/move_button"
    android:onClick="MoveButton" />

I've found a code to do that in this site:

public void MoveButton(final View view) {    
        TranslateAnimation anim = new TranslateAnimation(0, 0, 100, 0);
        anim.setDuration(300);

        anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) { }

            @Override
            public void onAnimationRepeat(Animation animation) { }

            @Override
            public void onAnimationEnd(Animation animation)
            {
                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
                params.topMargin += -100;
                view.setLayoutParams(params);
            }
        });

        view.startAnimation(anim);

    }

When button it's pressed it start the animation, but when animation is complete button return to initial position and application crashes.

What can be the problem?

like image 701
Singee Avatar asked Feb 03 '16 10:02

Singee


2 Answers

This is work Definitely.

Button im= (Button) findViewById(R.id.button);
//set position TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta
final Animation animation = new TranslateAnimation(0,100,0,0);
// set Animation for 5 sec
animation.setDuration(5000);
//for button stops in the new position.
animation.setFillAfter(true);
im.startAnimation(animation);
like image 76
Rjz Satvara Avatar answered Oct 24 '22 10:10

Rjz Satvara


Use anim.setFillAfter(true) to situated the View at the position where Animation ends.

One thing more you are animating your ImageButton from 100 to 0 in Y coordinates, thats why your ImageButton comes to intial position because 0 is its intial position.

Try below code in this code I used anim.setFillAfter(true) and animate the ImageButton from 0 to 100 in Y coordinates.

public void MoveButton(final View view) {
        TranslateAnimation anim = new TranslateAnimation(0,0,0,100);
        anim.setDuration(300);
        anim.setFillAfter(true);

        anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
            }
        });

     view.startAnimation(anim);

 }

Let me know if this is helpful for you.

like image 29
Chintan Bawa Avatar answered Oct 24 '22 10:10

Chintan Bawa