Skip to content

Commit 88adf32

Browse files
authored
SkinLibraryActivity.kt の更新
1 parent 987b1ac commit 88adf32

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,81 @@
1+
package com.rabimi.javaskinchanger
12

3+
import android.app.Activity
4+
import android.content.Context
5+
import android.content.Intent
6+
import android.graphics.Bitmap
7+
import android.graphics.BitmapFactory
8+
import android.os.Bundle
9+
import android.view.LayoutInflater
10+
import android.view.View
11+
import android.view.ViewGroup
12+
import android.widget.ImageButton
13+
import android.widget.ImageView
14+
import androidx.appcompat.app.AppCompatActivity
15+
import androidx.recyclerview.widget.GridLayoutManager
16+
import androidx.recyclerview.widget.RecyclerView
17+
import java.io.File
18+
import java.io.FileOutputStream
19+
20+
class SkinLibraryActivity : AppCompatActivity() {
21+
22+
companion object {
23+
const val RESULT_SKIN_BITMAP = "result_skin_bitmap"
24+
const val EXTRA_CURRENT_SKIN = "extra_current_skin"
25+
}
26+
27+
private lateinit var recyclerView: RecyclerView
28+
private lateinit var adapter: SkinAdapter
29+
private lateinit var btnAddCurrent: ImageButton
30+
private val skinFiles = mutableListOf<File>()
31+
32+
override fun onCreate(savedInstanceState: Bundle?) {
33+
super.onCreate(savedInstanceState)
34+
setContentView(R.layout.activity_library)
35+
36+
recyclerView = findViewById(R.id.recyclerViewSkins)
37+
recyclerView.layoutManager = GridLayoutManager(this, 4)
38+
39+
btnAddCurrent = findViewById(R.id.btnAddCurrentSkin)
40+
41+
loadLibrary()
42+
adapter = SkinAdapter(skinFiles.map { it.absolutePath }) { path ->
43+
val bmp = BitmapFactory.decodeFile(path)
44+
val resized = Bitmap.createScaledBitmap(bmp, 64, 64, true)
45+
val intent = Intent().apply {
46+
putExtra(RESULT_SKIN_BITMAP, bmpToByteArray(resized))
47+
}
48+
setResult(Activity.RESULT_OK, intent)
49+
finish()
50+
}
51+
recyclerView.adapter = adapter
52+
53+
btnAddCurrent.setOnClickListener {
54+
val bytes = intent.getByteArrayExtra(EXTRA_CURRENT_SKIN) ?: return@setOnClickListener
55+
val bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
56+
saveSkinToLibrary(bmp)
57+
}
58+
}
59+
60+
private fun loadLibrary() {
61+
val dir = getDir("skin_library", Context.MODE_PRIVATE)
62+
skinFiles.clear()
63+
skinFiles.addAll(dir.listFiles()?.toList() ?: emptyList())
64+
}
65+
66+
private fun saveSkinToLibrary(bitmap: Bitmap) {
67+
val dir = getDir("skin_library", Context.MODE_PRIVATE)
68+
val file = File(dir, "skin_${System.currentTimeMillis()}.png")
69+
FileOutputStream(file).use { out ->
70+
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)
71+
}
72+
skinFiles.add(file)
73+
adapter.updateData(skinFiles.map { it.absolutePath })
74+
}
75+
76+
private fun bmpToByteArray(bitmap: Bitmap): ByteArray {
77+
val baos = java.io.ByteArrayOutputStream()
78+
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos)
79+
return baos.toByteArray()
80+
}
81+
}

0 commit comments

Comments
 (0)