sound 选择器 RV赋值
This commit is contained in:
parent
64fdf6f4ac
commit
293405c8d1
|
|
@ -6,10 +6,6 @@ import kotlinx.parcelize.Parcelize
|
|||
|
||||
@Parcelize
|
||||
data class ChatSound(
|
||||
/**
|
||||
* code
|
||||
*/
|
||||
val code: String,
|
||||
|
||||
/**
|
||||
* id
|
||||
|
|
@ -34,7 +30,7 @@ data class ChatSound(
|
|||
/**
|
||||
* actor 性别
|
||||
*/
|
||||
var isMale: Boolean,
|
||||
val isMale: Boolean,
|
||||
|
||||
/**
|
||||
* 当前用户是否解锁 false:未解锁,true:解锁
|
||||
|
|
@ -50,7 +46,6 @@ data class ChatSound(
|
|||
* 解锁类型 MEMBER:会员 HEARTBEAT_LEVEL:心动等级
|
||||
*/
|
||||
val unlockType: String? = null,
|
||||
var isDefault: Boolean,
|
||||
var select: Boolean = false
|
||||
) : Parcelable {
|
||||
companion object {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import android.widget.LinearLayout
|
|||
import androidx.core.graphics.toColorInt
|
||||
import com.remax.visualnovel.R
|
||||
import com.remax.visualnovel.databinding.LayoutChatMenuViewBinding
|
||||
import com.remax.visualnovel.entity.response.ChatSound
|
||||
import com.remax.visualnovel.ui.chat.ui.expandableSelector.SelectorItem
|
||||
|
||||
class ChatSettingView @JvmOverloads constructor(
|
||||
|
|
@ -25,11 +26,12 @@ class ChatSettingView @JvmOverloads constructor(
|
|||
|
||||
}
|
||||
|
||||
initAiModelList()
|
||||
initAiModelSelectorView()
|
||||
initSoundSelectorView()
|
||||
}
|
||||
|
||||
|
||||
fun initAiModelList() {
|
||||
fun initAiModelSelectorView() {
|
||||
val items = listOf(
|
||||
SelectorItem(
|
||||
name = "Max-0618",
|
||||
|
|
@ -63,9 +65,51 @@ class ChatSettingView @JvmOverloads constructor(
|
|||
mBinding.aiModelSelector.setTitleIcon(R.mipmap.setting_ai_model)
|
||||
mBinding.aiModelSelector.setItems(items)
|
||||
mBinding.aiModelSelector.selectItem(0)
|
||||
//mBinding.aiModelSelector.setTitleText(R.string.xxxx)
|
||||
}
|
||||
|
||||
fun initSoundSelectorView() {
|
||||
val items = listOf(
|
||||
ChatSound(
|
||||
id = 1L,
|
||||
name = "Sound-1",
|
||||
description = "This is description for sound-1",
|
||||
isMale = true,
|
||||
imgUrl = "aa"
|
||||
),
|
||||
ChatSound(
|
||||
id = 2L,
|
||||
name = "Sound-2",
|
||||
description = "This is description for sound-2",
|
||||
isMale = true,
|
||||
imgUrl = "aa"
|
||||
),
|
||||
|
||||
ChatSound(
|
||||
id = 3L,
|
||||
name = "Sound-3",
|
||||
description = "This is description for sound-3",
|
||||
isMale = true,
|
||||
imgUrl = "aa"
|
||||
),
|
||||
|
||||
ChatSound(
|
||||
id = 4L,
|
||||
name = "Sound-4",
|
||||
description = "This is description for sound-4",
|
||||
isMale = true,
|
||||
imgUrl = "aa"
|
||||
),
|
||||
|
||||
ChatSound(
|
||||
id = 5L,
|
||||
name = "Sound-5",
|
||||
description = "This is description for sound-5",
|
||||
isMale = true,
|
||||
imgUrl = "aa"
|
||||
)
|
||||
)
|
||||
|
||||
mBinding.soundActorSelector.setItems(items)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,18 @@ import android.animation.AnimatorListenerAdapter
|
|||
import android.animation.ObjectAnimator
|
||||
import android.animation.ValueAnimator
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import android.view.View
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import com.remax.visualnovel.R
|
||||
import com.remax.visualnovel.databinding.LayoutExpandSoundSelectViewBinding
|
||||
import com.remax.visualnovel.databinding.LayoutExpandSelectViewBinding
|
||||
import com.remax.visualnovel.databinding.LayoutSettingSoundSubViewBinding
|
||||
import com.remax.visualnovel.entity.response.ChatSound
|
||||
import com.remax.visualnovel.utils.spannablex.utils.dp
|
||||
|
||||
|
||||
class ExpandSoundSelectView @JvmOverloads constructor(
|
||||
|
|
@ -19,8 +24,8 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private lateinit var mBinding: LayoutExpandSoundSelectViewBinding
|
||||
private lateinit var mBinding: LayoutExpandSelectViewBinding
|
||||
private lateinit var mExpandView : ExpandSoundSubView
|
||||
|
||||
private var isExpanded = false
|
||||
private var animationDuration = 300
|
||||
|
|
@ -31,19 +36,13 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
}
|
||||
|
||||
private fun initView(context: Context, attrs: AttributeSet?) {
|
||||
mBinding = LayoutExpandSoundSelectViewBinding.inflate(LayoutInflater.from(context))
|
||||
setupAttributes(attrs)
|
||||
setupClickListeners()
|
||||
}
|
||||
mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
|
||||
private fun setupAttributes(attrs: AttributeSet?) {
|
||||
attrs?.let {
|
||||
val typedArray = context.obtainStyledAttributes(it, R.styleable.ExpandableSelector)
|
||||
val title = typedArray.getString(R.styleable.ExpandableSelector_titleText)
|
||||
title?.let { mBinding.titleText.text = it }
|
||||
animationDuration = typedArray.getInt(R.styleable.ExpandableSelector_animationDuration, 300)
|
||||
typedArray.recycle()
|
||||
}
|
||||
mExpandView = ExpandSoundSubView(context)
|
||||
mBinding.itemsContainer.addView(mExpandView, LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT))
|
||||
setTitleText(R.string.title_sound_actor)
|
||||
setTitleIcon(R.mipmap.setting_sound_icon)
|
||||
setupClickListeners()
|
||||
}
|
||||
|
||||
private fun setupClickListeners() {
|
||||
|
|
@ -59,6 +58,10 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
mBinding.titleText.text = context.resources.getString(titleRes)
|
||||
}
|
||||
|
||||
fun setItems(newItems: List<ChatSound>) {
|
||||
mExpandView.setItems(newItems)
|
||||
}
|
||||
|
||||
|
||||
fun toggle() {
|
||||
if (isExpanded) collapse() else expand()
|
||||
|
|
@ -68,7 +71,7 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
if (isExpanded) return
|
||||
|
||||
isExpanded = true
|
||||
mBinding.itemsContainer.visibility = VISIBLE
|
||||
mBinding.itemsContainer.visibility = View.VISIBLE
|
||||
animateArrow(0f, 90f)
|
||||
// param height anim
|
||||
val animator = ValueAnimator.ofInt(0, getItemsHeight())
|
||||
|
|
@ -101,7 +104,7 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
}
|
||||
animator.addListener(object : AnimatorListenerAdapter() {
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
mBinding.itemsContainer.visibility = GONE
|
||||
mBinding.itemsContainer.visibility = View.GONE
|
||||
}
|
||||
})
|
||||
animator.start()
|
||||
|
|
@ -134,11 +137,4 @@ class ExpandSoundSelectView @JvmOverloads constructor(
|
|||
interface OnItemSelectedListener {
|
||||
fun onItemSelected(position: Int, item: SelectorItem)
|
||||
}
|
||||
|
||||
|
||||
/* new added */
|
||||
fun setCustomExpandView(expandView: ViewGroup) {
|
||||
mBinding.itemsContainer.addView(expandView)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -9,11 +9,14 @@ import com.drake.brv.annotaion.DividerOrientation
|
|||
import com.drake.brv.utils.bindingAdapter
|
||||
import com.drake.brv.utils.divider
|
||||
import com.drake.brv.utils.grid
|
||||
import com.drake.brv.utils.linear
|
||||
import com.drake.brv.utils.models
|
||||
import com.drake.brv.utils.setup
|
||||
import com.remax.visualnovel.R
|
||||
import com.remax.visualnovel.databinding.LayoutItemSettingSoundBinding
|
||||
import com.remax.visualnovel.databinding.LayoutSettingSoundSubViewBinding
|
||||
import com.remax.visualnovel.entity.response.ChatSound
|
||||
import com.remax.visualnovel.extension.glide.load
|
||||
import com.remax.visualnovel.widget.uitoken.changeBackground
|
||||
import com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout
|
||||
|
||||
|
|
@ -22,11 +25,12 @@ class ExpandSoundSubView @JvmOverloads constructor(
|
|||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||
private lateinit var items: List<ChatSound>
|
||||
private var mBinding: LayoutSettingSoundSubViewBinding
|
||||
|
||||
|
||||
init {
|
||||
mBinding = LayoutSettingSoundSubViewBinding.inflate(LayoutInflater.from(context))
|
||||
mBinding = LayoutSettingSoundSubViewBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
with(mBinding) {
|
||||
initRadioGroup(radioGroup)
|
||||
initRv(itemsRv)
|
||||
|
|
@ -46,7 +50,7 @@ class ExpandSoundSubView @JvmOverloads constructor(
|
|||
}
|
||||
|
||||
private fun initRv(itemsRv: RecyclerView) {
|
||||
itemsRv.grid(2)
|
||||
itemsRv.linear(VERTICAL)
|
||||
.divider {
|
||||
setDivider(16, true)
|
||||
orientation = DividerOrientation.VERTICAL
|
||||
|
|
@ -73,7 +77,7 @@ class ExpandSoundSubView @JvmOverloads constructor(
|
|||
val item = getModel<ChatSound>()
|
||||
with(getBinding<LayoutItemSettingSoundBinding>()) {
|
||||
if (!item.imgUrl.isNullOrEmpty()) {
|
||||
userAvatar.setImageResource(R.mipmap.sex_man_big)
|
||||
userAvatar.load(item.imgUrl)
|
||||
} else {
|
||||
userAvatar.setImageResource(if (item.isMale) R.mipmap.ic_gender_male else R.mipmap.ic_gender_female)
|
||||
}
|
||||
|
|
@ -87,5 +91,10 @@ class ExpandSoundSubView @JvmOverloads constructor(
|
|||
}
|
||||
}
|
||||
|
||||
fun setItems(newItems: List<ChatSound>) {
|
||||
items = newItems
|
||||
mBinding.itemsRv.models = items
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -18,7 +18,8 @@
|
|||
android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_centerVertical="true" />
|
||||
android:layout_centerVertical="true"
|
||||
android:src="@mipmap/setting_sound_play"/>
|
||||
|
||||
<com.remax.visualnovel.widget.uitoken.view.UITokenTextView
|
||||
android:id="@+id/titleText"
|
||||
|
|
@ -29,7 +30,9 @@
|
|||
android:layout_marginStart="12dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="#333333"
|
||||
android:textStyle="normal"/>
|
||||
android:textStyle="normal"
|
||||
android:text="@string/title_sound_actor"
|
||||
/>
|
||||
|
||||
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
|
||||
android:id="@+id/arrow"
|
||||
|
|
@ -47,7 +50,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="@dimen/dp_2"
|
||||
android:visibility="visible">
|
||||
android:visibility="gone">
|
||||
<com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandSoundSubView
|
||||
android:id="@+id/sound_sub_view"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -480,5 +480,6 @@
|
|||
<string name="play_dialogue_only">Play dialogue only</string>
|
||||
<string name="setting_max_response_num">Maximum number of response tokens</string>
|
||||
<string name="font_size">Font Size</string>
|
||||
<string name="title_sound_actor">Voice actor</string>
|
||||
|
||||
</resources>
|
||||
Loading…
Reference in New Issue