/** * 松开的时候 * * @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); }
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)); } } }
/** 滑动监听 */ private void onSelectListener() { if (onSelectListener == null) return; for (ItemObject item : itemList) { if (item.isSelected()) { onSelectListener.selecting(item.id, item.itemText); } } }
/** 不能为空,必须有选项 */ 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; } } }
private void performSelect(int position) { if (mSelectListener != null) mSelectListener.onSelect(position); }
/** * 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; }