Skip to content

Commit 74e302d

Browse files
committed
feat: support 128 x 128 or higher resolution skin image on 2D view
1 parent 173bb09 commit 74e302d

File tree

5 files changed

+34
-17
lines changed

5 files changed

+34
-17
lines changed

.idea/misc.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/res/layout/activity_flat_skin_view_test.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
android:layout_width="wrap_content"
1616
android:layout_height="wrap_content"
1717
app:halfview="true"
18-
app:scale="32" />
18+
app:scale="48" />
1919

2020
<dev.storeforminecraft.skinviewandroid.library.twodimension.ui.FlatSkinView
2121
android:layout_width="wrap_content"
@@ -32,7 +32,8 @@
3232
<dev.storeforminecraft.skinviewandroid.library.twodimension.ui.FlatSkinView
3333
android:layout_width="wrap_content"
3434
android:layout_height="wrap_content"
35-
app:scale="32" />
35+
app:scale="32"
36+
app:skin="@raw/steve" />
3637

3738
<dev.storeforminecraft.skinviewandroid.library.twodimension.ui.FlatSkinView
3839
android:layout_width="wrap_content"

library/src/main/java/dev/storeforminecraft/skinviewandroid/library/twodimension/texture/SteveFrontTexture.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dev.storeforminecraft.skinviewandroid.library.datas.ModelSourceTextureTyp
66

77
data class SteveFrontTexture(
88
val texType: ModelSourceTextureType,
9+
val skinImageScale : Int = 1,
910
var head: Bitmap,
1011
var hat: Bitmap,
1112
var torso: Bitmap,

library/src/main/java/dev/storeforminecraft/skinviewandroid/library/twodimension/texture/SteveTextureUtil.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
11
package dev.storeforminecraft.skinviewandroid.library.twodimension.texture
22

33
import android.graphics.Bitmap
4+
import androidx.core.graphics.scale
45
import dev.storeforminecraft.skinviewandroid.library.datas.ModelSourceTextureType
56

67
object SteveTextureUtil {
78
fun getSteveFrontTex(skin: Bitmap): SteveFrontTexture {
89
val texType =
910
if (skin.width == skin.height) ModelSourceTextureType.RATIO_1_1 else ModelSourceTextureType.RATIO_2_1
11+
12+
val scale =
13+
if (skin.width >= 64 && texType == ModelSourceTextureType.RATIO_1_1) skin.width / 64 else 1
14+
1015
val tex = if (texType == ModelSourceTextureType.RATIO_1_1) {
1116
SteveFrontTexture(
1217
texType = texType,
13-
head = Bitmap.createBitmap(skin, 8, 8, 8, 8),
14-
hat = Bitmap.createBitmap(skin, 40, 8, 8, 8),
15-
torso = Bitmap.createBitmap(skin, 20, 20, 8, 12),
16-
torso2nd = Bitmap.createBitmap(skin, 20, 36, 8, 12),
17-
leftArm = Bitmap.createBitmap(skin, 36, 52, 4, 12),
18-
leftArm2nd = Bitmap.createBitmap(skin, 52, 52, 4, 12),
19-
rightArm = Bitmap.createBitmap(skin, 44, 20, 4, 12),
20-
rightArm2nd = Bitmap.createBitmap(skin, 44, 36, 4, 12),
21-
leftLeg = Bitmap.createBitmap(skin, 20, 52, 4, 12),
22-
leftLeg2nd = Bitmap.createBitmap(skin, 4, 52, 4, 12),
23-
rightLeg = Bitmap.createBitmap(skin, 4, 20, 4, 12),
24-
rightLeg2nd = Bitmap.createBitmap(skin, 4, 36, 4, 12)
18+
skinImageScale = scale,
19+
head = Bitmap.createBitmap(skin, 8 * scale, 8 * scale, 8 * scale, 8 * scale),
20+
hat = Bitmap.createBitmap(skin, 40 * scale, 8 * scale, 8 * scale, 8 * scale),
21+
torso = Bitmap.createBitmap(skin, 20 * scale, 20 * scale, 8 * scale, 12 * scale),
22+
torso2nd = Bitmap.createBitmap(skin, 20 * scale, 36 * scale, 8 * scale, 12 * scale),
23+
rightArm = Bitmap.createBitmap(skin, 36 * scale, 52 * scale, 4 * scale, 12 * scale),
24+
rightArm2nd = Bitmap.createBitmap(skin, 52 * scale, 52 * scale, 4 * scale, 12 * scale),
25+
leftArm = Bitmap.createBitmap(skin, 44 * scale, 20 * scale, 4 * scale, 12 * scale),
26+
leftArm2nd = Bitmap.createBitmap(skin, 44 * scale, 36 * scale, 4 * scale, 12 * scale),
27+
rightLeg = Bitmap.createBitmap(skin, 20 * scale, 52 * scale, 4 * scale, 12 * scale),
28+
rightLeg2nd = Bitmap.createBitmap(skin, 4 * scale, 52 * scale, 4 * scale, 12 * scale),
29+
leftLeg = Bitmap.createBitmap(skin, 4 * scale, 20 * scale, 4 * scale, 12 * scale),
30+
leftLeg2nd = Bitmap.createBitmap(skin, 4 * scale, 36 * scale, 4 * scale, 12 * scale)
2531
)
2632
} else {
2733
SteveFrontTexture(
2834
texType = texType,
35+
skinImageScale = 1,
2936
head = Bitmap.createBitmap(skin, 8, 8, 8, 8),
3037
hat = Bitmap.createBitmap(skin, 40, 8, 8, 8),
3138
torso = Bitmap.createBitmap(skin, 20, 20, 8, 12),

library/src/main/java/dev/storeforminecraft/skinviewandroid/library/twodimension/ui/FlatSkinView.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.graphics.*
55
import android.util.AttributeSet
66
import android.view.View
77
import dev.storeforminecraft.skinviewandroid.library.R
8+
import dev.storeforminecraft.skinviewandroid.library.datas.ModelSourceTextureType
89
import dev.storeforminecraft.skinviewandroid.library.twodimension.texture.SteveFrontTexture
910
import dev.storeforminecraft.skinviewandroid.library.twodimension.texture.SteveTextureUtil
1011
import java.io.IOException
@@ -74,7 +75,7 @@ class FlatSkinView : View {
7475

7576
fun renderSkin(bitmap: Bitmap) {
7677
steveFrontTex = SteveTextureUtil.getSteveFrontTex(bitmap).apply {
77-
scale(scale)
78+
scale(scale / skinImageScale)
7879
}
7980
bitmap.recycle()
8081
invalidate()
@@ -84,9 +85,15 @@ class FlatSkinView : View {
8485
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
8586

8687
if (halfSkinMode)
87-
setMeasuredDimension(16 * scale + (offsetX * 2), 32 * scale / 2)
88+
setMeasuredDimension(
89+
16 * scale + (offsetX * 2),
90+
32 * scale / 2
91+
)
8892
else
89-
setMeasuredDimension(16 * scale + (offsetX * 2), 32 * scale + (offsetY * 2))
93+
setMeasuredDimension(
94+
16 * scale + (offsetX * 2),
95+
32 * scale + (offsetY * 2)
96+
)
9097
}
9198

9299
override fun onDraw(canvas: Canvas?) {

0 commit comments

Comments
 (0)