我尝试了几种隐藏视图然后将其从父布局中删除的方法:
- 调用
- alpha 淡入淡出动画,然后调用 setVisibility(GONE); 调用
- alpha 淡入淡出动画,然后调用 AnimationListener 中的 setVisibility(GONE)
- 调用 Alpha 淡入淡出动画,然后删除动画侦听器中的父布局。
每次生成的动画都会失败,---视图从屏幕上消失两次。 Alpha 淡入淡出动画工作正常,但是当您更改可见性或将其从父视图中移除时,它会很快再次出现,然后再次消失。结果是一个意外的抖动动画。
示例代码:
Animation animation = AnimationUtils.loadAnimation(AddTaskActivity.this,
R.anim.fade_out);
final LinearLayout parentView = (LinearLayout) findViewById(R.id.addtask_root);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
parentView.post(new Runnable() {
public void run() {
parentView.removeView(test);
}
});
}
该动画失败---测试视图从视图中消失两次。
有什么想法吗?
我想如果你在删除视图或更改它的可见性之前透明你的视图,你可以做你想做的事:
@Override
public void onAnimationEnd(Animation animation) {
parentView.post(new Runnable() {
public void run() {
// transparent your view
...
parentView.removeView(test);
}
});
编辑:
我在关于动画的 android 文档中看到了它,它说:
视图动画系统的另一个缺点是它只 修改了绘制视图的位置,而不是实际视图本身。为 实例中,如果对按钮进行动画处理以在屏幕上移动,则 按钮绘制正确,但您可以单击的实际位置 按钮不会改变,所以你必须实现自己的逻辑 处理这个。
使用属性动画系统,这些约束完全是 删除,您可以对任何对象的任何属性进行动画处理(视图和 非视图),并且对象本身实际上被修改了。该物业 动画系统的执行方式也更加强大 动画。在高级别上,您将动画师分配给属性 要设置动画的内容,例如颜色、位置或大小,并且可以 定义动画的各个方面,例如插值和 多个动画师的同步。
所以我想你必须使用property animation
.