From b426fda4d3e8eb4f5391e0a517c83deae1b447ca Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Fri, 31 Oct 2025 19:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B1=95=E5=BC=80=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../visualnovel/ui/chat/ui/ChatSettingView.kt | 45 ++++++++++++++++--- .../ExpandAiModelSelectView.kt | 19 ++++---- .../ExpandSoundSelectView.kt | 19 ++++---- .../main/res/layout/layout_chat_menu_view.xml | 1 + 4 files changed, 62 insertions(+), 22 deletions(-) diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt index 4114467..1a90415 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt @@ -5,6 +5,7 @@ import android.content.Context import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import android.widget.LinearLayout import androidx.core.graphics.toColorInt import com.remax.visualnovel.R @@ -14,6 +15,8 @@ import com.remax.visualnovel.entity.response.ChatBubble import com.remax.visualnovel.entity.response.ChatHistory import com.remax.visualnovel.entity.response.ChatMode import com.remax.visualnovel.entity.response.ChatSound +import com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandAiModelSelectView +import com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandSoundSelectView import com.remax.visualnovel.ui.chat.ui.expandableSelector.SelectorItem import java.util.Date @@ -43,6 +46,9 @@ class ChatSettingView @JvmOverloads constructor( initHistoryListView() } + private fun scroll2Position(targetSubView: View) { + mBinding.scrollView.smoothScrollTo(0, targetSubView.top) + } fun initAiModelSelectorView() { val items = listOf( @@ -74,10 +80,24 @@ class ChatSettingView @JvmOverloads constructor( ) ) - //aiModelSelector.setOnItemSelectedListener() - mBinding.aiModelSelector.setTitleIcon(R.mipmap.setting_ai_model) - mBinding.aiModelSelector.setItems(items) - mBinding.aiModelSelector.selectItem(0) + with(mBinding.aiModelSelector) { + setTitleIcon(R.mipmap.setting_ai_model) + setItems(items) + selectItem(0) + setOnEventListener(object : ExpandAiModelSelectView.IEventListener { + override fun onItemSelected( + position: Int, + item: SelectorItem + ) { + // TODO - + } + + override fun onExpanded(isExpanded: Boolean) { + if (isExpanded) + scroll2Position(this@with) + } + }) + } } fun initChatModeSelectorView() { @@ -153,7 +173,22 @@ class ChatSettingView @JvmOverloads constructor( ) ) - mBinding.soundActorSelector.setItems(items) + with(mBinding.soundActorSelector) { + setItems(items) + setEventListener(object : ExpandSoundSelectView.IEventListener { + override fun onItemSelected( + position: Int, + item: ChatSound + ) { + + } + + override fun onExpanded(isExpanded: Boolean) { + if (isExpanded) + scroll2Position(this@with) + } + }) + } } fun initBubbleSelectView() { diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandAiModelSelectView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandAiModelSelectView.kt index 03a8b53..71a5338 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandAiModelSelectView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandAiModelSelectView.kt @@ -28,7 +28,11 @@ class ExpandAiModelSelectView @JvmOverloads constructor( private var isExpanded = false private var animationDuration = 300 private var items: List = emptyList() - private var itemSelectedListener: OnItemSelectedListener? = null + private var mEventListener: IEventListener? = null + interface IEventListener { + fun onItemSelected(position: Int, item: SelectorItem) + fun onExpanded(isExpanded: Boolean) + } init { initView(context, attrs) @@ -103,7 +107,7 @@ class ExpandAiModelSelectView @JvmOverloads constructor( itemView.setOnClickListener { selectItem(position) - itemSelectedListener?.onItemSelected(position, item) + mEventListener?.onItemSelected(position, item) } return itemView @@ -130,13 +134,12 @@ class ExpandAiModelSelectView @JvmOverloads constructor( if (position in items.indices) { mBinding.titleText.text = items[position].name } - - collapse() } fun toggle() { if (isExpanded) collapse() else expand() + mEventListener?.onExpanded(isExpanded) } fun expand() { @@ -202,11 +205,9 @@ class ExpandAiModelSelectView @JvmOverloads constructor( return height } - fun setOnItemSelectedListener(listener: OnItemSelectedListener) { - this.itemSelectedListener = listener + fun setOnEventListener(listener: IEventListener) { + this.mEventListener = listener } - interface OnItemSelectedListener { - fun onItemSelected(position: Int, item: SelectorItem) - } + } \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSelectView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSelectView.kt index 45bd0f1..4cbe1e5 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSelectView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSelectView.kt @@ -23,10 +23,17 @@ class ExpandSoundSelectView @JvmOverloads constructor( ) : LinearLayout(context, attrs, defStyleAttr) { private lateinit var mBinding: LayoutExpandSelectViewBinding private lateinit var mExpandView : ExpandSoundSubView - private var isExpanded = false private var animationDuration = 300 - private var itemSelectedListener: OnItemSelectedListener? = null + + private var mEventListener: IEventListener? = null + interface IEventListener { + fun onItemSelected(position: Int, item: ChatSound) + fun onExpanded(isExpanded: Boolean) + } + fun setEventListener(listener: IEventListener) { + mEventListener = listener + } init { initView(context, attrs) @@ -76,6 +83,7 @@ class ExpandSoundSelectView @JvmOverloads constructor( fun toggle() { if (isExpanded) collapse() else expand() + mEventListener?.onExpanded(isExpanded) } fun expand() { @@ -141,11 +149,6 @@ class ExpandSoundSelectView @JvmOverloads constructor( return height } - fun setOnItemSelectedListener(listener: OnItemSelectedListener) { - this.itemSelectedListener = listener - } - interface OnItemSelectedListener { - fun onItemSelected(position: Int, item: SelectorItem) - } + } \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml b/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml index 5bc0750..8250378 100644 --- a/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml +++ b/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml @@ -45,6 +45,7 @@