MBH
MBH

Reputation: 16609

Textview not showing aftert couple of VISIBLE and INVISIBLE set

First, I used animation to hide and show TextView. I saw that using animation costing memory. So I used another way:

SetVisibility(VISIBLE) and SetVisibility(INVISIBLE) with TaskTimer

it works well and it performs better considering the memory.

The main issue is that after a restarting the timer for many times, the TextView disappear.

I need to restart the app to get it back again!

this is the code snippet:

myTimerForAnimation = new Timer();
myTimerForAnimation.scheduleAtFixedRate(new TimerTask() {
  @Override
  public void run() {
      runOnUiThread(new Runnable() // run on ui thread
      {
          public void run() {
              counter++;
              if (counter < 7) {
                  if (counter % 2 == 1) {
                      list_textView[x].setVisibility(View.INVISIBLE);

                  } else {
                      list_textView[x].setVisibility(View.VISIBLE);

                  }
              } else {
                  myTimerForAnimation.cancel();
                  myTimerForAnimation.purge();

                  list_textView[x].setVisibility(View.VISIBLE);
              }
          }
      });
  }
}, 1000, 600);

Upvotes: 0

Views: 68

Answers (2)

MBH
MBH

Reputation: 16609

thanks to @EE66 for the loop idea, I used this code to solve my problem:

private void animateView(final View view){
        for (int counter = 0; counter < 7; counter++) {
            long delay = counter * 1000;
            if (counter % 2 == 0) {
                view.postDelayed(new Runnable() {
                    public void run() {
                        view.setVisibility(View.VISIBLE);
                    }

                    ;
                }, delay);
            } else {
                view.postDelayed(new Runnable() {
                    public void run() {
                        view.setVisibility(View.INVISIBLE);
                    }

                    ;
                }, delay);
            }
        }
    }

Upvotes: 0

EE66
EE66

Reputation: 4651

Dont use Timer use handler,something like this:

// init the runnables
// the runnable should be members
Handler hanlder = new Handler();//If you arent on the UI thread pass a correct looper

for (int i=1; i<7 ; i++){
  long delay = i * 1000;
  if (i%2==0)
  {
     handler.postDelayed(mVisibleRunnable,delay);
  }else{
     handler.postDelayed(mInVisibleRunnable,delay);
  }
}

Whereas the get runnablebs should be memebers because if u choose to cancel the callbacks then call

handler.removeCallbacks(runnable);

Play with it. It should fix your issue.

Upvotes: 1

Related Questions