1

我有一个带有两个按钮的表格行,并且在三秒钟内没有触摸 WebView 后,我使用动画将整个表格行淡出。触摸 WebView 后,表格行会淡入。但是,我注意到虽然表格行淡出(并且按钮不可见),但按钮仍然是可点击的。我尝试在淡出动画之后立即将表格行可见性设置为 View.GONE,然后在淡入动画之前将可见性设置为 View.VISIBLE,但无济于事;当我将它设置为 View.VISIBLE 时,它似乎被忽略了,因为一旦表格行消失,它就不会在屏幕触摸时重新出现;

TableRow tr;
Animation fade_in = new AlphaAnimation(0.0f, 1.0f);
Animation fade_out = new AlphaAnimation(1.0f, 0.0f);
WebView loss_source_dest;
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.loss);
    getStrings();
    findIDs();


    fade_in.setDuration(750);
    fade_out.setDuration(750);
    fade_out.setStartOffset(3000);
    initial_fade.setDuration(750);
    fade_in.setFillAfter(true);
    fade_out.setFillAfter(true);
    tr.startAnimation(fade_out);
    loss_source_dest.setOnTouchListener(new View.OnTouchListener() 
    {
        public boolean onTouch(View v, MotionEvent event) 
        {
            tr.setVisibility(v.VISIBLE);
            tr.startAnimation(fade_in);
            tr.startAnimation(fade_out);
            tr.setVisibility(v.GONE);
            return false;
        }
    });
4

2 回答 2

0

带有 wait() 方法的线程应该做你想做的事。您不仅需要为动画设置偏移量,还需要为 View.GONE 设置偏移量。

这也可以帮助:

myButton.setEnabled(false);

您只需要在需要时启用/禁用按钮。

于 2012-07-06T00:54:54.897 回答
0

好的,这里似乎有一些问题。

1) 要修复在调用 setVisibility(View.GONE) 后仍可点击的按钮,这里有一个解决方案... android View with View.GONE 仍然接收 onTouch 和 onClick。(我已尝试将此添加到您的解决方案中)。

2) startAnimation 方法调用是非阻塞的,因此最好的解决方案是使用 AnimationListener 来检测哪个动画已完成,然后将按钮的可见性设置为 View.GONE。

TableRow tr;
Animation fade_in = new AlphaAnimation(0.0f, 1.0f);
Animation fade_out = new AlphaAnimation(1.0f, 0.0f);
WebView loss_source_dest;

public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.loss);
getStrings();
findIDs();

fade_in.setDuration(750);

fade_out.setDuration(750);
fade_out.setStartOffset(3000);
fade_out.setAnimationListener(new AnimationListener(){
      public void onAnimationStart(Animation anim)
      {
      }
      public void onAnimationRepeat(Animation anim)
      {
      }
      public void onAnimationEnd(Animation anim)
      {
          tr.setVisibility(View.GONE);
      }
});
initial_fade.setDuration(750);
// fade_in.setFillAfter(true); (Removed)
// fade_out.setFillAfter(true); (Removed)

tr.startAnimation(fade_out);
loss_source_dest.setOnTouchListener(new View.OnTouchListener() 
{
    public boolean onTouch(View v, MotionEvent event) 
    {
        tr.setVisibility(v.VISIBLE);
        tr.startAnimation(fade_in);
        tr.startAnimation(fade_out);
        return false;
    }
});

我希望我有帮助:)

于 2012-07-06T04:33:52.953 回答