diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt index 3bff812..be0574f 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt @@ -10,7 +10,7 @@ import com.dylanc.loadingstateview.BgColorType import com.remax.visualnovel.app.base.BaseBindingFragment import com.remax.visualnovel.databinding.FragmentMainActorBinding import com.remax.visualnovel.utils.Routers -import com.remax.visualnovel.widget.custom.TagItem +import com.remax.visualnovel.widget.custom.AbsTagBean import dagger.hilt.android.AndroidEntryPoint import kotlin.getValue @@ -42,22 +42,22 @@ class ActorListFragment : BaseBindingFragment() { with(binding) { // 模拟数据 val tags = listOf( - TagItem("1", "Youth"), - TagItem("2", "Lolita"), - TagItem("2", "Lolita2"), - TagItem("3", "Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG"), - TagItem("3", "ggggggggggg CEO ABCDEFG Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG"), - TagItem("4", "Uncle"), - TagItem("5", "Character Status"), - TagItem("6", "Imouto"), - TagItem("7", "Fanwork"), - TagItem("8", "LastLine"), + ActorTagBean("1", "Youth"), + ActorTagBean("2", "Lolita"), + ActorTagBean("2", "Lolita2"), + ActorTagBean("3", "Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG"), + ActorTagBean("3", "ggggggggggg CEO ABCDEFG Overbearing CEO ABCDEFG Overbearing CEO ABCDEFG"), + ActorTagBean("4", "Uncle"), + ActorTagBean("5", "Character Status"), + ActorTagBean("6", "Imouto"), + ActorTagBean("7", "Fanwork"), + ActorTagBean("8", "LastLine"), ) tagFlowLayout.setTagDataList(tags) tagFlowLayout.setOnTagClickListener { tag -> - Toast.makeText(context, "Clicked: ${tag.text}", Toast.LENGTH_SHORT).show() + Toast.makeText(context, "Clicked: ${tag.showStr}", Toast.LENGTH_SHORT).show() } tagFlowLayout.setOnExpandStateChangeListener { isExpanded -> diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorTagBean.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorTagBean.kt new file mode 100644 index 0000000..365a1bb --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorTagBean.kt @@ -0,0 +1,7 @@ +package com.remax.visualnovel.ui.main.actor + +import com.remax.visualnovel.widget.custom.AbsTagBean + +data class ActorTagBean(val tagId: String, override val showStr: String) : AbsTagBean(showStr) { + +} \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagItem.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/AbsTagBean.kt similarity index 56% rename from VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagItem.kt rename to VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/AbsTagBean.kt index 6afff85..c94610b 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagItem.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/AbsTagBean.kt @@ -1,7 +1,6 @@ package com.remax.visualnovel.widget.custom -data class TagItem( - val id: String, - val text: String, +abstract class AbsTagBean( + open val showStr: String, var isSelected: Boolean = false ) \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagFlowLayout2.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagFlowLayout2.kt index e38ed06..8958f28 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagFlowLayout2.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/custom/TagFlowLayout2.kt @@ -17,6 +17,7 @@ import com.remax.visualnovel.extension.spToPx import kotlin.math.max import kotlin.math.min import androidx.core.content.withStyledAttributes +import kotlin.collections.mutableListOf class TagFlowLayout2 @JvmOverloads constructor( context: Context, @@ -29,6 +30,7 @@ class TagFlowLayout2 @JvmOverloads constructor( private var verticalSpacing = 8f.dpToPx() private var textSize = 12f.spToPx() private var textColor = context.resources.getColor(R.color.tag_text_color) + private var textColorSelected = context.resources.getColor(R.color.white) private var tagBackground: Drawable? = null private var maxLinesWhileShrink = 1 private var eachLineMaxTagNum = 2 @@ -43,12 +45,12 @@ class TagFlowLayout2 @JvmOverloads constructor( private var eachLineAvailableWidth = 0 // 数据 - private val tagItems = mutableListOf() + private val tagItems = mutableListOf() private val tagViews = mutableListOf() private lateinit var expandIcon: ImageView // 监听器 - private var onTagClickListener: ((TagItem) -> Unit)? = null + private var onTagClickListener: ((AbsTagBean) -> Unit)? = null private var onExpandStateChangeListener: ((Boolean) -> Unit)? = null init { @@ -113,7 +115,7 @@ class TagFlowLayout2 @JvmOverloads constructor( } - fun setTagDataList(tags: List) { + fun setTagDataList(tags: List) { tagItems.clear() tagViews.forEach { removeView(it) } tagViews.clear() @@ -128,9 +130,9 @@ class TagFlowLayout2 @JvmOverloads constructor( requestLayout() } - private fun createTagView(tag: TagItem): TextView { + private fun createTagView(tag: AbsTagBean): TextView { return TextView(context).apply { - text = tag.text + text = tag.showStr setTextColor(textColor) textSize = textSize / resources.displayMetrics.scaledDensity setPadding(10.dpToPx(), 7.dpToPx(), 10.dpToPx(), 7.dpToPx()) @@ -142,6 +144,13 @@ class TagFlowLayout2 @JvmOverloads constructor( setOnClickListener { onTagClickListener?.invoke(tag) + with(tag) { + isSelected = !isSelected + } + + setTextColor(if (tag.isSelected) textColorSelected else textColor) + setBackgroundResource(if (tag.isSelected) R.drawable.tag_flow_item_bg_selected else R.drawable.tag_flow_item_bg) + requestLayout() } } } @@ -289,7 +298,7 @@ class TagFlowLayout2 @JvmOverloads constructor( expandIcon.setImageDrawable(indicator) } - fun setOnTagClickListener(listener: (TagItem) -> Unit) { + fun setOnTagClickListener(listener: (AbsTagBean) -> Unit) { onTagClickListener = listener } @@ -317,5 +326,9 @@ class TagFlowLayout2 @JvmOverloads constructor( requestLayout() } + fun getSelectedTagList() : List { + return tagItems.filter { it.isSelected } + } + } \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/drawable/tag_flow_item_bg_selected.xml b/VisualNovel/app/src/main/res/drawable/tag_flow_item_bg_selected.xml new file mode 100644 index 0000000..7dab0fc --- /dev/null +++ b/VisualNovel/app/src/main/res/drawable/tag_flow_item_bg_selected.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/values/colors.xml b/VisualNovel/app/src/main/res/values/colors.xml index 13cd74b..e96e1d1 100644 --- a/VisualNovel/app/src/main/res/values/colors.xml +++ b/VisualNovel/app/src/main/res/values/colors.xml @@ -183,6 +183,7 @@ #ffbac5d2 + #ff0065ff #ffe5f1ff