Skip to content

Commit eae6e7b

Browse files
author
CNCoderX
committed
优化3D效果
1 parent 6fdf6ac commit eae6e7b

5 files changed

Lines changed: 35 additions & 21 deletions

File tree

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 24
5-
buildToolsVersion "24.0.3"
4+
compileSdkVersion 25
5+
buildToolsVersion "25.0.3"
66

77
defaultConfig {
88
applicationId "com.cncoderx.test.wheelview"
9-
minSdkVersion 15
10-
targetSdkVersion 24
9+
minSdkVersion 14
10+
targetSdkVersion 25
1111
versionCode 1
1212
versionName "1.0"
1313
}

app/src/main/java/com/cncoderx/test/wheelview/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void onChanged(WheelView wheel, int oldIndex, int newIndex) {
6262
mYear = 1980;
6363
mMonth = 1;
6464
mDay = 1;
65-
// updateDayEntries();
65+
updateDayEntries();
6666
updateTextView();
6767
}
6868

library/bintray.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ apply plugin: 'com.jfrog.bintray'
44
def siteUrl = 'https://github.com/CNCoderX/WheelView'
55
def gitUrl = 'https://github.com/CNCoderX/WheelView.git'
66

7-
version = "1.0"
7+
version = "1.1.0"
88
group = "com.cncoderx.wheelview"
99
def libName = "WheelView"
1010
def libDesc = "like ios wheel selector"

library/build.gradle

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
apply plugin: 'com.android.library'
22

33
android {
4-
compileSdkVersion 24
5-
buildToolsVersion "24.0.3"
4+
compileSdkVersion 25
5+
buildToolsVersion "25.0.3"
66

77
defaultConfig {
8-
minSdkVersion 15
9-
targetSdkVersion 24
8+
minSdkVersion 14
9+
targetSdkVersion 25
1010
versionCode 1
11-
versionName "1.0"
11+
versionName "1.1.0"
1212
}
1313
buildTypes {
1414
release {
1515
minifyEnabled false
1616
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
1717
}
1818
}
19+
// compileOptions {
20+
// sourceCompatibility JavaVersion.VERSION_1_8
21+
// targetCompatibility JavaVersion.VERSION_1_8
22+
// }
23+
lintOptions {
24+
abortOnError false
25+
checkReleaseBuilds false
26+
}
1927
}
2028

2129
dependencies {

library/src/main/java/com/cncoderx/wheelview/Wheel3DView.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,10 @@ protected void drawItem(Canvas canvas, int index, int offset) {
100100
// 滚动的距离映射到y轴的长度
101101
float translateY = (float) (Math.sin(angle) * r);
102102

103-
float scaleX = (float) Math.cos(angle / 3);
103+
float scaleOffset = (float) Math.abs(Math.sin(angle / 2) * (itemHeight - getLineSpace()));
104+
104105
// 折射偏移量x
105-
float refractX = getRefractX();
106+
// float refractX = getRefractX();
106107

107108
int clipLeft = getPaddingLeft();
108109
int clipRight = getWidth() - getPaddingRight();
@@ -113,7 +114,7 @@ protected void drawItem(Canvas canvas, int index, int offset) {
113114
if (Math.abs(range) <= 0) {
114115
mPaint.setColor(getSelectedColor());
115116
canvas.save();
116-
canvas.translate(refractX, 0);
117+
// canvas.translate(refractX, 0);
117118
canvas.clipRect(clipLeft, upperLimit, clipRight, lowerLimit);
118119
drawText(canvas, text, translateX, translateY, rotate, 1);
119120
canvas.restore();
@@ -122,41 +123,41 @@ protected void drawItem(Canvas canvas, int index, int offset) {
122123
else if (range > 0 && range < itemHeight) {
123124
mPaint.setColor(getSelectedColor());
124125
canvas.save();
125-
canvas.translate(refractX, 0);
126+
// canvas.translate(refractX, 0);
126127
canvas.clipRect(clipLeft, upperLimit, clipRight, lowerLimit);
127128
drawText(canvas, text, translateX, translateY, rotate, 1);
128129
canvas.restore();
129130

130131
mPaint.setColor(getUnselectedColor());
131132
canvas.save();
132133
canvas.clipRect(clipLeft, lowerLimit, clipRight, clipBottom);
133-
drawText(canvas, text, translateX, translateY, rotate, scaleX);
134+
drawText(canvas, text, translateX, translateY, rotate, scaleOffset);
134135
canvas.restore();
135136
}
136137
// 绘制与上分界线相交的文字
137138
else if (range < 0 && range > -itemHeight) {
138139
mPaint.setColor(getSelectedColor());
139140
canvas.save();
140-
canvas.translate(refractX, 0);
141+
// canvas.translate(refractX, 0);
141142
canvas.clipRect(clipLeft, upperLimit, clipRight, lowerLimit);
142143
drawText(canvas, text, translateX, translateY, rotate, 1);
143144
canvas.restore();
144145

145146
mPaint.setColor(getUnselectedColor());
146147
canvas.save();
147148
canvas.clipRect(clipLeft, clipTop, clipRight, upperLimit);
148-
drawText(canvas, text, translateX, translateY, rotate, scaleX);
149+
drawText(canvas, text, translateX, translateY, rotate, scaleOffset);
149150
canvas.restore();
150151
} else {
151152
mPaint.setColor(getUnselectedColor());
152153
canvas.save();
153154
canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);
154-
drawText(canvas, text, translateX, translateY, rotate, scaleX);
155+
drawText(canvas, text, translateX, translateY, rotate, scaleOffset);
155156
canvas.restore();
156157
}
157158
}
158159

159-
private void drawText(Canvas canvas, CharSequence text, float translateX, float translateY, float rotate, float scale) {
160+
private void drawText(Canvas canvas, CharSequence text, float translateX, float translateY, float rotate, float scaleOffset) {
160161
mCamera.save();
161162
mCamera.rotateX(rotate);
162163
mCamera.getMatrix(mMatrix);
@@ -166,7 +167,12 @@ private void drawText(Canvas canvas, CharSequence text, float translateX, float
166167
mMatrix.preTranslate(-centerX, -centerY);
167168
mMatrix.postTranslate(centerX + translateX, centerY + translateY);
168169

169-
canvas.scale(scale, 1, centerX, centerY);
170+
final int width = canvas.getWidth();
171+
final int height = canvas.getHeight();
172+
float scaleX = (width - scaleOffset) / width;
173+
float scaleY = (height - scaleOffset) / height;
174+
canvas.scale(scaleX, scaleY, centerX, centerY);
175+
170176
canvas.concat(mMatrix);
171177
canvas.drawText(text, 0, text.length(), centerX, centerY - baseline, mPaint);
172178
}

0 commit comments

Comments
 (0)