两个视图,一个动画,但有一个问题
Posted
技术标签:
【中文标题】两个视图,一个动画,但有一个问题【英文标题】:Two Views, one Animation but there's a problem 【发布时间】:2020-04-23 10:48:56 【问题描述】:这是我的代码:
AlphaAnimation anim_fadeIn;
Button button, button2;
TextView t, e;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
t = findViewById(R.id.text_Splash_t);
e = findViewById(R.id.text_Splash_e);
button = findViewById(R.id.button);
button2 = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
mAnimate();
);
button2.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
mAnimate2();
);
anim_fadeIn = new AlphaAnimation(0.0f, 1.0f);
anim_fadeIn.setDuration(1000);
anim_fadeIn.setFillAfter(true);
private void mAnimate()
t.startAnimation(anim_fadeIn);
private void mAnimate2()
e.startAnimation(anim_fadeIn);
场景:
按下 button1 和 text1 将动画(即使你做了几次)。然后按 button2 将在某处添加视图,因此无论您按 button1 还是 2,两个文本都会动画
场景 2:
按下 button2 和 text2 将动画(即使你做了几次)。然后按 button1 将在某处添加视图,因此无论您按 button1 还是 2,两个文本都会动画。
如何避免这个问题
【问题讨论】:
首先,为什么要在单独的线程中运行 onClick 侦听器中的代码,然后立即将 mAnimate 和 mAnimate2 中的执行返回给 UI 线程? 我编辑问题。活动比这更复杂,我只写了必要的,以帮助您专注于真正的问题。不是绕线,已经试过了 【参考方案1】:删除新的线程包装,只需在主线程中调用 mAnimate() 或 mAnimate2(),如下所示:
...
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
mAnimate();
);
button2.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
mAnimate2();
);
...
还有 mAnimate,可以这样优化 mAnimate2:
private void mAnimate()
t.startAnimation(anim_fadeIn);
private void mAnimate2()
e.startAnimation(anim_fadeIn);
【讨论】:
无论我将代码包装到多少个线程中。问题依然存在。【参考方案2】:您实际上所做的是将相同的动画注册到两个视图。如果您只想同时为一个视图设置动画,则必须首先清除另一个视图的动画,否则两者都会启动。例如
private void mAnimate()
e.clearAnimation();
t.startAnimation(anim_fadeIn);
private void mAnimate2()
t.clearAnimation();
e.startAnimation(anim_fadeIn);
【讨论】:
以上是关于两个视图,一个动画,但有一个问题的主要内容,如果未能解决你的问题,请参考以下文章
CALayer 旋转动画不适用于呈现的 ViewController
Swift:removefromSuperview 移除约束