Пример #1
0
 @Override
 public void setAlpha(int alpha) {
   if (mAlpha != alpha) {
     mAlpha = alpha;
     if (mCurrDrawable != null) {
       if (mEnterAnimationEnd == 0) {
         mCurrDrawable.setAlpha(alpha);
       } else {
         animate(false);
       }
     }
   }
 }
Пример #2
0
  public boolean selectDrawable(int idx) {
    if (idx == mCurIndex) {
      return false;
    }

    final long now = SystemClock.uptimeMillis();

    if (DEBUG)
      android.util.Log.i(
          TAG,
          toString()
              + " from "
              + mCurIndex
              + " to "
              + idx
              + ": exit="
              + mDrawableContainerState.mExitFadeDuration
              + " enter="
              + mDrawableContainerState.mEnterFadeDuration);

    if (mDrawableContainerState.mExitFadeDuration > 0) {
      if (mLastDrawable != null) {
        mLastDrawable.setVisible(false, false);
      }
      if (mCurrDrawable != null) {
        mLastDrawable = mCurrDrawable;
        mExitAnimationEnd = now + mDrawableContainerState.mExitFadeDuration;
      } else {
        mLastDrawable = null;
        mExitAnimationEnd = 0;
      }
    } else if (mCurrDrawable != null) {
      mCurrDrawable.setVisible(false, false);
    }

    if (idx >= 0 && idx < mDrawableContainerState.mNumChildren) {
      Drawable d = mDrawableContainerState.mDrawables[idx];
      mCurrDrawable = d;
      mCurIndex = idx;
      if (d != null) {
        if (mDrawableContainerState.mEnterFadeDuration > 0) {
          mEnterAnimationEnd = now + mDrawableContainerState.mEnterFadeDuration;
        } else {
          d.setAlpha(mAlpha);
        }
        d.setVisible(isVisible(), true);
        d.setDither(mDrawableContainerState.mDither);
        d.setColorFilter(mColorFilter);
        d.setState(getState());
        d.setLevel(getLevel());
        d.setBounds(getBounds());
      }
    } else {
      mCurrDrawable = null;
      mCurIndex = -1;
    }

    if (mEnterAnimationEnd != 0 || mExitAnimationEnd != 0) {
      if (mAnimationRunnable == null) {
        mAnimationRunnable =
            new Runnable() {
              @Override
              public void run() {
                animate(true);
                invalidateSelf();
              }
            };
      } else {
        unscheduleSelf(mAnimationRunnable);
      }
      // Compute first frame and schedule next animation.
      animate(true);
    }

    invalidateSelf();

    return true;
  }