diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java b/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java
index 5941f934..9d1cee32 100755
--- a/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java
+++ b/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java
@@ -710,6 +710,33 @@ public void setCyclic(boolean cyclic) {
wv_seconds.setCyclic(cyclic);
}
+ public void setItemsVisibleNum(int visibleNum){
+ wv_year.setItemsVisibleNum(visibleNum);
+ wv_month.setItemsVisibleNum(visibleNum);
+ wv_day.setItemsVisibleNum(visibleNum);
+ wv_hours.setItemsVisibleNum(visibleNum);
+ wv_minutes.setItemsVisibleNum(visibleNum);
+ wv_seconds.setItemsVisibleNum(visibleNum);
+ }
+
+ public void setCenterItemBgColor(int color){
+ wv_year.setCenterItemBgColor(color);
+ wv_month.setCenterItemBgColor(color);
+ wv_day.setCenterItemBgColor(color);
+ wv_hours.setCenterItemBgColor(color);
+ wv_minutes.setCenterItemBgColor(color);
+ wv_seconds.setCenterItemBgColor(color);
+ }
+
+ public void setLabelGravity(WheelView.LabelGravity gravity){
+ wv_year.setLabelGravity(gravity);
+ wv_month.setLabelGravity(gravity);
+ wv_day.setLabelGravity(gravity);
+ wv_hours.setLabelGravity(gravity);
+ wv_minutes.setLabelGravity(gravity);
+ wv_seconds.setLabelGravity(gravity);
+ }
+
public String getTime() {
if (isLunarCalendar) {
//如果是农历 返回对应的公历时间
diff --git a/wheelview/src/main/java/com/contrarywind/view/WheelView.java b/wheelview/src/main/java/com/contrarywind/view/WheelView.java
index b0a42f52..f40287b6 100644
--- a/wheelview/src/main/java/com/contrarywind/view/WheelView.java
+++ b/wheelview/src/main/java/com/contrarywind/view/WheelView.java
@@ -44,6 +44,10 @@ public enum DividerType { // 分隔线类型
FILL, WRAP
}
+ public enum LabelGravity{ // label
+ RIGHT/*最右边*/, AFTER_CONTENT/*文字后面*/
+ }
+
private DividerType dividerType;//分隔线类型
private Context context;
@@ -61,6 +65,7 @@ public enum DividerType { // 分隔线类型
private Paint paintOuterText;
private Paint paintCenterText;
private Paint paintIndicator;
+ private Paint paintCenterBg;
private WheelAdapter adapter;
@@ -76,6 +81,7 @@ public enum DividerType { // 分隔线类型
private int textColorOut;
private int textColorCenter;
private int dividerColor;
+ private int centerItemBgColor;
// 条目间距倍数
private float lineSpacingMultiplier = 1.6F;
@@ -118,11 +124,16 @@ public enum DividerType { // 分隔线类型
private int widthMeasureSpec;
private int mGravity = Gravity.CENTER;
+ private LabelGravity mLabelGravity = LabelGravity.RIGHT;
private int drawCenterContentStart = 0;//中间选中文字开始绘制位置
private int drawOutContentStart = 0;//非中间文字开始绘制位置
private static final float SCALE_CONTENT = 0.8F;//非中间文字则用此控制高度,压扁形成3d错觉
private float CENTER_CONTENT_OFFSET;//偏移量
+ //item内容的最大宽度
+ private int maxItemContentWidth;
+ private String maxItemContent = "";
+
private final float DEFAULT_TEXT_TARGET_SKEWX = 0.5f;
public WheelView(Context context) {
@@ -154,6 +165,7 @@ public WheelView(Context context, AttributeSet attrs) {
mGravity = a.getInt(R.styleable.pickerview_wheelview_gravity, Gravity.CENTER);
textColorOut = a.getColor(R.styleable.pickerview_wheelview_textColorOut, 0xFFa8a8a8);
textColorCenter = a.getColor(R.styleable.pickerview_wheelview_textColorCenter, 0xFF2a2a2a);
+ centerItemBgColor = a.getColor(R.styleable.pickerview_wheelview_centerItemBgColor, 0x00000000);
dividerColor = a.getColor(R.styleable.pickerview_wheelview_dividerColor, 0xFFd5d5d5);
textSize = a.getDimensionPixelOffset(R.styleable.pickerview_wheelview_textSize, textSize);
lineSpacingMultiplier = a.getFloat(R.styleable.pickerview_wheelview_lineSpacingMultiplier, lineSpacingMultiplier);
@@ -205,6 +217,10 @@ private void initPaints() {
paintIndicator.setColor(dividerColor);
paintIndicator.setAntiAlias(true);
+ paintCenterBg = new Paint();
+ paintCenterBg.setColor(centerItemBgColor);
+ paintCenterBg.setAntiAlias(true);
+
setLayerType(LAYER_TYPE_SOFTWARE, null);
}
@@ -324,10 +340,26 @@ public final void setOnItemSelectedListener(OnItemSelectedListener OnItemSelecte
public final void setAdapter(WheelAdapter adapter) {
this.adapter = adapter;
+ measureMaxItemContentWidth();
remeasure();
invalidate();
}
+ private void measureMaxItemContentWidth(){
+ if(adapter != null){
+ int maxWidth = 0;
+ for (int i = 0; i < adapter.getItemsCount(); i++) {
+ String content = adapter.getItem(i).toString();
+ int width = getTextWidth(paintCenterText, content);
+ if(width > maxWidth){
+ maxWidth = width;
+ maxItemContent = content;
+ }
+ }
+ maxItemContentWidth = maxWidth;
+ }
+ }
+
public final WheelAdapter getAdapter() {
return adapter;
}
@@ -414,6 +446,9 @@ protected void onDraw(Canvas canvas) {
}
+ //绘制中间item背景颜色
+ canvas.drawRect(0.0f, firstLineY, measuredWidth, secondLineY, paintCenterBg);
+
//绘制中间两条横线
if (dividerType == DividerType.WRAP) {//横线长度仅包裹内容
float startX;
@@ -438,9 +473,15 @@ protected void onDraw(Canvas canvas) {
//只显示选中项Label文字的模式,并且Label文字不为空,则进行绘制
if (!TextUtils.isEmpty(label) && isCenterLabel) {
- //绘制文字,靠右并留出空隙
- int drawRightContentStart = measuredWidth - getTextWidth(paintCenterText, label);
- canvas.drawText(label, drawRightContentStart - CENTER_CONTENT_OFFSET, centerY, paintCenterText);
+ if(mLabelGravity == LabelGravity.RIGHT){
+ //绘制文字,靠右并留出空隙
+ int drawRightContentStart = measuredWidth - getTextWidth(paintCenterText, label);
+ canvas.drawText(label, drawRightContentStart - CENTER_CONTENT_OFFSET, centerY, paintCenterText);
+ }else {
+ measuredCenterContentStart(maxItemContent);
+ int drawRightContentStart = drawCenterContentStart + maxItemContentWidth;
+ canvas.drawText(label, drawRightContentStart + CENTER_CONTENT_OFFSET, centerY, paintCenterText);
+ }
}
counter = 0;
@@ -591,7 +632,11 @@ private void measuredCenterContentStart(String content) {
if (isOptions || label == null || label.equals("") || !isCenterLabel) {
drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
} else {//只显示中间label时,时间选择器内容偏左一点,留出空间绘制单位标签
- drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
+ if(mLabelGravity == LabelGravity.RIGHT){
+ drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
+ }else {
+ drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
+ }
}
break;
case Gravity.LEFT:
@@ -611,7 +656,11 @@ private void measuredOutContentStart(String content) {
if (isOptions || label == null || label.equals("") || !isCenterLabel) {
drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
} else {//只显示中间label时,时间选择器内容偏左一点,留出空间绘制单位标签
- drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
+ if(mLabelGravity == LabelGravity.RIGHT){
+ drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
+ }else {
+ drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
+ }
}
break;
case Gravity.LEFT:
@@ -807,6 +856,35 @@ public float getItemHeight() {
return itemHeight;
}
+ public void setItemHeight(float itemHeight) {
+ this.itemHeight = itemHeight;
+ }
+
+ public int getItemsVisibleNum() {
+ return itemsVisible;
+ }
+
+ public void setItemsVisibleNum(int itemsVisible) {
+ this.itemsVisible = itemsVisible;
+ }
+
+ public int getCenterItemBgColor() {
+ return centerItemBgColor;
+ }
+
+ public void setCenterItemBgColor(int centerItemBgColor) {
+ this.centerItemBgColor = centerItemBgColor;
+ paintCenterBg.setColor(centerItemBgColor);
+ }
+
+ public LabelGravity getLabelGravity() {
+ return mLabelGravity;
+ }
+
+ public void setLabelGravity(LabelGravity mLabelGravity) {
+ this.mLabelGravity = mLabelGravity;
+ }
+
public int getInitPosition() {
return initPosition;
}
diff --git a/wheelview/src/main/res/values/attrs.xml b/wheelview/src/main/res/values/attrs.xml
index 142e2a34..2e47c111 100644
--- a/wheelview/src/main/res/values/attrs.xml
+++ b/wheelview/src/main/res/values/attrs.xml
@@ -10,6 +10,7 @@
+
\ No newline at end of file