Esempio n. 1
0
  @Override
  public void notifyAppearStateChange(
      int firstVisible, int lastVisible, int directionX, int directionY) {
    // notify appear state
    Iterator<AppearanceHelper> it = mAppearComponents.values().iterator();
    String direction = directionY > 0 ? "up" : "down";
    if (getOrientation() == Constants.Orientation.HORIZONTAL) {
      direction = directionX > 0 ? "left" : "right";
    }

    while (it.hasNext()) {
      AppearanceHelper item = it.next();
      WXComponent component = item.getAwareChild();

      if (!item.isWatch()) {
        continue;
      }

      boolean outOfVisibleRange =
          item.getCellPositionINScollable() < firstVisible
              || item.getCellPositionINScollable() > lastVisible;

      View view = component.getHostView();
      if (view == null) {
        continue;
      }

      boolean visible = (!outOfVisibleRange) && item.isViewVisible();

      int result = item.setAppearStatus(visible);
      if (WXEnvironment.isApkDebugable()) {
        WXLogUtils.d("appear", "item " + item.getCellPositionINScollable() + " result " + result);
      }
      if (result == AppearanceHelper.RESULT_NO_CHANGE) {
        continue;
      }
      component.notifyAppearStateChange(
          result == AppearanceHelper.RESULT_APPEAR
              ? Constants.Event.APPEAR
              : Constants.Event.DISAPPEAR,
          direction);
    }
  }