ObjectAnimator不生效的问题

发布于 2022-08-28 12:32:46 字数 2699 浏览 23 评论 0

问题:

场景:有一个叫做SearchBar的控件,里面包含两个View,分别是自定义的EditText以及一个Button,用于实现当SearchBar被点击并且获得焦点的时候,EditText从右边缩短,然后Button渐现,当点击Button的时候,Button渐隐,然后EditText右侧伸长。效果类似iPhone中的搜索控件。
问题:我利用下方的代码来控制动画,可是运行程序的时候的效果却是这样的:
1. 点击SearchBar控件,EditText没有表现出定义的动画效果,显示的效果和没加动画是一样的,即EditText突然变短,Button突然显示。
2. 点击Button,得到了想要的动画效果。

请问,这段代码有什么问题?该如何解决这个问题?

实现的代码如下:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void setSearchAni(int Visibility){
    //此动画效果仅对SDK > 11 的机子有效
    if(Build.VERSION.SDK_INT >= 11) {
        if (Visibility == View.VISIBLE && mBtnSearch.getVisibility() ==View.GONE) {

            SearchTextView searchTextView = new SearchTextView(mEtSearch);

            //设置EtSearch动画
            ObjectAnimator objectAnimator=ObjectAnimator.ofInt(searchTextView, "width",  mEtSearchWidth,mEtSearchWidth-mBtnSearchWidth).setDuration(100);
            objectAnimator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    //设置BtnSearch动画
                    ObjectAnimator.ofFloat(mBtnSearch, "width", 0, mBtnSearchWidth).
                            setDuration(100).start();
                }
            });
            objectAnimator.start();

            mBtnSearch.setVisibility(View.VISIBLE);


        } else if (mBtnSearch.getVisibility() ==View.VISIBLE && Visibility == View.GONE) {

            //执行BtnSearch的动画
            ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(mBtnSearch, "width", mBtnSearchWidth, 0).
                    setDuration(100);
            objectAnimator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);

                    mBtnSearch.setVisibility(View.GONE);

                    //执行EtSearch的动画
                    SearchTextView searchTextView = new SearchTextView(mEtSearch);
                    ObjectAnimator.ofInt(searchTextView, "width", mEtSearchWidth-mBtnSearchWidth, mEtSearchWidth).setDuration(100).start();

                    //将mEtSearch的宽度重新设置为match_parent
                    ViewGroup.LayoutParams layoutParams=mEtSearch.getLayoutParams();
                    layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT;
                    mEtSearch.setLayoutParams(layoutParams);
                }
            });
            objectAnimator.start();
        }
    }
    else {
        mBtnSearch.setVisibility(Visibility); //SDK<11时执行
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文