Skip to content

Commit 5a0651f

Browse files
authored
Create ScaleEntity.kt
util for performScaleType, Separate from drawer
1 parent a06fb4c commit 5a0651f

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package com.opensource.svgaplayer
2+
3+
import android.widget.ImageView
4+
5+
/**
6+
* Created by ubt on 2018/1/19.
7+
*/
8+
class ScaleEntity {
9+
var tranFx : Float = 0.0f
10+
var tranFy : Float = 0.0f
11+
var scaleFx : Float = 1.0f
12+
var scaleFy : Float = 1.0f
13+
var ratio = 1.0f
14+
var ratioX = false
15+
16+
private fun resetVar(){
17+
tranFx = 0.0f
18+
tranFy = 0.0f
19+
scaleFx = 1.0f
20+
scaleFy = 1.0f
21+
ratio = 1.0f
22+
ratioX = false
23+
}
24+
25+
fun performScaleType(canvasWidth : Float, canvasHeight: Float, videoWidth : Float, videoHeight : Float, scaleType: ImageView.ScaleType) {
26+
if (canvasWidth == 0.0f || canvasHeight == 0.0f || videoWidth == 0.0f || videoHeight == 0.0f) {
27+
return
28+
}
29+
30+
resetVar()
31+
val canW_vidW_f = (canvasWidth - videoWidth) / 2.0f
32+
val canH_vidH_f = (canvasHeight - videoHeight) / 2.0f
33+
34+
val videoRatio = videoWidth / videoHeight
35+
val canvasRatio = canvasWidth / canvasHeight
36+
37+
val canH_d_vidH = canvasHeight / videoHeight
38+
val canW_d_vidW = canvasWidth / videoWidth
39+
40+
when (scaleType) {
41+
ImageView.ScaleType.CENTER -> {
42+
tranFx = canW_vidW_f
43+
tranFy = canH_vidH_f
44+
}
45+
ImageView.ScaleType.CENTER_CROP -> {
46+
if (videoRatio > canvasRatio) {
47+
ratio = canH_d_vidH
48+
ratioX = false
49+
scaleFx = canH_d_vidH
50+
scaleFy = canH_d_vidH
51+
tranFx = (canvasWidth - videoWidth * (canH_d_vidH)) / 2.0f
52+
}
53+
else {
54+
ratio = canW_d_vidW
55+
ratioX = true
56+
scaleFx = canW_d_vidW
57+
scaleFy = canW_d_vidW
58+
tranFy = (canvasHeight - videoHeight * (canW_d_vidW)) / 2.0f
59+
}
60+
}
61+
ImageView.ScaleType.CENTER_INSIDE -> {
62+
if (videoWidth < canvasWidth && videoHeight < canvasHeight) {
63+
tranFx = canW_vidW_f
64+
tranFy = canH_vidH_f
65+
}
66+
else {
67+
if (videoRatio > canvasRatio) {
68+
ratio = canW_d_vidW
69+
ratioX = true
70+
scaleFx = canW_d_vidW
71+
scaleFy = canW_d_vidW
72+
tranFy = (canvasHeight - videoHeight * (canW_d_vidW)) / 2.0f
73+
74+
}
75+
else {
76+
ratio = canH_d_vidH
77+
ratioX = false
78+
scaleFx = canH_d_vidH
79+
scaleFy = canH_d_vidH
80+
tranFx = (canvasWidth - videoWidth * (canH_d_vidH)) / 2.0f
81+
}
82+
}
83+
}
84+
ImageView.ScaleType.FIT_CENTER -> {
85+
if (videoRatio > canvasRatio) {
86+
ratio = canW_d_vidW
87+
ratioX = true
88+
scaleFx = canW_d_vidW
89+
scaleFy = canW_d_vidW
90+
tranFy = (canvasHeight - videoHeight * (canW_d_vidW)) / 2.0f
91+
}
92+
else {
93+
ratio = canH_d_vidH
94+
ratioX = false
95+
scaleFx = canH_d_vidH
96+
scaleFy = canH_d_vidH
97+
tranFx = (canvasWidth - videoWidth * (canH_d_vidH)) / 2.0f
98+
}
99+
}
100+
ImageView.ScaleType.FIT_START -> {
101+
if (videoRatio > canvasRatio) {
102+
ratio = canW_d_vidW
103+
ratioX = true
104+
scaleFx = canW_d_vidW
105+
scaleFy = canW_d_vidW
106+
}
107+
else {
108+
ratio = canH_d_vidH
109+
ratioX = false
110+
scaleFx = canH_d_vidH
111+
scaleFy = canH_d_vidH
112+
}
113+
}
114+
ImageView.ScaleType.FIT_END -> {
115+
if (videoRatio > canvasRatio) {
116+
ratio = canW_d_vidW
117+
ratioX = true
118+
scaleFx = canW_d_vidW
119+
scaleFy = canW_d_vidW
120+
tranFy= canvasHeight - videoHeight * (canW_d_vidW)
121+
}
122+
else {
123+
ratio = canH_d_vidH
124+
ratioX = false
125+
scaleFx = canH_d_vidH
126+
scaleFy = canH_d_vidH
127+
tranFx = canvasWidth - videoWidth * (canH_d_vidH)
128+
}
129+
}
130+
ImageView.ScaleType.FIT_XY -> {
131+
ratio = Math.max(canW_d_vidW, canH_d_vidH)
132+
ratioX = canW_d_vidW > canH_d_vidH
133+
scaleFx = canW_d_vidW
134+
scaleFy = canH_d_vidH
135+
}
136+
else -> {
137+
ratio = canW_d_vidW
138+
ratioX = true
139+
scaleFx = canW_d_vidW
140+
scaleFy = canW_d_vidW
141+
}
142+
}
143+
}
144+
145+
}

0 commit comments

Comments
 (0)