ObjectAnimator不生效的问题


问题:

场景:有一个叫做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时执行
    }
}

Android java 动画 Animation

哦哈哈哈哈哈 11 years ago

Your Answer