android - ObjectAnimator 为 LinearLayout 宽度设置动画

标签 android

好的,所以我检查了 http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html

他说你可以在给定的时间内为对象的属性设置动画。我试着在物体周围移动,它看起来很好。我在更改 LinearLayout 的宽度时遇到了问题。我得到了这个:

10-26 14:51:27.190: E/PropertyValuesHolder(12681): Couldn't find setter/getter for       property width with value type float

然后我尝试使用“myWidth”扩展LinearLayout

public void setMyWidth(int myWidth) {
    LinearLayout.LayoutParams params = (LayoutParams) getLayoutParams();
    params.weight = myWidth;
    setLayoutParams(params);
    requestLayout();
    this.myWidth = myWidth;
}

运气不好。然后我尝试更改 LayoutParams.width,结果显示宽度和高度是 Java 历史上唯一的公共(public)属性,而 ObjectAnimator 需要 getter 和 setter。没运气。 我很尴尬地说我也尝试过扩展 LayoutParams ......没有运气。

有人成功地做了这样的事情吗?我使用旧的 android.view.animation 并得到了我想要的,但我对 future 感到好奇。

最佳答案

在没有简单属性 getter/setter 的情况下,您应该使用 ValueAnimator并手动执行动画。

假设:

  • v 是您正在制作动画的 View
  • END_WIDTH 是 View 的目标宽度(以像素为单位)。
  • DURATION 是动画的所需长度,以毫秒为单位。

您的代码应如下所示:

    ValueAnimator anim = ValueAnimator.ofInt(v.getMeasuredWidth(), END_WIDTH);
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            int val = (Integer) valueAnimator.getAnimatedValue();
            ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
            layoutParams.width = val;
            v.setLayoutParams(layoutParams);
        }
    });
    anim.setDuration(DURATION);
    anim.start(); 

关于android - ObjectAnimator 为 LinearLayout 宽度设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902976/

相关文章:

Android 2.3.6 支持库 v7 选项菜单丢失

当我想播放自定义语音消息时,Android 和静音音乐

android - 如何在应用程序重新启动之间保存和恢复 Flutter ListView 的滚动位置?

android - 从 Android 中的联系人 ID 获取联系人详细信息

javascript - @JavascriptInterface 无法解析

java - Web 服务器在 Android 中不工作

java - 在文件上使用 renameTo 更改内容

android - setSupportBackgroundTintList 状态不工作

android - BLE gatt.discoverServices() 返回 true 但回调永远不会触发

android - 使用 NavController 导航时只允许一个实例