コード例 #1
0
 /**
  * 松开的时候
  *
  * @param move
  */
 private void actionUp(int move) {
   int newMove = 0;
   if (move > 0) {
     for (int i = 0; i < itemList.size(); i++) {
       if (itemList.get(i).isSelected()) {
         newMove = (int) itemList.get(i).moveToSelected();
         if (onSelectListener != null)
           onSelectListener.endSelect(itemList.get(i).id, itemList.get(i).itemText);
         break;
       }
     }
   } else {
     for (int i = itemList.size() - 1; i >= 0; i--) {
       if (itemList.get(i).isSelected()) {
         newMove = (int) itemList.get(i).moveToSelected();
         if (onSelectListener != null)
           onSelectListener.endSelect(itemList.get(i).id, itemList.get(i).itemText);
         break;
       }
     }
   }
   for (ItemObject item : itemList) {
     item.newY(move + 0);
   }
   slowMove(newMove);
   Message rMessage = new Message();
   rMessage.what = REFRESH_VIEW;
   handler.sendMessage(rMessage);
 }
コード例 #2
0
 private void doSelect(TagView child, int position) {
   if (mAutoSelectEffect) {
     if (!child.isChecked()) {
       // 处理max_select=1的情况
       if (mSelectedMax == 1 && mSelectedView.size() == 1) {
         Iterator<Integer> iterator = mSelectedView.iterator();
         Integer preIndex = iterator.next();
         TagView pre = (TagView) getChildAt(preIndex);
         pre.setChecked(false);
         child.setChecked(true);
         mSelectedView.remove(preIndex);
         mSelectedView.add(position);
       } else {
         if (mSelectedMax > 0 && mSelectedView.size() >= mSelectedMax) return;
         child.setChecked(true);
         mSelectedView.add(position);
       }
     } else {
       child.setChecked(false);
       mSelectedView.remove(position);
     }
     if (mOnSelectListener != null) {
       mOnSelectListener.onSelected(new HashSet<Integer>(mSelectedView));
     }
   }
 }
コード例 #3
0
 /** 滑动监听 */
 private void onSelectListener() {
   if (onSelectListener == null) return;
   for (ItemObject item : itemList) {
     if (item.isSelected()) {
       onSelectListener.selecting(item.id, item.itemText);
     }
   }
 }
コード例 #4
0
 /** 不能为空,必须有选项 */
 private void noEmpty() {
   if (!noEmpty) return;
   for (ItemObject item : itemList) {
     if (item.isSelected()) return;
   }
   int move = (int) itemList.get(0).moveToSelected();
   if (move < 0) {
     defaultMove(move);
   } else {
     defaultMove((int) itemList.get(itemList.size() - 1).moveToSelected());
   }
   for (ItemObject item : itemList) {
     if (item.isSelected()) {
       if (onSelectListener != null) onSelectListener.endSelect(item.id, item.itemText);
       break;
     }
   }
 }
コード例 #5
0
 private void performSelect(int position) {
   if (mSelectListener != null) mSelectListener.onSelect(position);
 }
