package com.zyyoona7.picker; import android.content.Context; import android.graphics.Typeface; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.FloatRange; import android.support.annotation.Nullable; import android.support.annotation.RawRes; import android.support.v4.content.ContextCompat; import android.support.v7.widget.AppCompatTextView; import android.util.AttributeSet; import com.zyyoona7.picker.base.BaseDatePickerView; import com.zyyoona7.wheel.WheelView; /** * 日期 选择View * * @author zyyoona7 * @version v1.0.0 * @since 2018/8/21. */ public class DatePickerView extends BaseDatePickerView { private AppCompatTextView mYearTv; private AppCompatTextView mMonthTv; private AppCompatTextView mDayTv; public DatePickerView(Context context) { this(context, null); } public DatePickerView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public DatePickerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { super.onFinishInflate(); mYearTv = findViewById(R.id.tv_year); mMonthTv = findViewById(R.id.tv_month); mDayTv = findViewById(R.id.tv_day); } @Override protected int getDatePickerViewLayoutId() { return R.layout.layout_date_picker_view; } @Override protected int getYearWheelViewId() { return R.id.wv_year; } @Override protected int getMonthWheelViewId() { return R.id.wv_month; } @Override protected int getDayWheelViewId() { return R.id.wv_day; } /** * 设置标签字体大小 * * @param textSize 字体大小 */ public void setLabelTextSize(float textSize) { mYearTv.setTextSize(textSize); mMonthTv.setTextSize(textSize); mDayTv.setTextSize(textSize); } /** * 设置标签字体大小 * * @param unit 单位 * @param textSize 字体大小 */ public void setLabelTextSize(int unit, float textSize) { mYearTv.setTextSize(unit, textSize); mMonthTv.setTextSize(unit, textSize); mDayTv.setTextSize(unit, textSize); } /** * 设置标签字体颜色 * * @param textColorRes 颜色资源 */ public void setLabelTextColorRes(@ColorRes int textColorRes) { setLabelTextColor(ContextCompat.getColor(getContext(), textColorRes)); } /** * 设置标签字体颜色 * * @param textColor 颜色值 */ public void setLabelTextColor(@ColorInt int textColor) { mYearTv.setTextColor(textColor); mMonthTv.setTextColor(textColor); mDayTv.setTextColor(textColor); } /** * 设置是否显示标签 * * @param isShowLabel 是否显示标签 */ public void setShowLabel(boolean isShowLabel) { if (isShowLabel) { setLabelVisibility(VISIBLE); } else { setLabelVisibility(GONE); } } /** * 统一设置标签可见性 * * @param visibility 可见性值 */ private void setLabelVisibility(int visibility) { mYearTv.setVisibility(visibility); mMonthTv.setVisibility(visibility); mDayTv.setVisibility(visibility); } /** * 隐藏 日 */ public void hideDayItem() { setItemVisibility(GONE, mDayWv, mDayTv); } /** * 显示 日 */ public void showDayItem() { setItemVisibility(VISIBLE, mDayWv, mDayTv); } /** * 隐藏 月 */ public void hideMonthItem() { setItemVisibility(GONE, mMonthWv, mMonthTv); } /** * 显示 月 */ public void showMonthItem() { setItemVisibility(VISIBLE, mMonthWv, mMonthTv); } /** * 隐藏 年 */ public void hideYearItem() { setItemVisibility(GONE, mYearWv, mYearTv); } /** * 显示 年 */ public void showYearItem() { setItemVisibility(VISIBLE, mYearWv, mYearTv); } /** * 设置 item可见性 * * @param visibility 可见性值 * @param wheelView WheelView * @param textView labelView */ private void setItemVisibility(int visibility, WheelView wheelView, AppCompatTextView textView) { if (wheelView != null) { wheelView.setVisibility(visibility); } if (textView != null) { textView.setVisibility(visibility); } } /** * 设置年份范围 * * @param start 起始年 * @param end 结束年 */ public void setYearRange(int start, int end) { mYearWv.setYearRange(start, end); } /** * 获取选中的年份 * * @return 选中的年份 */ public int getSelectedYear() { return mYearWv.getSelectedYear(); } /** * 设置选中的年份 * * @param year 年 */ public void setSelectedYear(int year) { setSelectedYear(year, false); } /** * 设置选中的年份 * * @param year 年 * @param isSmoothScroll 是否平滑滚动 */ public void setSelectedYear(int year, boolean isSmoothScroll) { setSelectedYear(year, isSmoothScroll, 0); } /** * 设置选中的年份 * * @param year 年 * @param isSmoothScroll 是否平滑滚动 * @param smoothDuration 平滑滚动持续时间 */ public void setSelectedYear(int year, boolean isSmoothScroll, int smoothDuration) { mYearWv.setSelectedYear(year, isSmoothScroll, smoothDuration); } /** * 获取选中的月份 * * @return 选中的月份 */ public int getSelectedMonth() { return mMonthWv.getSelectedMonth(); } /** * 设置选中的月份 * * @param month 月 */ public void setSelectedMonth(int month) { mMonthWv.setSelectedMonth(month, false); } /** * 设置选中的月份 * * @param month 月 * @param isSmoothScroll 是否平滑滚动 */ public void setSelectedMonth(int month, boolean isSmoothScroll) { mMonthWv.setSelectedMonth(month, isSmoothScroll, 0); } /** * 设置选中的月份 * * @param month 月 * @param isSmoothScroll 是否平滑滚动 * @param smoothDuration 平滑滚动持续时间 */ public void setSelectedMonth(int month, boolean isSmoothScroll, int smoothDuration) { mMonthWv.setSelectedMonth(month, isSmoothScroll, smoothDuration); } /** * 获取选中的日 * * @return 选中的日 */ public int getSelectedDay() { return mDayWv.getSelectedDay(); } /** * 设置选中的日 * * @param day 日 */ public void setSelectedDay(int day) { mDayWv.setSelectedDay(day, false); } /** * 设置选中的日 * * @param day 日 * @param isSmoothScroll 是否平滑滚动 */ public void setSelectedDay(int day, boolean isSmoothScroll) { mDayWv.setSelectedDay(day, isSmoothScroll, 0); } /** * 设置选中的日 * * @param day 日 * @param isSmoothScroll 是否平滑滚动 * @param smoothDuration 平滑滚动持续时间 */ public void setSelectedDay(int day, boolean isSmoothScroll, int smoothDuration) { mDayWv.setSelectedDay(day, isSmoothScroll, smoothDuration); } /** * 获取选中的日期 * * @return 选中的日期 格式 2018-08-22 */ public String getSelectedDate() { return getSelectedYear() + "-" + getSelectedMonth() + "-" + getSelectedDay(); } /** * 设置当数据变化时,是否重置选中下标到第一个 * * @param isResetSelectedPosition 当数据变化时,是否重置选中下标到第一个 */ public void setResetSelectedPosition(boolean isResetSelectedPosition) { mYearWv.setResetSelectedPosition(isResetSelectedPosition); mMonthWv.setResetSelectedPosition(isResetSelectedPosition); mDayWv.setResetSelectedPosition(isResetSelectedPosition); } /** * 设置设置WheelView 可见item数 * * @param visibleItems 可见item数 */ public void setVisibleItems(int visibleItems) { mYearWv.setVisibleItems(visibleItems); mMonthWv.setVisibleItems(visibleItems); mDayWv.setVisibleItems(visibleItems); } /** * 设置是否自动调整字体大小,以显示完全 * * @param isAutoFitTextSize 是否自动调整字体大小 */ public void setAutoFitTextSize(boolean isAutoFitTextSize) { mYearWv.setAutoFitTextSize(isAutoFitTextSize); mMonthWv.setAutoFitTextSize(isAutoFitTextSize); mDayWv.setAutoFitTextSize(isAutoFitTextSize); } /** * 设置WheelView 字体大小 * * @param textSize 字体大小 */ public void setTextSize(float textSize) { setTextSize(textSize, false); } /** * 设置WheelView 字体大小 * * @param textSize 字体大小 * @param isDp 单位是否是dp */ public void setTextSize(float textSize, boolean isDp) { mYearWv.setTextSize(textSize, isDp); mMonthWv.setTextSize(textSize, isDp); mDayWv.setTextSize(textSize, isDp); } /** * 设置WheelView 字体 * * @param tf 字体 */ public void setTypeface(Typeface tf) { mYearWv.setTypeface(tf); mMonthWv.setTypeface(tf); mDayWv.setTypeface(tf); } /** * 设置WheelView 文字距离边界的外边距 * * @param textBoundaryMargin 外边距值 * @param isDp 单位是否为 dp */ public void setTextBoundaryMargin(float textBoundaryMargin, boolean isDp) { mYearWv.setTextBoundaryMargin(textBoundaryMargin, isDp); mMonthWv.setTextBoundaryMargin(textBoundaryMargin, isDp); mDayWv.setTextBoundaryMargin(textBoundaryMargin, isDp); } /** * 设置WheelView 未选中item文字颜色 * * @param textColorRes 颜色资源 */ public void setNormalItemTextColorRes(@ColorRes int textColorRes) { setNormalItemTextColor(ContextCompat.getColor(getContext(), textColorRes)); } /** * 设置WheelView 未选中item文字颜色 * * @param textColor 颜色 */ public void setNormalItemTextColor(@ColorInt int textColor) { mYearWv.setNormalItemTextColor(textColor); mMonthWv.setNormalItemTextColor(textColor); mDayWv.setNormalItemTextColor(textColor); } /** * 设置WheelView 选中item文字颜色 * * @param textColorRes 颜色资源 */ public void setSelectedItemTextColorRes(@ColorRes int textColorRes) { setSelectedItemTextColor(ContextCompat.getColor(getContext(), textColorRes)); } /** * 设置WheelView 选中item文字颜色 * * @param textColor 颜色 */ public void setSelectedItemTextColor(@ColorInt int textColor) { mYearWv.setSelectedItemTextColor(textColor); mMonthWv.setSelectedItemTextColor(textColor); mDayWv.setSelectedItemTextColor(textColor); } /** * 设置WheelView 是否循环滚动 * * @param isCyclic 是否循环 */ public void setCyclic(boolean isCyclic) { mYearWv.setCyclic(isCyclic); mMonthWv.setCyclic(isCyclic); mDayWv.setCyclic(isCyclic); } /** * 设置WheelView 行间距 * * @param lineSpacing 行间距 */ public void setLineSpacing(float lineSpacing) { setLineSpacing(lineSpacing, false); } /** * 设置WheelView 行间距 * * @param lineSpacing 行间距 * @param isDp 单位是否是dp */ public void setLineSpacing(float lineSpacing, boolean isDp) { mYearWv.setLineSpacing(lineSpacing, isDp); mMonthWv.setLineSpacing(lineSpacing, isDp); mDayWv.setLineSpacing(lineSpacing, isDp); } /** * 设置WheelView 是否开启滚动音效 * * @param isSoundEffect 是否开启滚动音效 */ public void setSoundEffect(boolean isSoundEffect) { mYearWv.setSoundEffect(isSoundEffect); mMonthWv.setSoundEffect(isSoundEffect); mDayWv.setSoundEffect(isSoundEffect); } /** * 设置WheelView 滚动音效资源 * * @param rawRes 资源 */ public void setSoundEffectResource(@RawRes int rawRes) { mYearWv.setSoundEffectResource(rawRes); mMonthWv.setSoundEffectResource(rawRes); mDayWv.setSoundEffectResource(rawRes); } /** * 设置WheelView 滚动音效播放音量 * * @param playVolume 播放音量 */ public void setPlayVolume(@FloatRange(from = 0.0, to = 1.0) float playVolume) { mYearWv.setPlayVolume(playVolume); mMonthWv.setPlayVolume(playVolume); mDayWv.setPlayVolume(playVolume); } /** * 设置WheelView 是否显示分割线 * * @param isShowDivider 是否显示分割线 */ public void setShowDivider(boolean isShowDivider) { mYearWv.setShowDivider(isShowDivider); mMonthWv.setShowDivider(isShowDivider); mDayWv.setShowDivider(isShowDivider); } /** * 设置WheelView 分割线颜色 * * @param dividerColorRes 颜色资源 */ public void setDividerColorRes(@ColorRes int dividerColorRes) { setDividerColor(ContextCompat.getColor(getContext(), dividerColorRes)); } /** * 设置WheelView 分割线颜色 * * @param dividerColor 颜色值 */ public void setDividerColor(@ColorInt int dividerColor) { mYearWv.setDividerColor(dividerColor); mMonthWv.setDividerColor(dividerColor); mDayWv.setDividerColor(dividerColor); } /** * 设置WheelView 分割线高度 * * @param dividerHeight 分割线高度 */ public void setDividerHeight(float dividerHeight) { setDividerHeight(dividerHeight, false); } /** * 设置WheelView 分割线高度 * * @param dividerHeight 分割线高度 * @param isDp 单位是否是dp */ public void setDividerHeight(float dividerHeight, boolean isDp) { mYearWv.setDividerHeight(dividerHeight, isDp); mMonthWv.setDividerHeight(dividerHeight, isDp); mDayWv.setDividerHeight(dividerHeight, isDp); } /** * 设置WheelView 分割线类型 * * @param dividerType 分割线类型 */ public void setDividerType(@WheelView.DividerType int dividerType) { mYearWv.setDividerType(dividerType); mMonthWv.setDividerType(dividerType); mDayWv.setDividerType(dividerType); } /** * 设置WheelView 自适应分割线类型时的分割线内边距 * * @param dividerPaddingForWrap 分割线内边距 * @param isDp 单位是否是dp */ public void setDividerPaddingForWrap(float dividerPaddingForWrap, boolean isDp) { mYearWv.setDividerPaddingForWrap(dividerPaddingForWrap, isDp); mMonthWv.setDividerPaddingForWrap(dividerPaddingForWrap, isDp); mDayWv.setDividerPaddingForWrap(dividerPaddingForWrap, isDp); } /** * 设置WheelView 是否绘制选中区域 * * @param isDrawSelectedRect 是否绘制选中区域 */ public void setDrawSelectedRect(boolean isDrawSelectedRect) { mYearWv.setDrawSelectedRect(isDrawSelectedRect); mMonthWv.setDrawSelectedRect(isDrawSelectedRect); mDayWv.setDrawSelectedRect(isDrawSelectedRect); } /** * 设置WheelView 选中区域颜色 * * @param selectedRectColorRes 颜色资源 */ public void setSelectedRectColorRes(@ColorRes int selectedRectColorRes) { setSelectedRectColor(ContextCompat.getColor(getContext(), selectedRectColorRes)); } /** * 设置WheelView 选中区域颜色 * * @param selectedRectColor 颜色值 */ public void setSelectedRectColor(@ColorInt int selectedRectColor) { mYearWv.setSelectedRectColor(selectedRectColor); mMonthWv.setSelectedRectColor(selectedRectColor); mDayWv.setSelectedRectColor(selectedRectColor); } /** * 设置WheelView 是否开启弯曲效果 * * @param isCurved 是否开启 */ public void setCurved(boolean isCurved) { mYearWv.setCurved(isCurved); mMonthWv.setCurved(isCurved); mDayWv.setCurved(isCurved); } /** * 设置弯曲(3D)效果左右圆弧效果方向 * * @param curvedArcDirection 左右圆弧效果方向 * {@link WheelView#CURVED_ARC_DIRECTION_LEFT} * {@link WheelView#CURVED_ARC_DIRECTION_CENTER} * {@link WheelView#CURVED_ARC_DIRECTION_RIGHT} */ public void setCurvedArcDirection(@WheelView.CurvedArcDirection int curvedArcDirection) { mYearWv.setCurvedArcDirection(curvedArcDirection); mMonthWv.setCurvedArcDirection(curvedArcDirection); mDayWv.setCurvedArcDirection(curvedArcDirection); } /** * 设置弯曲(3D)效果左右圆弧偏移效果方向系数 * * @param curvedArcDirectionFactor 左右圆弧偏移效果方向系数 * range 0.0-1.0 越大越明显 */ public void setCurvedArcDirectionFactor(@FloatRange(from = 0.0f, to = 1.0f) float curvedArcDirectionFactor) { mYearWv.setCurvedArcDirectionFactor(curvedArcDirectionFactor); mMonthWv.setCurvedArcDirectionFactor(curvedArcDirectionFactor); mDayWv.setCurvedArcDirectionFactor(curvedArcDirectionFactor); } /** * 设置选中条目折射偏移比例 * * @param curvedRefractRatio 折射偏移比例 range 0.0-1.0 */ @Deprecated public void setCurvedRefractRatio(@FloatRange(from = 0.0f, to = 1.0f) float curvedRefractRatio) { setRefractRatio(curvedRefractRatio); } /** * 设置选中条目折射偏移比例 * * @param curvedRefractRatio 折射偏移比例 range 0.0-1.0 */ public void setRefractRatio(@FloatRange(from = 0.0f, to = 1.0f) float curvedRefractRatio) { mYearWv.setRefractRatio(curvedRefractRatio); mMonthWv.setRefractRatio(curvedRefractRatio); mDayWv.setRefractRatio(curvedRefractRatio); } /** * 获取年份 TextView * * @return 年份 TextView */ public AppCompatTextView getYearTv() { return mYearTv; } /** * 获取月份 TextView * * @return 月份 TextView */ public AppCompatTextView getMonthTv() { return mMonthTv; } /** * 获取日 TextView * * @return 日 TextView */ public AppCompatTextView getDayTv() { return mDayTv; } }