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时执行
}
}
哦哈哈哈哈哈
11 years, 6 months ago