public int getFirstPositionOffset() { final View firstChild = getChildAt(0); if (firstChild == null) { return 0; } return firstChild.getTop(); }
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(KEY_SELECTED_YEAR, mCalendar.get(Calendar.YEAR)); outState.putInt(KEY_SELECTED_MONTH, mCalendar.get(Calendar.MONTH)); outState.putInt(KEY_SELECTED_DAY, mCalendar.get(Calendar.DAY_OF_MONTH)); outState.putInt(KEY_WEEK_START, mWeekStart); outState.putInt(KEY_YEAR_START, mMinYear); outState.putInt(KEY_YEAR_END, mMaxYear); outState.putInt(KEY_CURRENT_VIEW, mCurrentView); int listPosition = -1; if (mCurrentView == MONTH_AND_DAY_VIEW) { listPosition = mDayPickerView.getMostVisiblePosition(); } else if (mCurrentView == YEAR_VIEW) { listPosition = mYearPickerView.getFirstVisiblePosition(); outState.putInt(KEY_LIST_POSITION_OFFSET, mYearPickerView.getFirstPositionOffset()); } outState.putInt(KEY_LIST_POSITION, listPosition); }
/** * @param context */ public YearPickerView(Context context, DatePickerController controller) { super(context); mController = controller; mController.registerOnDateChangedListener(this); ViewGroup.LayoutParams frame = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); setLayoutParams(frame); Resources res = context.getResources(); mViewSize = res.getDimensionPixelOffset(R.dimen.date_picker_view_animator_height); mChildSize = res.getDimensionPixelOffset(R.dimen.year_label_height); setVerticalFadingEdgeEnabled(true); setFadingEdgeLength(mChildSize / 3); init(context); setOnItemClickListener(this); setSelector(new StateListDrawable()); setDividerHeight(0); onDateChanged(); }
mYearPickerView = new YearPickerView(activity, this); mDayPickerView.postSetSelection(listPosition); } else if (currentView == YEAR_VIEW) { mYearPickerView.postSetSelectionFromTop(listPosition, listPositionOffset);
@Override public void onDateChanged() { mAdapter.notifyDataSetChanged(); postSetSelectionCentered(mController.getSelectedDay().year - mController.getMinYear()); }
public void postSetSelectionFromTop(final int position, final int offset) { post(new Runnable() { @Override public void run() { setSelectionFromTop(position, offset); requestLayout(); } }); }
public void postSetSelectionCentered(final int position) { postSetSelectionFromTop(position, mViewSize / 2 - mChildSize / 2); }
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mController.tryVibrate(); TextViewWithCircularIndicator clickedView = (TextViewWithCircularIndicator) view; if (clickedView != null) { if (clickedView != mSelectedView) { if (mSelectedView != null) { mSelectedView.drawIndicator(false); mSelectedView.requestLayout(); } clickedView.drawIndicator(true); clickedView.requestLayout(); mSelectedView = clickedView; } mController.onYearSelected(getYearFromTextView(clickedView)); mAdapter.notifyDataSetChanged(); } }
mDelayAnimation = false; mYearPickerView.onDateChanged(); if (mCurrentView != viewIndex) { mMonthAndDayView.setSelected(false);
mYearPickerView = new YearPickerView(activity, this); mDayPickerView.postSetSelection(listPosition); } else if (currentView == YEAR_VIEW) { mYearPickerView.postSetSelectionFromTop(listPosition, listPositionOffset);
@Override public void onDateChanged() { mAdapter.notifyDataSetChanged(); postSetSelectionCentered(mController.getSelectedDay().year - mController.getMinYear()); }
public void postSetSelectionFromTop(final int position, final int offset) { post(new Runnable() { @Override public void run() { setSelectionFromTop(position, offset); requestLayout(); } }); }
public void postSetSelectionCentered(final int position) { postSetSelectionFromTop(position, mViewSize / 2 - mChildSize / 2); }
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mController.tryVibrate(); TextViewWithCircularIndicator clickedView = (TextViewWithCircularIndicator) view; if (clickedView != null) { if (clickedView != mSelectedView) { if (mSelectedView != null) { mSelectedView.drawIndicator(false); mSelectedView.requestLayout(); } clickedView.drawIndicator(true); clickedView.requestLayout(); mSelectedView = clickedView; } mController.onYearSelected(getYearFromTextView(clickedView)); mAdapter.notifyDataSetChanged(); } }
mDelayAnimation = false; mYearPickerView.onDateChanged(); if (mCurrentView != viewIndex) { mMonthAndDayView.setSelected(false);
/** * @param context */ public YearPickerView(Context context, DatePickerController controller) { super(context); mController = controller; mController.registerOnDateChangedListener(this); ViewGroup.LayoutParams frame = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); setLayoutParams(frame); Resources res = context.getResources(); mViewSize = res.getDimensionPixelOffset(R.dimen.date_picker_view_animator_height); mChildSize = res.getDimensionPixelOffset(R.dimen.year_label_height); setVerticalFadingEdgeEnabled(false); setFadingEdgeLength(mChildSize / 3); init(context); setOnItemClickListener(this); setSelector(new StateListDrawable()); setDividerHeight(0); onDateChanged(); }
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(KEY_SELECTED_YEAR, mCalendar.get(Calendar.YEAR)); outState.putInt(KEY_SELECTED_MONTH, mCalendar.get(Calendar.MONTH)); outState.putInt(KEY_SELECTED_DAY, mCalendar.get(Calendar.DAY_OF_MONTH)); outState.putInt(KEY_WEEK_START, mWeekStart); outState.putInt(KEY_YEAR_START, mMinYear); outState.putInt(KEY_YEAR_END, mMaxYear); outState.putInt(KEY_CURRENT_VIEW, mCurrentView); int listPosition = -1; if (mCurrentView == MONTH_AND_DAY_VIEW) { listPosition = mDayPickerView.getMostVisiblePosition(); } else if (mCurrentView == YEAR_VIEW) { listPosition = mYearPickerView.getFirstVisiblePosition(); outState.putInt(KEY_LIST_POSITION_OFFSET, mYearPickerView.getFirstPositionOffset()); } outState.putInt(KEY_LIST_POSITION, listPosition); outState.putSerializable(KEY_MIN_DATE, mMinDate); outState.putSerializable(KEY_MAX_DATE, mMaxDate); }
public int getFirstPositionOffset() { final View firstChild = getChildAt(0); if (firstChild == null) { return 0; } return firstChild.getTop(); }