Кнопки «Хотите» не нажимаются, когда они исчезают, и наоборот

У меня есть строка таблицы с двумя кнопками, и я использую анимацию для постепенного исчезновения всей строки таблицы после того, как 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;
        }
    });

person Mitch Keith    schedule 06.07.2012    source источник


Ответы (2)


Хорошо, похоже, здесь есть несколько проблем.

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;
    }
});

Надеюсь, я помог :)

person frogmanx    schedule 06.07.2012
comment
Спасибо! Это именно то, на что я надеялся. - person Mitch Keith; 07.07.2012

Поток с методом ожидания() должен делать то, что Вы хотите. Вам нужно установить смещение не только для анимации, но и для View.GONE.

Это также может помочь:

myButton.setEnabled(false);

Вам просто нужно включить / отключить кнопки, когда это необходимо.

person cyborg86pl    schedule 06.07.2012