コード例 #6
0
ファイル: PageSwitcher.java プロジェクト: RankoR/Xabber-Plus
  /**
   * Updates scrolling, creates views if necessary .
   *
   * @param layout whether we need to update layout (remeasure).
   */
  private void update(boolean layout) {
    // Process data change.
    final int count = getCount();
    if (dataChanged) {
      if (previousSelectedObject != null)
        for (int position = 0; position < count; position++)
          if (adapter.getItem(position).equals(previousSelectedObject)) {
            selectedPosition = position;
            if (LOG) LogManager.i(this, "Found selected position: " + selectedPosition);
            break;
          }
      selectedPosition = correntPosition(selectedPosition);
    }

    // Process scrolling.
    final int width = getWidth();
    int scrollX = getScrollX();
    if (width != 0) {
      while (scrollX >= width) {
        scrollX -= width;
        initialScrollX -= width;
        selectedPosition = correntPosition(selectedPosition + 1);
        if (LOG) LogManager.i(this, "scrollX >= width: " + selectedPosition);
      }
      while (scrollX <= -width) {
        scrollX += width;
        initialScrollX += width;
        selectedPosition = correntPosition(selectedPosition - 1);
        if (LOG) LogManager.i(this, "scrollX <= -width: " + selectedPosition);
      }
    }

    // Process low count.
    if (count < 2) {
      if (LOG) LogManager.i(this, "count < 2");
      dragWasCanceled = true;
      isBeingDragged = false;
      if (!scroller.isFinished()) scroller.abortAnimation();
      if (scrollX != 0) scrollX = 0;
    }

    // Store focus.
    final View focus;
    if (selectedView != null) focus = selectedView.findFocus();
    else focus = null;

    // Process selected view.
    if (count == 0) {
      if (LOG) LogManager.i(this, "count == 0");
      selectedPosition = -1;
      if (selectedView != null) {
        if (onSelectListener != null) onSelectListener.onUnselect();
        adapter.saveState(selectedView);
        removeViewInLayout(selectedView);
        selectedView = null;
        // We must invalidate to update view.
        invalidate();
      }
    } else {
      if (LOG) LogManager.i(this, "count > 0");

      // Exchange visible and selected views and previous objects.
      final Object selectedObject = adapter.getItem(selectedPosition);
      final boolean exchange =
          previousSelectedObject != null
              && previousVisibleObject != null
              && !previousSelectedObject.equals(selectedObject)
              && previousVisibleObject.equals(selectedObject);
      if (exchange) {
        Object tempObject = previousSelectedObject;
        previousSelectedObject = previousVisibleObject;
        previousVisibleObject = tempObject;
        View view = selectedView;
        selectedView = visibleView;
        visibleView = view;
      }

      // Update view.
      final boolean update =
          dataChanged
              || previousSelectedObject == null
              || !previousSelectedObject.equals(selectedObject);
      selectedView = getView(selectedPosition, 0, selectedView, update, layout);
      previousSelectedObject = selectedObject;
      if (update || exchange) if (onSelectListener != null) onSelectListener.onSelect();

      // Enable focusable.
      if (selectedView instanceof ViewGroup)
        ((ViewGroup) selectedView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
      else selectedView.setFocusable(true);
    }

    // Process visible (not selected) view.
    if (count < 2) {
      if (LOG) LogManager.i(this, "count < 2 || scrollX == 0");
      visiblePosition = -1;
      if (visibleView != null) {
        adapter.saveState(visibleView);
        removeViewInLayout(visibleView);
        visibleView = null;
      }
    } else {
      // Calculate position.
      final int visibleX;
      if (scrollX > 0) {
        if (LOG) LogManager.i(this, "scrollX > 0");
        visiblePosition = correntPosition(selectedPosition + 1);
        visibleX = width;
      } else {
        if (LOG) LogManager.i(this, "scrollX < 0");
        visiblePosition = correntPosition(selectedPosition - 1);
        visibleX = -width;
      }

      // Update view.
      final Object visibleObject = adapter.getItem(visiblePosition);
      final boolean update =
          dataChanged
              || previousVisibleObject == null
              || !previousVisibleObject.equals(visibleObject);
      visibleView = getView(visiblePosition, visibleX, visibleView, update, layout);
      previousVisibleObject = visibleObject;

      // Disable focusable.
      if (visibleView instanceof ViewGroup)
        ((ViewGroup) visibleView).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
      else visibleView.setFocusable(false);
    }

    // Restore focus by ID.
    if (selectedView != null) {
      View target;
      if (focus == null || focus.getId() == View.NO_ID) target = null;
      else target = selectedView.findViewById(focus.getId());
      if (target == null) target = selectedView.findViewById(R.id.chat_input);
      target.requestFocus();
    }

    if (scrollX == 0) {
      if (LOG) LogManager.i(this, "Scroll X == 0");
      hidePages();
    } else {
      if (LOG) LogManager.i(this, "Scroll X != 0");
      showPages();
    }

    super.scrollTo(scrollX, 0);

    dataChanged = false;
  }