title: View not displaying with visibility change
body: <p>I have a property animation set for the alpha channels of several views which is not working as I think it should. Essentially I have 3 <code>TextView</code> derivatives, a <code>TextView</code> and two <code>Views</code> which I want to initially be hidden, set their data when it comes in and then animate them in. I do this with several other views in the layout and occasionally they have the same problem although it is very infrequent. Most of the time the <code>TextView</code> and one of the <code>Views</code> simple does not appear even though the data for the <code>TextView</code> is valid according to its Logcat output. It is always the same two views and they do rarely show up but not an any predictable manner I have been able to find. The section of the layout file and all the animation code follows. Please note that as per <a href="https://stackoverflow.com/questions/11386953/alphaanimation-does-not-work">this question</a>, I have set the visibility to invisible in the layout and set it to visible right before starting the animation.</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>Calling `View.bringToFront() on the views which are having trouble has no visible effect. Also, not executing the animation but instead just changing the visibility of the views from invisible to visible does not show them. Removing the visibility change code and android:visibility="invisible" tag from the layout also does not make the view display.</p>
  
  <p><strong>THE LAYOUT</strong></p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:qwerjk="http://schemas.android.com/apk/res/tenkiv.app"
      android:id="@+id/container"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:paddingBottom="8dp"
      android:paddingLeft="8dp"
      android:paddingRight="8dp" &gt;
  
      &lt;tenkiv.view.widget.MagicTextView
          android:id="@+id/hourMinuteValueTv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_toLeftOf="@+id/secondValueTv"
          android:lines="1"
          android:textSize="77sp"
          android:visibility="invisible"
          qwerjk:strokeColor="@color/light_text_outline"
          qwerjk:strokeJoinStyle="miter"
          qwerjk:strokeWidth="1.8" /&gt;
  
      &lt;tenkiv.view.widget.MagicTextView
          android:id="@+id/secondValueTv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignBaseline="@+id/hourMinuteValueTv"
          android:layout_toLeftOf="@+id/amPmValueTv"
          android:textSize="39sp"
          android:visibility="invisible"
          qwerjk:strokeColor="@color/light_text_outline"
          qwerjk:strokeJoinStyle="round"
          qwerjk:strokeWidth="1.3" /&gt;
  
      &lt;tenkiv.view.widget.MagicTextView
          android:id="@+id/amPmValueTv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignBaseline="@+id/hourMinuteValueTv"
          android:layout_alignParentRight="true"
          android:textSize="31sp"
          android:visibility="invisible"
          qwerjk:strokeColor="@color/light_text_outline"
          qwerjk:strokeJoinStyle="round"
          qwerjk:strokeWidth="1.3" /&gt;
  
      &lt;tenkiv.view.widget.MagicTextView
          android:id="@+id/dateValueTv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_below="@+id/hourMinuteValueTv"
          android:textSize="19sp"
          android:visibility="invisible"
          qwerjk:strokeColor="@color/light_text_outline"
          qwerjk:strokeJoinStyle="round"
          qwerjk:strokeWidth="0.9" /&gt;
  
      &lt;View
          android:id="@+id/lineTimeConditionSepView"
          android:layout_width="290dp"
          android:layout_height="3dp"
          android:layout_alignParentRight="true"
          android:layout_below="@id/dateValueTv"
          android:layout_marginTop="4dp"
          android:background="@color/holo_text"
          android:visibility="invisible" /&gt;
  
      &lt;View
          android:id="@+id/lineTimeConditionSepViewOutline2"
          android:layout_width="290dp"
          android:layout_height="1dp"
          android:layout_alignBottom="@id/lineTimeConditionSepView"
          android:layout_alignLeft="@id/lineTimeConditionSepView"
          android:layout_marginTop="0.5dp"
          android:background="@color/location_area_dark_green"
          android:visibility="invisible" /&gt;
  
  ---THE REST OF THE LAYOUT---
  </code></pre>
  
  <p><strong>THE METHODS IN MY FRAGMENT TO ANIMATE IT</strong></p>
  
  <pre><code>public void onUpdateClock(final String time, final String seconds, final String ampm, final String date) {
      Activity activity = getActivity(); //Used to make sure we dont update the clock with the activity dead
      if (activity != null) {
          if (mHourMinuteValue == null) { //These are all used together so this should be safe
              mHourMinuteValue = (MagicTextView) activity.findViewById(R.id.hourMinuteValueTv);
              mSecondValue = (MagicTextView) activity.findViewById(R.id.secondValueTv);
              mAmPmValue = (MagicTextView) activity.findViewById(R.id.amPmValueTv);
              mDateValue = (TextView) activity.findViewById(R.id.dateValueTv);
              mTimeConditionsLine = activity.findViewById(R.id.lineTimeConditionSepView);
              mTimeConditionsOutline2 = activity.findViewById(R.id.lineTimeConditionSepViewOutline2);
              mTimeInAnim = createAnimation(CLOCK_IN);
          }
      }
      if (mHourMinuteValue == null) {
          Log.e(TAG, "Clock text views were null!");
          return;
      }
      uiHandler.post(new Runnable() {
          public void run() {
              mHourMinuteValue.setText(time);
              mSecondValue.setText(seconds);
              if (ampm != null) {
                  mAmPmValue.setText(ampm);
              } else {
                  mAmPmValue.setText(ClockUICallbacks.EMPTY_AMPM);
              }
              mDateValue.setText(date);
              mDateValue.bringToFront();
              if (mFadeInClock) {
                  setClockVisibility(true);
                  mTimeInAnim.start();
                  mFadeInClock = false;
              }
          }
      });
  
  private void setClockVisibility(boolean visible) {
          int flag;
          if (visible) {
              flag = View.VISIBLE;
          } else {
              flag = View.INVISIBLE;
          }
          mHourMinuteValue.setVisibility(flag);
          mSecondValue.setVisibility(flag);
          mAmPmValue.setVisibility(flag);
          mDateValue.setVisibility(flag);
          mTimeConditionsLine.setVisibility(flag);
          mTimeConditionsOutline2.setVisibility(flag);
      }
  
  private AnimatorSet createAnimation(int type) {
          AnimatorSet set = new AnimatorSet();
          switch (type) {
          case CLOCK_IN:
              ValueAnimator hourMinInAnim = ObjectAnimator.ofFloat(mHourMinuteValue, "alpha", INVISIBLE, OPAQUE);
              hourMinInAnim.setDuration(FADE_IN_DURATION);
              ValueAnimator secondInAnim = ObjectAnimator.ofFloat(mSecondValue, "alpha", INVISIBLE, OPAQUE);
              secondInAnim.setDuration(FADE_IN_DURATION);
              ValueAnimator amPmInAnim = ObjectAnimator.ofFloat(mAmPmValue, "alpha", INVISIBLE, OPAQUE);
              amPmInAnim.setDuration(FADE_IN_DURATION);
              ValueAnimator dateInAnim = ObjectAnimator.ofFloat(mDateValue, "alpha", INVISIBLE, OPAQUE);
              dateInAnim.setDuration(FADE_IN_DURATION);
              ValueAnimator timeLine1InAnim = ObjectAnimator.ofFloat(mTimeConditionsLine, "alpha", INVISIBLE, OPAQUE);
              timeLine1InAnim.setDuration(FADE_IN_DURATION);
              ValueAnimator timeLine2InAnim = ObjectAnimator.ofFloat(mTimeConditionsOutline2, "alpha", INVISIBLE, OPAQUE);
              timeLine2InAnim.setDuration(FADE_IN_DURATION);
              set.playTogether(hourMinInAnim, secondInAnim, amPmInAnim, dateInAnim, timeLine1InAnim, timeLine2InAnim);
              return set;
          /*SOME OTHER ANIMATIONS*/
          }
          return null;
      }
  </code></pre>
  
  <p>Any other information which might be needed please let me know.</p>
  
  <p>Thanks, Jared</p>