add character picture
@@ -31,7 +31,7 @@ object CharacterProfiles {
|
||||
id = "marisa",
|
||||
name = "魔理沙",
|
||||
speakingStyle =
|
||||
"元気な口調。「〜だぜ」は乱発せず、強調・納得・気付きの場面でだけ自然に使う。",
|
||||
"元気な口調。「〜だぜ」は乱発せず、強調・納得・気付きの場面でだけ自然に使う。「~だぜ」と「~な」は交互に使うことも多い。「~なんだぜ」という口調が、文の語尾に合わせてたまに出る",
|
||||
personality =
|
||||
"深掘り・解説の補足、技術寄りの説明が得意。少しテンション高めで勢いがある。",
|
||||
knowledgeLevel = "高い鉄道知識"
|
||||
@@ -41,10 +41,10 @@ object CharacterProfiles {
|
||||
// 🟠3. フラン(明るく元気)
|
||||
// ───────────────────────────────
|
||||
val flan = CharacterProfile(
|
||||
id = "flan",
|
||||
id = "flandre",
|
||||
name = "フラン",
|
||||
speakingStyle =
|
||||
"明るく元気。テンションが高いときだけ「なのだー」「のだー」が出る。" +
|
||||
"明るく元気。テンションが高いときに「なのだー」「のだー」が出る。" +
|
||||
"普段は普通の話し方で語尾を毎回つけない。",
|
||||
personality =
|
||||
"ムードメーカー。感情表現が大きく、明るい。盛り上げ役。",
|
||||
@@ -124,7 +124,7 @@ object CharacterProfiles {
|
||||
return when (id.lowercase()) {
|
||||
"reimu" -> reimu
|
||||
"marisa" -> marisa
|
||||
"flan" -> flan
|
||||
"flandre" -> flan
|
||||
"sanae" -> sanae
|
||||
"akane" -> akane
|
||||
"sayaka" -> sayaka
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.example.curation_train_app
|
||||
|
||||
import android.content.Context
|
||||
|
||||
object CharacterSettings {
|
||||
|
||||
private const val PREF_NAME = "navigator"
|
||||
private const val KEY_CHARACTER = "currentCharacter"
|
||||
|
||||
fun saveCharacter(context: Context, characterId: String) {
|
||||
val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
|
||||
prefs.edit().putString(KEY_CHARACTER, characterId).apply()
|
||||
}
|
||||
|
||||
fun loadCharacter(context: Context): String {
|
||||
val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
|
||||
return prefs.getString(KEY_CHARACTER, "reimu") ?: "reimu"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.curation_train_app
|
||||
|
||||
enum class EmotionType {
|
||||
NORMAL,
|
||||
HAPPY,
|
||||
ANGRY,
|
||||
SLEEPY,
|
||||
SURPRISED,
|
||||
CONFUSED,
|
||||
THINK,
|
||||
WORRY
|
||||
}
|
||||
@@ -9,4 +9,5 @@ enum class InfoType {
|
||||
WEATHER, // 天候影響
|
||||
NEW_TRAIN, // 新型車両関連
|
||||
OTHER // 分類できない場合
|
||||
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package com.example.curation_train_app
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import android.content.Intent
|
||||
import android.widget.LinearLayout
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.example.curation_train_app.ai.AiClient
|
||||
import com.example.curation_train_app.CharacterSettings
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
|
||||
@@ -20,35 +20,59 @@ class MainActivity : ComponentActivity() {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
val charId = CharacterSettings.loadCharacter(this)
|
||||
val imageView = findViewById<ImageView>(R.id.imageCharacter)
|
||||
|
||||
val drawableId = when (charId) {
|
||||
"reimu" -> R.drawable.reimu_normal
|
||||
"marisa" -> R.drawable.marisa_normal
|
||||
"flan" -> R.drawable.flandre_normal
|
||||
"sanae" -> R.drawable.sanae_normal
|
||||
"akane" -> R.drawable.akane_normal
|
||||
"momoka" -> R.drawable.momoka_normal
|
||||
"sayaka" -> R.drawable.sayaka_normal
|
||||
"hiyori" -> R.drawable.hiyori_normal
|
||||
else -> R.drawable.reimu_normal
|
||||
}
|
||||
|
||||
imageView.setImageResource(drawableId)
|
||||
|
||||
|
||||
|
||||
val btn = findViewById<Button>(R.id.btnTestReply)
|
||||
val inputText = findViewById<EditText>(R.id.inputText)
|
||||
val inputCharacter = findViewById<EditText>(R.id.inputCharacter)
|
||||
val textResult = findViewById<TextView>(R.id.textTestResult)
|
||||
|
||||
|
||||
btn.setOnClickListener {
|
||||
val text = inputText.text.toString()
|
||||
val charId = inputCharacter.text.toString()
|
||||
|
||||
val type = InfoClassifier.classify(text)
|
||||
val charId = CharacterSettings.loadCharacter(this) // ← 入力欄ではなく設定から読む
|
||||
val infoType = InfoClassifier.classify(text)
|
||||
|
||||
Thread {
|
||||
val reply = CharacterReplyManager().replyWithAI(charId, text, type)
|
||||
val reply = CharacterReplyManager().replyWithAI(charId, text, infoType)
|
||||
|
||||
runOnUiThread {
|
||||
val commentView = findViewById<TextView>(R.id.textCharacterComment)
|
||||
|
||||
val cleanText = if (reply.trim().startsWith("{") || reply.trim().startsWith("[")) {
|
||||
AiClient(apiKey = "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").extractText(json = reply)
|
||||
} else {
|
||||
reply
|
||||
}
|
||||
val cleanText =
|
||||
if (reply.trim().startsWith("{") || reply.trim().startsWith("[")) {
|
||||
AiClient("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").extractText(reply)
|
||||
} else reply
|
||||
|
||||
commentView.text = cleanText
|
||||
|
||||
// 表情切り替え
|
||||
val infoType = InfoClassifier.classify(text)
|
||||
val emotion = infoTypeToEmotion(infoType)
|
||||
updateCharacterExpression(charId,emotion)
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
|
||||
|
||||
loadRss()
|
||||
|
||||
// ▼ リリース枠(表示テスト) ▼
|
||||
@@ -120,4 +144,75 @@ class MainActivity : ComponentActivity() {
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
fun emotionToExpression(type: EmotionType): String {
|
||||
return when (type) {
|
||||
EmotionType.HAPPY -> "happy"
|
||||
EmotionType.ANGRY -> "angry"
|
||||
EmotionType.SLEEPY -> "sleepy"
|
||||
EmotionType.SURPRISED -> "surprised"
|
||||
EmotionType.CONFUSED -> "confused"
|
||||
EmotionType.THINK -> "think"
|
||||
EmotionType.WORRY -> "worry"
|
||||
else -> "normal"
|
||||
}
|
||||
}
|
||||
|
||||
fun updateCharacterExpression(charId: String, type: EmotionType) {
|
||||
|
||||
val imageView = findViewById<ImageView>(R.id.imageCharacter)
|
||||
|
||||
// 感情 → 表情名("happy"など)
|
||||
val expression = emotionToExpression(type)
|
||||
|
||||
// charId("reimu") と合わせて画像ファイル名を作る
|
||||
val resName = "${charId}_${expression}" // → "reimu_happy"
|
||||
|
||||
val resId = resources.getIdentifier(resName, "drawable", packageName)
|
||||
|
||||
if (resId != 0) {
|
||||
imageView.setImageResource(resId)
|
||||
} else {
|
||||
// 画像がない場合は normal に戻す
|
||||
val normalId = resources.getIdentifier("${charId}_normal", "drawable", packageName)
|
||||
imageView.setImageResource(normalId)
|
||||
}
|
||||
}
|
||||
|
||||
fun infoTypeToEmotion(info: InfoType): EmotionType {
|
||||
return when (info) {
|
||||
InfoType.DELAY -> EmotionType.WORRY
|
||||
InfoType.SUSPENSION -> EmotionType.ANGRY
|
||||
InfoType.REVISION -> EmotionType.THINK
|
||||
InfoType.CONSTRUCTION -> EmotionType.THINK
|
||||
InfoType.EVENT -> EmotionType.HAPPY
|
||||
InfoType.WEATHER -> EmotionType.CONFUSED
|
||||
InfoType.NEW_TRAIN -> EmotionType.SURPRISED
|
||||
else -> EmotionType.NORMAL
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
val charId = CharacterSettings.loadCharacter(this)
|
||||
val imageView = findViewById<ImageView>(R.id.imageCharacter)
|
||||
|
||||
val drawableId = when (charId) {
|
||||
"reimu" -> R.drawable.reimu_normal
|
||||
"marisa" -> R.drawable.marisa_normal
|
||||
"flan" -> R.drawable.flandre_normal
|
||||
"sanae" -> R.drawable.sanae_normal
|
||||
"akane" -> R.drawable.akane_normal
|
||||
"momoka" -> R.drawable.momoka_normal
|
||||
"sayaka" -> R.drawable.sayaka_normal
|
||||
"hiyori" -> R.drawable.hiyori_normal
|
||||
else -> R.drawable.reimu_normal
|
||||
}
|
||||
|
||||
imageView.setImageResource(drawableId)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.example.curation_train_app
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import android.widget.Button
|
||||
import android.content.Intent
|
||||
|
||||
class RegionSelectActivity : ComponentActivity() {
|
||||
|
||||
@@ -17,13 +17,32 @@ class RegionSelectActivity : ComponentActivity() {
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
findViewById<Button>(R.id.btnNorth).setOnClickListener { go("北海道") }
|
||||
findViewById<Button>(R.id.btnTohoku).setOnClickListener { go("東北") }
|
||||
findViewById<Button>(R.id.btnKanto).setOnClickListener { go("関東") }
|
||||
findViewById<Button>(R.id.btnChubu).setOnClickListener { go("中部") }
|
||||
findViewById<Button>(R.id.btnKansai).setOnClickListener { go("関西") }
|
||||
findViewById<Button>(R.id.btnChugoku).setOnClickListener { go("中国") }
|
||||
findViewById<Button>(R.id.btnShikoku).setOnClickListener { go("四国") }
|
||||
findViewById<Button>(R.id.btnKyushu).setOnClickListener { go("九州") }
|
||||
val reimuButton = findViewById<Button>(R.id.btnReimu)
|
||||
val marisaButton = findViewById<Button>(R.id.btnMarisa)
|
||||
val flandreButton = findViewById<Button>(R.id.btnFrandle)
|
||||
val sanaeButton = findViewById<Button>(R.id.btnSanae)
|
||||
val akaneButton = findViewById<Button>(R.id.btnAkane)
|
||||
val momokaButton = findViewById<Button>(R.id.btnMomoka)
|
||||
val sayakaButton = findViewById<Button>(R.id.btnSayaka)
|
||||
val hiyoriButton = findViewById<Button>(R.id.btnHiyori)
|
||||
|
||||
// ▼ キャラを選んだら保存 → 画面を閉じる(←重要)
|
||||
fun selectCharacter(id: String) {
|
||||
CharacterSettings.saveCharacter(this, id)
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
|
||||
reimuButton.setOnClickListener { selectCharacter("reimu") }
|
||||
marisaButton.setOnClickListener { selectCharacter("marisa") }
|
||||
flandreButton.setOnClickListener { selectCharacter("flandre") }
|
||||
sanaeButton.setOnClickListener { selectCharacter("sanae") }
|
||||
akaneButton.setOnClickListener { selectCharacter("akane") }
|
||||
momokaButton.setOnClickListener { selectCharacter("momoka") }
|
||||
sayakaButton.setOnClickListener { selectCharacter("sayaka") }
|
||||
hiyoriButton.setOnClickListener { selectCharacter("hiyori") }
|
||||
|
||||
// ❌ これは絶対削除!
|
||||
// CharacterSettings.saveCharacter(this, "reimu")
|
||||
}
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable/akane_angry.png
Normal file
|
After Width: | Height: | Size: 398 KiB |
BIN
app/src/main/res/drawable/akane_blush.png
Normal file
|
After Width: | Height: | Size: 432 KiB |
BIN
app/src/main/res/drawable/akane_confused.png
Normal file
|
After Width: | Height: | Size: 425 KiB |
BIN
app/src/main/res/drawable/akane_happy.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
app/src/main/res/drawable/akane_normal.png
Normal file
|
After Width: | Height: | Size: 431 KiB |
BIN
app/src/main/res/drawable/akane_serious.png
Normal file
|
After Width: | Height: | Size: 423 KiB |
BIN
app/src/main/res/drawable/akane_sleepy.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
app/src/main/res/drawable/akane_smile.png
Normal file
|
After Width: | Height: | Size: 432 KiB |
BIN
app/src/main/res/drawable/akane_surprised.png
Normal file
|
After Width: | Height: | Size: 416 KiB |
BIN
app/src/main/res/drawable/akane_think.png
Normal file
|
After Width: | Height: | Size: 415 KiB |
BIN
app/src/main/res/drawable/akane_worry.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
app/src/main/res/drawable/flandre_angry.png
Normal file
|
After Width: | Height: | Size: 403 KiB |
BIN
app/src/main/res/drawable/flandre_blush.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
app/src/main/res/drawable/flandre_confused.png
Normal file
|
After Width: | Height: | Size: 409 KiB |
BIN
app/src/main/res/drawable/flandre_happy.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
app/src/main/res/drawable/flandre_normal.png
Normal file
|
After Width: | Height: | Size: 410 KiB |
BIN
app/src/main/res/drawable/flandre_serious.png
Normal file
|
After Width: | Height: | Size: 409 KiB |
BIN
app/src/main/res/drawable/flandre_sleepy.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
app/src/main/res/drawable/flandre_smile.png
Normal file
|
After Width: | Height: | Size: 413 KiB |
BIN
app/src/main/res/drawable/flandre_surprised.png
Normal file
|
After Width: | Height: | Size: 414 KiB |
BIN
app/src/main/res/drawable/flandre_think.png
Normal file
|
After Width: | Height: | Size: 394 KiB |
BIN
app/src/main/res/drawable/flandre_worry.png
Normal file
|
After Width: | Height: | Size: 396 KiB |
BIN
app/src/main/res/drawable/hiyori_angry.png
Normal file
|
After Width: | Height: | Size: 309 KiB |
BIN
app/src/main/res/drawable/hiyori_blush.png
Normal file
|
After Width: | Height: | Size: 346 KiB |
BIN
app/src/main/res/drawable/hiyori_confused.png
Normal file
|
After Width: | Height: | Size: 323 KiB |
BIN
app/src/main/res/drawable/hiyori_happy.png
Normal file
|
After Width: | Height: | Size: 332 KiB |
BIN
app/src/main/res/drawable/hiyori_normal.png
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
app/src/main/res/drawable/hiyori_serious.png
Normal file
|
After Width: | Height: | Size: 323 KiB |
BIN
app/src/main/res/drawable/hiyori_sleepy.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
app/src/main/res/drawable/hiyori_smile.png
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
app/src/main/res/drawable/hiyori_surprised.png
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
app/src/main/res/drawable/hiyori_think.png
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
app/src/main/res/drawable/hiyori_worry.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
app/src/main/res/drawable/marisa_angry.png
Normal file
|
After Width: | Height: | Size: 306 KiB |
BIN
app/src/main/res/drawable/marisa_blush.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
app/src/main/res/drawable/marisa_confused.png
Normal file
|
After Width: | Height: | Size: 311 KiB |
BIN
app/src/main/res/drawable/marisa_happy.png
Normal file
|
After Width: | Height: | Size: 303 KiB |
BIN
app/src/main/res/drawable/marisa_normal.png
Normal file
|
After Width: | Height: | Size: 313 KiB |
BIN
app/src/main/res/drawable/marisa_serious.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
app/src/main/res/drawable/marisa_sleepy.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
app/src/main/res/drawable/marisa_smile.png
Normal file
|
After Width: | Height: | Size: 315 KiB |
BIN
app/src/main/res/drawable/marisa_surprised.png
Normal file
|
After Width: | Height: | Size: 311 KiB |
BIN
app/src/main/res/drawable/marisa_think.png
Normal file
|
After Width: | Height: | Size: 296 KiB |
BIN
app/src/main/res/drawable/marisa_worry.png
Normal file
|
After Width: | Height: | Size: 296 KiB |
BIN
app/src/main/res/drawable/momoka_angry.png
Normal file
|
After Width: | Height: | Size: 452 KiB |
BIN
app/src/main/res/drawable/momoka_blush.png
Normal file
|
After Width: | Height: | Size: 441 KiB |
BIN
app/src/main/res/drawable/momoka_confused.png
Normal file
|
After Width: | Height: | Size: 438 KiB |
BIN
app/src/main/res/drawable/momoka_happy.png
Normal file
|
After Width: | Height: | Size: 452 KiB |
BIN
app/src/main/res/drawable/momoka_normal.png
Normal file
|
After Width: | Height: | Size: 464 KiB |
BIN
app/src/main/res/drawable/momoka_serious.png
Normal file
|
After Width: | Height: | Size: 436 KiB |
BIN
app/src/main/res/drawable/momoka_sleepy.png
Normal file
|
After Width: | Height: | Size: 441 KiB |
BIN
app/src/main/res/drawable/momoka_smile.png
Normal file
|
After Width: | Height: | Size: 467 KiB |
BIN
app/src/main/res/drawable/momoka_surprised.png
Normal file
|
After Width: | Height: | Size: 434 KiB |
BIN
app/src/main/res/drawable/momoka_think.png
Normal file
|
After Width: | Height: | Size: 444 KiB |
BIN
app/src/main/res/drawable/momoka_worry.png
Normal file
|
After Width: | Height: | Size: 448 KiB |
BIN
app/src/main/res/drawable/reimu_angry.png
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
app/src/main/res/drawable/reimu_blush.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
app/src/main/res/drawable/reimu_confused.png
Normal file
|
After Width: | Height: | Size: 360 KiB |
BIN
app/src/main/res/drawable/reimu_happy.png
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
app/src/main/res/drawable/reimu_normal.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
app/src/main/res/drawable/reimu_serious.png
Normal file
|
After Width: | Height: | Size: 357 KiB |
BIN
app/src/main/res/drawable/reimu_sleepy.png
Normal file
|
After Width: | Height: | Size: 359 KiB |
BIN
app/src/main/res/drawable/reimu_smile.png
Normal file
|
After Width: | Height: | Size: 376 KiB |
BIN
app/src/main/res/drawable/reimu_surprised.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
app/src/main/res/drawable/reimu_think.png
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
app/src/main/res/drawable/reimu_worry.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
app/src/main/res/drawable/sanae_angry.png
Normal file
|
After Width: | Height: | Size: 376 KiB |
BIN
app/src/main/res/drawable/sanae_blush.png
Normal file
|
After Width: | Height: | Size: 378 KiB |
BIN
app/src/main/res/drawable/sanae_confused.png
Normal file
|
After Width: | Height: | Size: 366 KiB |
BIN
app/src/main/res/drawable/sanae_happy.png
Normal file
|
After Width: | Height: | Size: 375 KiB |
BIN
app/src/main/res/drawable/sanae_normal.png
Normal file
|
After Width: | Height: | Size: 389 KiB |
BIN
app/src/main/res/drawable/sanae_serious.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
app/src/main/res/drawable/sanae_sleepy.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
app/src/main/res/drawable/sanae_smile.png
Normal file
|
After Width: | Height: | Size: 390 KiB |
BIN
app/src/main/res/drawable/sanae_surprised.png
Normal file
|
After Width: | Height: | Size: 384 KiB |
BIN
app/src/main/res/drawable/sanae_think.png
Normal file
|
After Width: | Height: | Size: 351 KiB |
BIN
app/src/main/res/drawable/sanae_worry.png
Normal file
|
After Width: | Height: | Size: 367 KiB |
BIN
app/src/main/res/drawable/sayaka_angry.png
Normal file
|
After Width: | Height: | Size: 364 KiB |
BIN
app/src/main/res/drawable/sayaka_blush.png
Normal file
|
After Width: | Height: | Size: 427 KiB |
BIN
app/src/main/res/drawable/sayaka_confused.png
Normal file
|
After Width: | Height: | Size: 380 KiB |
BIN
app/src/main/res/drawable/sayaka_happy.png
Normal file
|
After Width: | Height: | Size: 381 KiB |
BIN
app/src/main/res/drawable/sayaka_normal.png
Normal file
|
After Width: | Height: | Size: 369 KiB |
BIN
app/src/main/res/drawable/sayaka_serious.png
Normal file
|
After Width: | Height: | Size: 408 KiB |
BIN
app/src/main/res/drawable/sayaka_sleepy.png
Normal file
|
After Width: | Height: | Size: 408 KiB |
BIN
app/src/main/res/drawable/sayaka_smile.png
Normal file
|
After Width: | Height: | Size: 373 KiB |
BIN
app/src/main/res/drawable/sayaka_surprised.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
app/src/main/res/drawable/sayaka_think.png
Normal file
|
After Width: | Height: | Size: 398 KiB |
BIN
app/src/main/res/drawable/sayaka_worry.png
Normal file
|
After Width: | Height: | Size: 362 KiB |
@@ -109,7 +109,7 @@
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerNews"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:padding="8dp" />
|
||||
|
||||
@@ -148,44 +148,50 @@
|
||||
android:text="※結果がここに表示されます"
|
||||
android:paddingTop="8dp" />
|
||||
|
||||
</LinearLayout>
|
||||
<!-- ▲▲ キャラ応答テストUI ▲▲ -->
|
||||
|
||||
<!-- ▼ 下部キャラ表示 ▼ -->
|
||||
|
||||
<!-- ▼ 下部キャラ表示 ▼ -->
|
||||
<!-- ▼▼ キャラ表示エリア(正しい構造) ▼▼ -->
|
||||
<FrameLayout
|
||||
android:id="@+id/bottomArea"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp">
|
||||
android:layout_height="180dp"
|
||||
android:padding="12dp">
|
||||
|
||||
<!-- コメントテキスト(左側) -->
|
||||
<!-- 左側のセリフ枠 -->
|
||||
<TextView
|
||||
android:id="@+id/textCharacterComment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="250dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/comment_background_white"
|
||||
android:padding="13dp"
|
||||
android:text="ちょっとした一言"
|
||||
android:textSize="13sp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="110dp"
|
||||
android:translationX="-8dp"
|
||||
android:layout_gravity="center_vertical|start"
|
||||
android:translationX="0dp"
|
||||
android:translationY="0dp" />
|
||||
<!-- キャラ(右下固定・サイズ自由) -->
|
||||
|
||||
<!-- 右下のキャラ画像 -->
|
||||
<ImageView
|
||||
android:id="@+id/imageCharacter"
|
||||
android:layout_width="280dp"
|
||||
android:layout_height="300dp"
|
||||
android:src="@drawable/akane_01_icon"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="250dp"
|
||||
android:adjustViewBounds="false"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/akane_01_icon"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:translationX="8dp"
|
||||
android:translationY="-4dp" />
|
||||
android:layout_margin="8dp"
|
||||
android:cropToPadding="false"
|
||||
/>
|
||||
|
||||
</FrameLayout>
|
||||
<!-- ▲▲ キャラ表示エリア ▲▲ -->
|
||||
|
||||
</LinearLayout>
|
||||
<!-- ▲▲ キャラ応答テストUI ▲▲ -->
|
||||
|
||||
<!-- ▲▲ キャラ応答テストUI ▲▲ -->
|
||||
|
||||
<!-- ▼ 下部キャラ表示 ▼ -->
|
||||
|
||||
<!-- ▼ 下部キャラ表示 ▼ -->
|
||||
<!-- ▲ 下部キャラ表示 ▲ -->
|
||||
|
||||
|
||||
|
||||