java - ObjectAnimator不生效的问题
PHP中文网
PHP中文网 2017-04-17 11:33:39
[Java讨论组]

问题:

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

认证0级讲师

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号