简体   繁体   English

动画按钮移动并在Android中设置新位置

[英]Animate button move and set new position in Android

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. 我有一个ImageButton,我想在按下时移动,当动画结束时,我希望这个按钮在新位置停止。

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? 可能是什么问题?

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);

Use anim.setFillAfter(true) to situated the View at the position where Animation ends. 使用anim.setFillAfter(true)View放置在Animation结束的位置。

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. 更重要的是你在Y坐标中将ImageButton动画从100设置为0,这就是为什么你的ImageButton到达初始位置,因为0是它的初始位置。

Try below code in this code I used anim.setFillAfter(true) and animate the ImageButton from 0 to 100 in Y coordinates. 尝试下面在此代码我用代码anim.setFillAfter(true)动画 ImageButton Y中从0到100的坐标。

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. 如果这对您有帮助,请告诉我。

Use ObjectAnimator 使用ObjectAnimator

        ObjectAnimator animation = ObjectAnimator.ofFloat(YOUR_VIEW, "translationX", 100f);
        animation.setDuration(2000);
        animation.start();

This code will move the View 100 pixles to the right, over a period of 2 seconds. 此代码将在2秒内将View 100像素向右移动。

If you need more information go to Developers Guide 如果您需要更多信息,请转到“ 开发人员指南”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM