【问题标题】:Edittext change width with animationEdittext 用动画改变宽度
【发布时间】:2014-02-28 10:03:16
【问题描述】:

我想制作一个在其父级左侧对齐的edittext,当用户单击它时,edittext 的宽度将增加到右侧。这是我使用的代码。但是当动画结束时,edittext 宽度变为第一个大小。
谁能帮帮我。
有没有什么解决方案可以在动画中将“fillparent”设置为宽度的最终大小?

Animation scaleAnimation = new ScaleAnimation(0, -500, 1, 1);
scaleAnimation.setDuration(750);
editText.startAnimation(scaleAnimation);

我在动画开始之前添加了scaleAnimation.setFillAfter(true);,但我明白了;

750 毫秒后,edittext 将达到其第一个宽度。

【问题讨论】:

  • 查看我的回答中的编辑,或参考ObjectAnimator
  • 请限定您的“试用 ObjectAnimator”。将人们指向其他 API 和框架,但没有说明为什么或即使它会起作用,这对于试图找到相同解决方案的其他人没有帮助。

标签: android xml android-edittext android-animation


【解决方案1】:

这绝对适合你。

这样做的动态方式:

ScaleAnimation animate = new ScaleAnimation(1, 2, 1, 1, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0);
animate.setDuration(700);
animate.setFillAfter(true);
target.startAnimation(animate);

使用 XML 的方式

scale.xml(放在 res/anim 文件夹中)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">

    <scale
        android:duration="400"
        android:fillAfter="true"        
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="0%"
        android:pivotY="0%"
        android:toXScale="2.0"
        android:toYScale="1.0" >
    </scale>

</set>

Java 代码:

Animation anim = AnimationUtils.loadAnimation(Anims.this, R.anim.scale);
mEdittext.startAnimation(anim);

【讨论】:

  • 可以分享edittext的代码吗?
【解决方案2】:

这样做

Animation scaleAnimation = new ScaleAnimation(0, -500, 1, 1);
    scaleAnimation.setDuration(750);
    scaleAnimation.setFillAfter(true);
    editText.startAnimation(scaleAnimation);

【讨论】:

    【解决方案3】:

    试试这个。

    动画 scaleAnimation = new ScaleAnimation(0, -500, 1, 1);

             scaleAnimation.setDuration(750);
    
            scaleAnimation.setAnimationListener(new AnimationListener() {
    
                            @Override
                            public void onAnimationStart(Animation animation) {}
    
                            @Override
                            public void onAnimationRepeat(Animation animation) {}
    
                            @Override
                            public void onAnimationEnd(Animation animation) {
                              //Set your editext width to match parent using layout params
                            }
                        });
            editText.startAnimation(scaleAnimation);
    

    【讨论】:

    • 发布代码没有解释为什么他应该尝试它,甚至没有解释你认为这是如何工作的,既没有帮助也没有建设性,也没有很好地使用 SO。请添加一些文字,解释他为什么要尝试这个。
    • 这篇文章中的每个答案都是相同的,没有cmet或解释,但是需要解释。
    【解决方案4】:

    使用

    scaleAnimation.setFillAfter(true);
    

    或者使用 ObjectAnimator:

    ObjectAnimator animWidth = ObjectAnimator.ofInt(your_view, "width", startWidth,endWith);
    animWidth.setDuration(yourDuration);
    animWidth.start();
    

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多