添加引导页4、5

This commit is contained in:
wangyu 2026-01-27 18:34:26 +08:00
parent 150d203efb
commit 34f1efb000
82 changed files with 1761 additions and 126 deletions

View File

@ -212,6 +212,8 @@ dependencies {
implementation 'com.bytedance.ads:AppConvert:2.0.0' // implementation 'com.bytedance.ads:AppConvert:2.0.0' //
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.14' // implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.14' //
implementation 'com.github.lihangleo2:ShadowLayout:3.4.1' // implementation 'com.github.lihangleo2:ShadowLayout:3.4.1' //
implementation 'com.github.YvesCheung.RollingText:RollingText:1.3.0' //
implementation 'com.tencent.tav:libpag:4.4.25' //libpag动画加载
//media3视频播放 //media3视频播放
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer:1.4.1"
implementation "androidx.media3:media3-ui:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"

Binary file not shown.

View File

@ -5,10 +5,10 @@ import com.google.gson.annotations.SerializedName
class ConfigEntity { class ConfigEntity {
@SerializedName("client.version.upgrade") @SerializedName("client.version.upgrade")
var versionEntity: com.cheng.blzb.bean.VersionEntity? = null var versionEntity: VersionEntity? = null
@SerializedName("client.weixin.share") //微信分享 @SerializedName("client.weixin.share") //微信分享
var wxShareEntity: com.cheng.blzb.bean.WxShareEntity? = null var wxShareEntity: WxShareEntity? = null
@SerializedName("client.guide.pay.enable") @SerializedName("client.guide.pay.enable")
var guidePayEnable: Boolean? = true //引导页是否开启支付,默认可以 var guidePayEnable: Boolean? = true //引导页是否开启支付,默认可以
@ -16,9 +16,6 @@ class ConfigEntity {
@SerializedName("client.guide.enable") @SerializedName("client.guide.enable")
var guideEnable: Boolean? = true //是否开启引导页 var guideEnable: Boolean? = true //是否开启引导页
@SerializedName("client.start.function.hint")
var guideHint: String? = ""
@SerializedName("client.nologin.pay.enable") @SerializedName("client.nologin.pay.enable")
var noLoginPayEnable: Boolean? = false var noLoginPayEnable: Boolean? = false

View File

@ -14,7 +14,7 @@ data class HotWordEntity(
val amount: String = "0", val amount: String = "0",
val children: List<Child> = emptyList(), val children: List<Child> = emptyList(),
val id: Int = 0, val id: Int = 0,
val name: String, val name: String = "",
val pid: Int = 0, val pid: Int = 0,
val status: String = "", val status: String = "",
val type: String = "", val type: String = "",

View File

@ -1,4 +1,3 @@
package com.cheng.blzb.event package com.cheng.blzb.event
class GuideEvent(var nextPage: Boolean) { class GuideEvent(var toIndex: Int)
}

View File

@ -3,8 +3,8 @@ package com.cheng.blzb.manager
import android.os.Build import android.os.Build
import android.text.TextUtils import android.text.TextUtils
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.cheng.blzb.bean.BidTypeEntity
import com.cheng.blzb.bean.AreaEntity import com.cheng.blzb.bean.AreaEntity
import com.cheng.blzb.bean.BidTypeEntity
import com.cheng.blzb.bean.HotWordEntity import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.net.ApiFactory import com.cheng.blzb.net.ApiFactory
import com.example.base.extensions.toast import com.example.base.extensions.toast
@ -77,7 +77,6 @@ object UserConfigManager {
if (data.config != null){ if (data.config != null){
saveGuidePayEnable(data.config!!.guidePayEnable!!) saveGuidePayEnable(data.config!!.guidePayEnable!!)
saveGuideEnable(data.config!!.guideEnable!!) saveGuideEnable(data.config!!.guideEnable!!)
saveGuideHint(data.config!!.guideHint)
saveNoLoginPay(data.config!!.noLoginPayEnable!!) saveNoLoginPay(data.config!!.noLoginPayEnable!!)
savePayAgreementEnable(data.config!!.payAgreementEnable!!) savePayAgreementEnable(data.config!!.payAgreementEnable!!)
saveLoginType(data.config!!.loginType!!) saveLoginType(data.config!!.loginType!!)
@ -131,14 +130,6 @@ object UserConfigManager {
return MMKVUtils.getBoolean("guide", true) return MMKVUtils.getBoolean("guide", true)
} }
private fun saveGuideHint(hint: String?) {
MMKVUtils.put("guide_hint", hint)
}
fun getGuideHint(): String {
return MMKVUtils.getString("guide_hint") ?: ""
}
fun saveIsTemp(temp: Boolean) { fun saveIsTemp(temp: Boolean) {
MMKVUtils.put("x-role", temp)//true临时用户 ,false登录用户 MMKVUtils.put("x-role", temp)//true临时用户 ,false登录用户
} }

View File

@ -0,0 +1,108 @@
package com.cheng.blzb.ui.dialog
import android.annotation.SuppressLint
import android.app.Dialog
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.text.TextUtils
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.DialogFragment
import com.cheng.blzb.R
import com.cheng.blzb.common.Constants
import com.cheng.blzb.databinding.DialogAddKeywordBinding
import com.cheng.blzb.impl.TextWatcherImpl
import com.cheng.blzb.utils.KeyboardUtils
import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.utils.ScreenUtils
class AddKeywordDialog : DialogFragment(), KeyboardUtils.OnSoftInputChangedListener {
private var mOnBackListener: ((String) -> Unit)? = null //回调事件
lateinit var binding: DialogAddKeywordBinding
override fun onStart() {
super.onStart()
val window = dialog?.window
val windowParams = window?.attributes
windowParams?.dimAmount = 0.7f
windowParams?.width = ScreenUtils.getWindowSize().x
windowParams?.gravity = Gravity.BOTTOM
windowParams?.windowAnimations = R.style.dialog_bottom
dialog?.window?.attributes = windowParams
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setCancelable(false)
KeyboardUtils.registerSoftInputChangedListener(requireActivity(), this)
return super.onCreateView(inflater, container, savedInstanceState)
}
private val textWatcher = object : TextWatcherImpl() {
@SuppressLint("SetTextI18n")
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
binding.ivClearText.visibility = if (TextUtils.isEmpty(s)) View.GONE else View.VISIBLE
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = layoutInflater.inflate(R.layout.dialog_add_keyword, null)
binding = DialogAddKeywordBinding.bind(view)
binding.tvTitle.typeface = Constants.douyinsansB
binding.etKeyword.addTextChangedListener(textWatcher)
binding.ivClose.onClick {
dismiss()
}
binding.ivClearText.onClick {
binding.etKeyword.setText("")
}
binding.btnNext.onClick {
val keyword = binding.etKeyword.text.toString().trim()
if (TextUtils.isEmpty(keyword)) {
toast("请输入关键词")
return@onClick
}
mOnBackListener?.invoke(keyword)
dismiss()
}
val dialog = Dialog(requireContext())
dialog.setContentView(view)
return dialog
}
fun setOnBackListener(listener: (String) -> Unit) {
mOnBackListener = listener
}
override fun onSoftInputChanged(height: Int) {
val lp = binding.layoutContent.layoutParams as ConstraintLayout.LayoutParams
lp.bottomMargin = height
binding.layoutContent.layoutParams = lp
}
override fun onDestroyView() {
KeyboardUtils.unregisterSoftInputChangedListener(requireActivity().window)
binding.etKeyword.removeTextChangedListener(textWatcher)
super.onDestroyView()
}
companion object {
fun newInstance(): AddKeywordDialog {
val arg = Bundle()
val fragment = AddKeywordDialog()
fragment.arguments = arg
return fragment
}
}
}

View File

@ -3,14 +3,10 @@ package com.cheng.blzb.ui.fragment.guide
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentStatePagerAdapter import androidx.fragment.app.FragmentStatePagerAdapter
import androidx.viewpager.widget.ViewPager
import androidx.viewpager.widget.ViewPager.OnPageChangeListener import androidx.viewpager.widget.ViewPager.OnPageChangeListener
import com.example.base.extensions.gone import com.cheng.blzb.bean.AreaEntity
import com.example.base.extensions.onClick import com.cheng.blzb.bean.GuideTotalBidEntity
import com.example.base.ui.BaseFragment import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.ui.activity.MainActivity
import com.cheng.blzb.ui.activity.PublicActivity
import com.cheng.blzb.common.Constants
import com.cheng.blzb.common.EventConstants import com.cheng.blzb.common.EventConstants
import com.cheng.blzb.databinding.FragmentGuideContentBinding import com.cheng.blzb.databinding.FragmentGuideContentBinding
import com.cheng.blzb.event.GuideEvent import com.cheng.blzb.event.GuideEvent
@ -20,19 +16,31 @@ import com.cheng.blzb.ui.base.BasePageAdapter
import com.cheng.blzb.ui.fragment.guide.item.GuideItem1Fragment import com.cheng.blzb.ui.fragment.guide.item.GuideItem1Fragment
import com.cheng.blzb.ui.fragment.guide.item.GuideItem2Fragment import com.cheng.blzb.ui.fragment.guide.item.GuideItem2Fragment
import com.cheng.blzb.ui.fragment.guide.item.GuideItem3Fragment import com.cheng.blzb.ui.fragment.guide.item.GuideItem3Fragment
import com.cheng.blzb.ui.fragment.mine.vip.VipFragment import com.cheng.blzb.ui.fragment.guide.item.GuideItem4Fragment
import com.cheng.blzb.ui.fragment.guide.item.GuideItem5Fragment
import com.example.base.common.RxBus import com.example.base.common.RxBus
import org.jetbrains.anko.startActivity import com.example.base.ui.BaseFragment
import kotlin.collections.minusAssign
import kotlin.collections.plusAssign
class GuideFragment : BaseFragment<FragmentGuideContentBinding, GuideViewModel>() { class GuideFragment : BaseFragment<FragmentGuideContentBinding, GuideViewModel>() {
private var titles = listOf("guide1", "guide2", "guide3", "guide4", "guide5") private var titles = listOf("guide1", "guide2", "guide3", "guide4", "guide5")
private val fragmentList by lazy { mutableListOf<Fragment>() } private val fragmentList by lazy { mutableListOf<Fragment>() }
private val pageAdapter by lazy { BasePageAdapter(childFragmentManager, titles, fragmentList, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) } private val pageAdapter by lazy {
BasePageAdapter(
childFragmentManager,
titles,
fragmentList,
FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
)
}
private var currentPosition = 0 private var currentPosition = 0
companion object {
val cityList = mutableListOf<AreaEntity>()
val hotWordList = mutableListOf<HotWordEntity.Child>()
var totalInfo: GuideTotalBidEntity? = null
}
override fun initView() { override fun initView() {
super.initView() super.initView()
@ -44,8 +52,8 @@ class GuideFragment :BaseFragment<FragmentGuideContentBinding, GuideViewModel>()
fragmentList.add(GuideItem1Fragment()) fragmentList.add(GuideItem1Fragment())
fragmentList.add(GuideItem2Fragment()) fragmentList.add(GuideItem2Fragment())
fragmentList.add(GuideItem3Fragment()) fragmentList.add(GuideItem3Fragment())
// fragmentList.add(GuideItem4Fragment()) fragmentList.add(GuideItem4Fragment())
// fragmentList.add(GuideItem5Fragment()) fragmentList.add(GuideItem5Fragment())
} }
override fun initData() { override fun initData() {
@ -86,10 +94,8 @@ class GuideFragment :BaseFragment<FragmentGuideContentBinding, GuideViewModel>()
} }
val guideEvent = RxBus.defaultInstance.toObservable(GuideEvent::class.java).subscribe { val guideEvent = RxBus.defaultInstance.toObservable(GuideEvent::class.java).subscribe {
if (it.nextPage) { if (it.toIndex < fragmentList.size) {
binding.viewPager.currentItem += 1 binding.viewPager.currentItem = it.toIndex
} else {
binding.viewPager.currentItem -= 1
} }
} }
addDisposable(guideEvent) addDisposable(guideEvent)

View File

@ -0,0 +1,20 @@
package com.cheng.blzb.ui.fragment.guide.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.blzb.R
import com.cheng.blzb.bean.HotWordEntity
import com.example.base.extensions.getColor
class GuideItem4Adapter : BaseQuickAdapter<HotWordEntity.Child, BaseViewHolder>(R.layout.listitem_guide_item4) {
override fun convert(holder: BaseViewHolder, item: HotWordEntity.Child) {
holder.setText(R.id.tv_name, item.name)
if (item.isChecked) {
holder.setImageResource(R.id.iv_add, R.mipmap.ic_guide_item4_checked)
holder.setTextColor(R.id.tv_name, getColor(R.color.color_125ffe))
} else {
holder.setImageResource(R.id.iv_add, R.mipmap.ic_guide_item4_default)
holder.setTextColor(R.id.tv_name, getColor(R.color.color_1a1a1a))
}
}
}

View File

@ -0,0 +1,28 @@
package com.cheng.blzb.ui.fragment.guide.adapter
import android.widget.TextView
import androidx.core.graphics.toColorInt
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.blzb.R
import com.cheng.blzb.bean.HotWordEntity
import com.example.base.extensions.getColor
class GuideItem4SelectedAdapter: BaseQuickAdapter<HotWordEntity.Child, BaseViewHolder>(R.layout.listitem_guide4_selected_keyword) {
init {
addChildClickViewIds(R.id.iv_delete)
}
override fun convert(holder: BaseViewHolder, item: HotWordEntity.Child) {
holder.setText(R.id.tv_name, item.name)
if (item.id == -1) {
holder.setTextColor(R.id.tv_name, "#8D93A1".toColorInt())
holder.setImageResource(R.id.iv_delete, R.mipmap.ic_guide_item4_default)
} else {
holder.setTextColor(R.id.tv_name, getColor(R.color.color_125ffe))
holder.setImageResource(R.id.iv_delete, R.mipmap.ic_guide_item4_delete)
}
holder.getView<TextView>(R.id.tv_name).requestFocus()
}
}

View File

@ -0,0 +1,45 @@
package com.cheng.blzb.ui.fragment.guide.adapter
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import com.cheng.blzb.R
import com.cheng.blzb.bean.AreaEntity
import com.cheng.blzb.common.Constants
class GuideItem5CityAdapter(val context: Context, val data: List<AreaEntity>): BaseAdapter() {
override fun getCount(): Int {
return data.size
}
override fun getItem(position: Int): AreaEntity {
return data[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: View
val viewHolder: ViewHolder
if (convertView == null) {
view = View.inflate(context, R.layout.listitem_guide_item5_city, null)
viewHolder = ViewHolder(view)
view.tag = viewHolder
} else {
view = convertView
viewHolder = convertView.tag as ViewHolder
}
viewHolder.tvName.typeface = Constants.ysbth
viewHolder.tvName.text = getItem(position).name
return view
}
inner class ViewHolder(val view: View) {
val tvName: TextView = view.findViewById(R.id.tv_name)
}
}

View File

@ -0,0 +1,31 @@
package com.cheng.blzb.ui.fragment.guide.adapter
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.blzb.R
import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.common.Constants
class GuideItem5IndustryAdapter(val context: Context, val data: MutableList<HotWordEntity.Child>): RecyclerView.Adapter<BaseViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val view = View.inflate(context, R.layout.listitem_guide_item5_industry, null)
return BaseViewHolder(view)
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
holder.getView<TextView>(R.id.tv_name).typeface = Constants.ysbth
holder.setText(R.id.tv_name, data[position % data.size].name)
}
override fun getItemCount(): Int {
if (data.isNotEmpty()) {
return Int.MAX_VALUE
}
return 0
}
}

View File

@ -32,7 +32,7 @@ class GuideItem1Fragment : BaseFragment<FragmentGuideItem1Binding, GuideViewMode
super.initListener() super.initListener()
binding.ivBtn.onClick { binding.ivBtn.onClick {
if (canClick) { if (canClick) {
RxBus.defaultInstance.post(GuideEvent(true)) RxBus.defaultInstance.post(GuideEvent(1))
} }
} }
} }

View File

@ -9,6 +9,7 @@ import com.cheng.blzb.common.Constants
import com.cheng.blzb.databinding.FragmentGuideItem2Binding import com.cheng.blzb.databinding.FragmentGuideItem2Binding
import com.cheng.blzb.event.GuideEvent import com.cheng.blzb.event.GuideEvent
import com.cheng.blzb.manager.UserConfigManager import com.cheng.blzb.manager.UserConfigManager
import com.cheng.blzb.ui.fragment.guide.GuideFragment
import com.cheng.blzb.ui.fragment.guide.GuideViewModel import com.cheng.blzb.ui.fragment.guide.GuideViewModel
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem2Area1Adapter import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem2Area1Adapter
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem2Area2Adapter import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem2Area2Adapter
@ -73,7 +74,8 @@ class GuideItem2Fragment: BaseFragment<FragmentGuideItem2Binding, GuideViewModel
toast("请选择地区") toast("请选择地区")
return@onClick return@onClick
} }
RxBus.defaultInstance.post(GuideEvent(true)) GuideFragment.cityList.addAll(selectList)
RxBus.defaultInstance.post(GuideEvent(2))
} }
} }
} }

View File

@ -5,18 +5,24 @@ import android.animation.ObjectAnimator
import android.animation.PropertyValuesHolder import android.animation.PropertyValuesHolder
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
import androidx.core.animation.addListener import androidx.core.animation.addListener
import com.cheng.blzb.R
import com.cheng.blzb.common.Constants import com.cheng.blzb.common.Constants
import com.cheng.blzb.databinding.FragmentGuideItem3Binding import com.cheng.blzb.databinding.FragmentGuideItem3Binding
import com.cheng.blzb.event.GuideEvent import com.cheng.blzb.event.GuideEvent
import com.cheng.blzb.manager.UserConfigManager
import com.cheng.blzb.ui.fragment.guide.GuideFragment
import com.cheng.blzb.ui.fragment.guide.GuideViewModel import com.cheng.blzb.ui.fragment.guide.GuideViewModel
import com.example.base.common.RxBus import com.example.base.common.RxBus
import com.example.base.extensions.gone
import com.example.base.extensions.onClick import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.extensions.visible import com.example.base.extensions.visible
import com.example.base.ui.BaseFragment import com.example.base.ui.BaseFragment
import com.example.base.utils.DensityUtils import com.example.base.utils.DensityUtils
import com.example.base.utils.ScreenUtils import com.example.base.utils.ScreenUtils
class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewModel>() { class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewModel>() {
private val ids = mutableListOf<Int>()
private var canClick = false private var canClick = false
@ -34,6 +40,46 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
override fun initData() { override fun initData() {
super.initData() super.initData()
val hotWords = UserConfigManager.getGuideKeywords()
hotWords.forEachIndexed { index, item ->
when(index) {
0 -> {
binding.tvName1.text = item.name
binding.ivIcon1.setImageResource(R.mipmap.ic_guide_item3_icon1)
binding.layoutOption1.tag = item.id
}
1 -> {
binding.tvName2.text = item.name
binding.ivIcon2.setImageResource(R.mipmap.ic_guide_item3_icon2)
binding.layoutOption2.tag = item.id
}
2 -> {
binding.tvName3.text = item.name
binding.ivIcon3.setImageResource(R.mipmap.ic_guide_item3_icon3)
binding.layoutOption3.tag = item.id
}
3 -> {
binding.tvName4.text = item.name
binding.ivIcon4.setImageResource(R.mipmap.ic_guide_item3_icon4)
binding.layoutOption4.tag = item.id
}
4 -> {
binding.tvName5.text = item.name
binding.ivIcon5.setImageResource(R.mipmap.ic_guide_item3_icon5)
binding.layoutOption5.tag = item.id
}
5 -> {
binding.tvName6.text = item.name
binding.ivIcon6.setImageResource(R.mipmap.ic_guide_item3_icon6)
binding.layoutOption6.tag = item.id
}
6 -> {
binding.tvName7.text = item.name
binding.ivIcon7.setImageResource(R.mipmap.ic_guide_item3_icon7)
binding.layoutOption7.tag = item.id
}
}
}
} }
override fun onLazyLoad() { override fun onLazyLoad() {
@ -43,9 +89,110 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
binding.layoutOption1.onClick {
val id = binding.layoutOption1.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck1.gone()
} else {
ids.add(id)
binding.ivCheck1.visible()
}
}
binding.layoutOption2.onClick {
val id = binding.layoutOption2.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck2.gone()
} else {
ids.add(id)
binding.ivCheck2.visible()
}
}
binding.layoutOption3.onClick {
val id = binding.layoutOption3.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck3.gone()
} else {
ids.add(id)
binding.ivCheck3.visible()
}
}
binding.layoutOption4.onClick {
val id = binding.layoutOption4.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck4.gone()
} else {
ids.add(id)
binding.ivCheck4.visible()
}
}
binding.layoutOption5.onClick {
val id = binding.layoutOption5.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck5.gone()
} else {
ids.add(id)
binding.ivCheck5.visible()
}
}
binding.layoutOption6.onClick {
val id = binding.layoutOption6.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck6.gone()
} else {
ids.add(id)
binding.ivCheck6.visible()
}
}
binding.layoutOption7.onClick {
val id = binding.layoutOption7.tag as Int
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck7.gone()
} else {
ids.add(id)
binding.ivCheck7.visible()
}
}
binding.layoutOption8.onClick {
val id = 0
if (ids.contains(id)) {
ids.remove(id)
binding.ivCheck8.gone()
} else {
ids.add(id)
binding.ivCheck8.visible()
}
}
binding.ivBtn.onClick { binding.ivBtn.onClick {
if (canClick) { if (canClick) {
RxBus.defaultInstance.post(GuideEvent(true)) if (ids.isEmpty()) {
toast("请选择行业")
return@onClick
}
val hasOther = ids.contains(0)
val selectedList = if (hasOther) {
UserConfigManager.getGuideKeywords()
} else {
UserConfigManager.getGuideKeywords().filter { ids.contains(it.id) }
}
selectedList.forEach {
GuideFragment.hotWordList.addAll(it.children)
}
RxBus.defaultInstance.post(GuideEvent(3))
} }
} }
} }
@ -56,7 +203,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option1ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption1, scaleXHolder, scaleYHolder) val option1ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption1, scaleXHolder, scaleYHolder)
option1ScaleAnim.duration = 1000 option1ScaleAnim.duration = 1000
option1ScaleAnim.startDelay = 1800 option1ScaleAnim.startDelay = 1000
option1ScaleAnim.interpolator = LinearInterpolator() option1ScaleAnim.interpolator = LinearInterpolator()
option1ScaleAnim.addListener(onStart = { option1ScaleAnim.addListener(onStart = {
binding.layoutOption1.visible() binding.layoutOption1.visible()
@ -64,7 +211,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option2ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption2, scaleXHolder, scaleYHolder) val option2ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption2, scaleXHolder, scaleYHolder)
option2ScaleAnim.duration = 1000 option2ScaleAnim.duration = 1000
option2ScaleAnim.startDelay = 1000 option2ScaleAnim.startDelay = 1400
option2ScaleAnim.interpolator = LinearInterpolator() option2ScaleAnim.interpolator = LinearInterpolator()
option2ScaleAnim.addListener(onStart = { option2ScaleAnim.addListener(onStart = {
binding.layoutOption2.visible() binding.layoutOption2.visible()
@ -72,7 +219,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option3ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption3, scaleXHolder, scaleYHolder) val option3ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption3, scaleXHolder, scaleYHolder)
option3ScaleAnim.duration = 1000 option3ScaleAnim.duration = 1000
option3ScaleAnim.startDelay = 1400 option3ScaleAnim.startDelay = 1800
option3ScaleAnim.interpolator = LinearInterpolator() option3ScaleAnim.interpolator = LinearInterpolator()
option3ScaleAnim.addListener(onStart = { option3ScaleAnim.addListener(onStart = {
binding.layoutOption3.visible() binding.layoutOption3.visible()
@ -80,7 +227,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option4ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption4, scaleXHolder, scaleYHolder) val option4ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption4, scaleXHolder, scaleYHolder)
option4ScaleAnim.duration = 1000 option4ScaleAnim.duration = 1000
option4ScaleAnim.startDelay = 1800 option4ScaleAnim.startDelay = 1400
option4ScaleAnim.interpolator = LinearInterpolator() option4ScaleAnim.interpolator = LinearInterpolator()
option4ScaleAnim.addListener(onStart = { option4ScaleAnim.addListener(onStart = {
binding.layoutOption4.visible() binding.layoutOption4.visible()
@ -88,7 +235,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option5ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption5, scaleXHolder, scaleYHolder) val option5ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption5, scaleXHolder, scaleYHolder)
option5ScaleAnim.duration = 1000 option5ScaleAnim.duration = 1000
option5ScaleAnim.startDelay = 1200 option5ScaleAnim.startDelay = 1800
option5ScaleAnim.interpolator = LinearInterpolator() option5ScaleAnim.interpolator = LinearInterpolator()
option5ScaleAnim.addListener(onStart = { option5ScaleAnim.addListener(onStart = {
binding.layoutOption5.visible() binding.layoutOption5.visible()
@ -96,7 +243,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option6ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption6, scaleXHolder, scaleYHolder) val option6ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption6, scaleXHolder, scaleYHolder)
option6ScaleAnim.duration = 1000 option6ScaleAnim.duration = 1000
option6ScaleAnim.startDelay = 1800 option6ScaleAnim.startDelay = 1200
option6ScaleAnim.interpolator = LinearInterpolator() option6ScaleAnim.interpolator = LinearInterpolator()
option6ScaleAnim.addListener(onStart = { option6ScaleAnim.addListener(onStart = {
binding.layoutOption6.visible() binding.layoutOption6.visible()
@ -104,7 +251,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option7ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption7, scaleXHolder, scaleYHolder) val option7ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption7, scaleXHolder, scaleYHolder)
option7ScaleAnim.duration = 1000 option7ScaleAnim.duration = 1000
option7ScaleAnim.startDelay = 1400 option7ScaleAnim.startDelay = 1600
option7ScaleAnim.interpolator = LinearInterpolator() option7ScaleAnim.interpolator = LinearInterpolator()
option7ScaleAnim.addListener(onStart = { option7ScaleAnim.addListener(onStart = {
binding.layoutOption7.visible() binding.layoutOption7.visible()
@ -112,7 +259,7 @@ class GuideItem3Fragment : BaseFragment<FragmentGuideItem3Binding, GuideViewMode
val option8ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption8, scaleXHolder, scaleYHolder) val option8ScaleAnim = ObjectAnimator.ofPropertyValuesHolder(binding.layoutOption8, scaleXHolder, scaleYHolder)
option8ScaleAnim.duration = 1000 option8ScaleAnim.duration = 1000
option8ScaleAnim.startDelay = 1600 option8ScaleAnim.startDelay = 1800
option8ScaleAnim.interpolator = LinearInterpolator() option8ScaleAnim.interpolator = LinearInterpolator()
option8ScaleAnim.addListener(onStart = { option8ScaleAnim.addListener(onStart = {
binding.layoutOption8.visible() binding.layoutOption8.visible()

View File

@ -0,0 +1,245 @@
package com.cheng.blzb.ui.fragment.guide.item
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.view.Gravity
import android.view.animation.LinearInterpolator
import android.view.animation.RotateAnimation
import android.widget.TextView
import androidx.core.animation.addListener
import com.cheng.blzb.R
import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.databinding.FragmentGuideItem4Binding
import com.cheng.blzb.event.GuideEvent
import com.cheng.blzb.ui.dialog.AddKeywordDialog
import com.cheng.blzb.ui.fragment.guide.GuideFragment
import com.cheng.blzb.ui.fragment.guide.GuideViewModel
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem4Adapter
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem4SelectedAdapter
import com.example.base.common.RxBus
import com.example.base.decoration.GridSpaceItemDecoration
import com.example.base.extensions.getColor
import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.extensions.visible
import com.example.base.ui.BaseFragment
import com.example.base.utils.DensityUtils
import com.example.base.utils.ScreenUtils
import com.example.base.utils.SpanUtils
import kotlin.math.ceil
class GuideItem4Fragment : BaseFragment<FragmentGuideItem4Binding, GuideViewModel>() {
private val mAdapter by lazy { GuideItem4Adapter() }
private val selectedAdapter by lazy { GuideItem4SelectedAdapter() }
private val hotWordChildList = mutableListOf<HotWordEntity.Child>()
private var tabIndex = 0
private var page = 0
private var canClick = false
override fun initView() {
super.initView()
binding.mRecyclerView.adapter = mAdapter
binding.mRecyclerView.addItemDecoration(GridSpaceItemDecoration(3, DensityUtils.dp2px(10f), DensityUtils.dp2px(10f)))
binding.rvSelectedKeywords.adapter = selectedAdapter
binding.rvSelectedKeywords.addItemDecoration(GridSpaceItemDecoration(3, DensityUtils.dp2px(10f), DensityUtils.dp2px(10f)))
selectedAdapter.addData(HotWordEntity.Child(id = -1, name = "自定义", isChecked = true))
setKeywordCount()
}
override fun onLazyLoad() {
super.onLazyLoad()
hotWordChildList.addAll(GuideFragment.hotWordList)
hotWordChildList.forEach { item ->
binding.tabLayout.addView(createTab(item.name))
}
startAnim()
}
override fun initListener() {
super.initListener()
binding.tabLayout.observeIndexChange { fromIndex, toIndex, _, _ ->
page = 0
tabIndex = toIndex
if (fromIndex >= 0) {
val textView = binding.tabLayout.getChildAt(fromIndex)
textView.setBackgroundResource(0)
}
if (toIndex >= 0) {
val textView = binding.tabLayout.getChildAt(toIndex)
textView.setBackgroundResource(R.drawable.shape_f5f8ff_top_cor16)
}
val hotWordChild = hotWordChildList[toIndex]
binding.tvAmount.text = "${hotWordChild.amount}亿元"
val keywordList = mutableListOf<HotWordEntity.Child>()
for (i in 0 until 15) {
keywordList.add(hotWordChild.children[i])
}
mAdapter.setList(keywordList)
}
binding.ivRefresh.onClick {
startRotate()
val hotWordChild = hotWordChildList[tabIndex]
if (ceil(hotWordChild.children.size / 15.0) > page + 1) {
page++
} else {
page = 0
}
val keywordList = mutableListOf<HotWordEntity.Child>()
for (i in page * 15 until ((page + 1) * 15).coerceAtMost(hotWordChild.children.size)) {
keywordList.add(hotWordChild.children[i])
}
mAdapter.setList(keywordList)
}
binding.ivBtn.onClick {
if (!canClick) return@onClick
if (selectedAdapter.data.size == 1) {
toast("请添加关键词")
return@onClick
}
val keywords = selectedAdapter.data.filter { it.id != -1 }.map { it.name }
val cityIds = GuideFragment.cityList.map { it.id }
mViewModel.getTotalBidInfo(keywords.joinToString(","), cityIds.joinToString(","), "${hotWordChildList.size}")
}
mAdapter.setOnItemClickListener { _, _, i ->
if (!canClick) return@setOnItemClickListener
val item = mAdapter.getItem(i)
if (!item.isChecked && selectedAdapter.data.size == 6) {
toast("最多添加5个关键词")
return@setOnItemClickListener
}
item.isChecked = !item.isChecked
mAdapter.notifyDataSetChanged()
if (item.isChecked) {
selectedAdapter.addData(item)
} else {
selectedAdapter.remove(item)
}
setKeywordCount()
}
selectedAdapter.setOnItemClickListener { _, _, i ->
val item = selectedAdapter.getItem(i)
if (item.id == -1) {
if (selectedAdapter.data.size == 6) {
toast("最多添加5个关键词")
return@setOnItemClickListener
}
val f = AddKeywordDialog.newInstance()
f.setOnBackListener {
selectedAdapter.addData(HotWordEntity.Child(name = it, isChecked = true))
setKeywordCount()
}
f.show(childFragmentManager, "")
}
}
selectedAdapter.setOnItemChildClickListener { _, view, i ->
val item = selectedAdapter.getItem(i)
if (!canClick || item.id == -1) return@setOnItemChildClickListener
if (view.id == R.id.iv_delete) {
selectedAdapter.remove(item)
item.isChecked = false
mAdapter.notifyDataSetChanged()
setKeywordCount()
}
}
}
override fun initObserve() {
super.initObserve()
mViewModel.totalLiveData.observe(this) {
GuideFragment.totalInfo = it
RxBus.defaultInstance.post(GuideEvent(4))
}
}
private fun setKeywordCount() {
SpanUtils.with(binding.tvKeywordsCount)
.append("已添加关键词(")
.append("${selectedAdapter.data.size - 1}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/5)")
.create()
}
private fun createTab(title: String): TextView {
val textView = TextView(requireContext())
textView.text = title
textView.gravity = Gravity.CENTER
textView.setPadding(DensityUtils.dp2px(14f) , 0, DensityUtils.dp2px(14f), 0)
return textView
}
private fun startRotate() {
if (binding.ivRefresh.animation != null) {
binding.ivRefresh.animation.cancel()
}
val anim = RotateAnimation(0f, 360f, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f)
anim.duration = 1000
binding.ivRefresh.startAnimation(anim)
}
private fun startAnim() {
val keyword1TransAnim = ObjectAnimator.ofFloat(binding.layoutKeywords, "translationY", ScreenUtils.getScreenWidth().toFloat(), 0f)
keyword1TransAnim.duration = 1000
keyword1TransAnim.startDelay = 200
keyword1TransAnim.addListener(onStart = {
binding.layoutKeywords.visible()
})
val keyword2TransAnim = ObjectAnimator.ofFloat(binding.layoutSelectedKeywords, "translationY", ScreenUtils.getScreenWidth().toFloat(), 0f)
keyword2TransAnim.duration = 1000
keyword2TransAnim.startDelay = 600
keyword2TransAnim.addListener(onStart = {
binding.layoutSelectedKeywords.visible()
})
val titleTransAnim = ObjectAnimator.ofFloat(binding.ivTitle, "translationY", -DensityUtils.dp2px(200f).toFloat(), 0f)
titleTransAnim.duration = 1000
titleTransAnim.startDelay = 200
titleTransAnim.addListener(onStart = {
binding.ivTitle.visible()
})
val descTransAnim = ObjectAnimator.ofFloat(binding.ivDesc, "translationY", -DensityUtils.dp2px(200f).toFloat(), 0f)
descTransAnim.duration = 1000
titleTransAnim.startDelay = 200
descTransAnim.addListener(onStart = {
binding.ivDesc.visible()
})
val btnTransAnim = ObjectAnimator.ofFloat(binding.ivBtn, "translationY", DensityUtils.dp2px(100f).toFloat(), 0f)
btnTransAnim.duration = 1000
btnTransAnim.startDelay = 800
btnTransAnim.interpolator = LinearInterpolator()
btnTransAnim.addListener(onStart = {
binding.ivBtn.visible()
}, onEnd = {
canClick = true
})
val animSet = AnimatorSet()
animSet.playTogether(
keyword1TransAnim,
keyword2TransAnim,
titleTransAnim,
descTransAnim,
btnTransAnim
)
animSet.start()
}
}

View File

@ -0,0 +1,242 @@
package com.cheng.blzb.ui.fragment.guide.item
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.LinearInterpolator
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.animation.addListener
import androidx.core.view.isVisible
import com.cheng.blzb.bean.AreaEntity
import com.cheng.blzb.bean.GuideTotalBidEntity
import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.common.Constants
import com.cheng.blzb.databinding.FragmentGuideItem5Binding
import com.cheng.blzb.ui.activity.PublicActivity
import com.cheng.blzb.ui.fragment.guide.GuideFragment
import com.cheng.blzb.ui.fragment.guide.GuideViewModel
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem5CityAdapter
import com.cheng.blzb.ui.fragment.guide.adapter.GuideItem5IndustryAdapter
import com.cheng.blzb.ui.fragment.guide.vip.GuideVipFragment
import com.example.base.extensions.visible
import com.example.base.ui.BaseFragment
import com.example.base.utils.DensityUtils
import com.google.gson.Gson
import com.yy.mobile.rollingtextview.CharOrder
import com.yy.mobile.rollingtextview.strategy.Strategy
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.Disposable
import org.libpag.PAGFile
import java.util.concurrent.TimeUnit
class GuideItem5Fragment : BaseFragment<FragmentGuideItem5Binding, GuideViewModel>() {
private val cityAdapter by lazy { GuideItem5CityAdapter(requireContext(), cityList) }
private val industryAdapter by lazy { GuideItem5IndustryAdapter(requireContext(), hotWordChildList) }
private val hotWordChildList = mutableListOf<HotWordEntity.Child>()
private val cityList = mutableListOf<AreaEntity>()
private var totalInfo: GuideTotalBidEntity? = null
private var industryTask: Disposable? = null
override fun initView() {
super.initView()
binding.tvBidCount.typeface = Constants.ysbth
binding.tvUnit.typeface = Constants.ysbth
binding.rvIndustry.adapter = industryAdapter
}
override fun onLazyLoad() {
super.onLazyLoad()
totalInfo = GuideFragment.totalInfo
cityList.addAll(GuideFragment.cityList)
binding.viewFlipper.adapter = cityAdapter
hotWordChildList.addAll(GuideFragment.hotWordList)
industryAdapter.notifyDataSetChanged()
startIndustryTask()
startAnim()
}
private fun startAnim() {
val bgTransAnim = ObjectAnimator.ofFloat(binding.ivBg, "translationY", 0f, -DensityUtils.dp2px(75f).toFloat())
bgTransAnim.duration = 2000
bgTransAnim.startDelay = 200
val star1TranAnim = ObjectAnimator.ofFloat(binding.ivStar1, "translationY", DensityUtils.dp2px(125f).toFloat(), 0f)
star1TranAnim.duration = 2000
star1TranAnim.startDelay = 200
val star2TranAnim = ObjectAnimator.ofFloat(binding.ivStar2, "translationY", 0f, -DensityUtils.dp2px(125f).toFloat())
star2TranAnim.duration = 2000
star2TranAnim.startDelay = 200
val earthTransAnim = ObjectAnimator.ofFloat(binding.ivEarth, "translationY", 0f, -DensityUtils.dp2px(150f).toFloat())
earthTransAnim.duration = 2000
earthTransAnim.startDelay = 200
val earthRotateAnim = ObjectAnimator.ofFloat(binding.ivEarth, "rotation", 0f, 360f)
earthRotateAnim.duration = 100000
earthRotateAnim.startDelay = 2400
earthRotateAnim.repeatCount = -1
earthRotateAnim.interpolator = LinearInterpolator()
val infoAlphaAnim = ObjectAnimator.ofFloat(binding.layoutInfo, "alpha", 0f, 1f)
infoAlphaAnim.duration = 1000
infoAlphaAnim.startDelay = 2400
infoAlphaAnim.addListener(onStart = {
binding.layoutInfo.visible()
}, onEnd = {
startNumAnim()
})
val progressMaskAnim = ValueAnimator.ofFloat(0f, 1f)
progressMaskAnim.duration = 1000
progressMaskAnim.startDelay = 2400
val maskHeight = binding.ivProgressMask.height
progressMaskAnim.addUpdateListener { animator ->
val value = animator.animatedValue as Float
val lp = binding.ivProgressMask.layoutParams as ConstraintLayout.LayoutParams
lp.height = (value * maskHeight).toInt()
binding.ivProgressMask.layoutParams = lp
if (!binding.ivProgressMask.isVisible) {
binding.ivProgressMask.visible()
}
}
progressMaskAnim.addListener(onEnd = {
startProgressAnim()
val pagFile = PAGFile.Load(requireContext().assets, "effects/guide_bubble.pag")
binding.pagView.composition = pagFile
binding.pagView.setRepeatCount(0)
binding.pagView.play()
binding.pagView.visible()
})
val animSet = AnimatorSet()
animSet.playTogether(bgTransAnim, star1TranAnim, star2TranAnim, earthTransAnim, earthRotateAnim, infoAlphaAnim, progressMaskAnim)
animSet.start()
}
private fun startNumAnim() {
binding.tvBidCount.animationDuration = 2000
binding.tvBidCount.charStrategy = Strategy.CarryBitAnimation()
binding.tvBidCount.addCharOrder(CharOrder.Number)
binding.tvBidCount.animationInterpolator = AccelerateDecelerateInterpolator()
binding.tvBidCount.setText("${totalInfo?.bidCount}")
}
private fun startProgressAnim() {
binding.progressBar.post {
if (activity != null) {
binding.progressBar.progress = 1
binding.tvProgressStatus.text = "采集引擎启动中...."
}
}
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 10
binding.tvProgressStatus.text = "筛选区域标讯..."
}
}, 1500)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 20
binding.tvProgressStatus.text = "筛选行业标讯..."
}
}, 2000)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 30
binding.tvProgressStatus.text = "关键词标讯标注中..."
}
}, 2500)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 40
binding.tvProgressStatus.text = "筛选最新优质标讯..."
}
}, 3000)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 50
binding.tvProgressStatus.text = "正在整理数据..."
}
}, 3500)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 60
binding.tvProgressStatus.text = "正在整理数据..."
}
}, 5500)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 70
binding.tvProgressStatus.text = "正在整理数据..."
}
}, 7500)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 80
binding.tvProgressStatus.text = "正在整理数据..."
}
}, 7600)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 90
binding.tvProgressStatus.text = "正在整理数据..."
}
}, 7700)
binding.progressBar.postDelayed({
if (activity != null) {
binding.progressBar.progress = 100
binding.tvProgressStatus.text = "打开标讯采集报告..."
binding.progressBar.postDelayed({
if (activity != null) {
PublicActivity.start(
requireContext(),
GuideVipFragment::class.java,
Pair("hotWords", Gson().toJson(hotWordChildList)),
Pair("total", totalInfo)
)
requireActivity().finish()
}
}, 1000)
}
}, 8700)
}
private fun startIndustryTask() {
if (industryAdapter.data.isEmpty() || industryTask != null) return
industryTask = Observable.interval(300, 9, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
if (activity != null) {
binding.rvIndustry.scrollBy(3, 0)
}
}
}
private fun stopIndustryTask() {
industryTask?.dispose()
industryTask = null
}
override fun onStart() {
super.onStart()
startIndustryTask()
}
override fun onStop() {
super.onStop()
stopIndustryTask()
}
}

View File

@ -0,0 +1,45 @@
package com.cheng.blzb.ui.fragment.guide.vip
import android.annotation.SuppressLint
import android.window.OnBackInvokedDispatcher
import androidx.activity.addCallback
import androidx.core.os.BuildCompat
import com.cheng.blzb.databinding.FragmentGuideVipBinding
import com.cheng.blzb.ui.activity.MainActivity
import com.cheng.blzb.ui.fragment.guide.GuideViewModel
import com.example.base.extensions.onClick
import com.example.base.ui.BaseFragment
import org.jetbrains.anko.startActivity
class GuideVipFragment: BaseFragment<FragmentGuideVipBinding, GuideViewModel>() {
override fun initView() {
super.initView()
}
override fun initData() {
super.initData()
}
override fun initListener() {
super.initListener()
setBackPressed()
binding.ivClose.onClick {
requireActivity().startActivity<MainActivity>()
}
}
override fun initObserve() {
super.initObserve()
}
@SuppressLint("UnsafeOptInUsageError")
private fun setBackPressed() {
if (BuildCompat.isAtLeastT()) {
requireActivity().onBackInvokedDispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT) {}
} else {
requireActivity().onBackPressedDispatcher.addCallback(this) {}
}
}
}

View File

@ -0,0 +1,79 @@
package com.cheng.blzb.ui.fragment.guide.vip
import androidx.lifecycle.MutableLiveData
import com.cheng.blzb.bean.AreaEntity
import com.cheng.blzb.bean.GuideTotalBidEntity
import com.cheng.blzb.bean.GuideUpdateEntity
import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.net.ApiFactory
import com.example.base.extensions.toast
import com.example.base.utils.L
import com.example.base.viewmodel.BaseViewModel
class GuideVipViewModel: BaseViewModel() {
val hotWordLiveData = MutableLiveData<List<HotWordEntity>>()
val cityLiveData = MutableLiveData<List<AreaEntity>>()
val userCityLiveData = MutableLiveData<AreaEntity>()
val totalLiveData = MutableLiveData<GuideTotalBidEntity>()
val updateLiveData = MutableLiveData<List<GuideUpdateEntity>>()
fun getHotWordList() {
launchOnUiTryCatch({
val response = ApiFactory.apiService.getHotWordList()
if (response.status) {
hotWordLiveData.postValue(response.data)
} else toast(response.message, true)
}, {
setError(it)
L.d(it)
})
}
fun getCityList() {
launchOnUiTryCatch({
val response = ApiFactory.apiService.getAreaList()
if (response.status) {
cityLiveData.postValue(response.data)
} else toast(response.message, true)
}, {
setError(it)
L.d(it)
})
}
fun getUserCity() {
launchOnUiTryCatch({
val response = ApiFactory.apiService.getUserCity()
if (response.status) {
userCityLiveData.postValue(response.data)
} else toast(response.message, true)
}, {
setError(it)
L.d(it)
})
}
fun getTotalBidInfo(keywords: String, cityIds: String, kindNum: String) {
launchOnUiTryCatch({
val response = ApiFactory.apiService.getTotalBidInfo(keywords, cityIds, kindNum)
if (response.status) {
totalLiveData.postValue(response.data)
} else toast(response.message, true)
}, {
setError(it)
L.d(it)
})
}
fun getUpdateNum() {
launchOnUiTryCatch({
val response = ApiFactory.apiService.getUpdateNum("8")
if (response.status) {
updateLiveData.postValue(response.data)
} else toast(response.message, true)
}, {
setError(it)
L.d(it)
})
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:propertyName="translationY"
android:valueFrom="150"
android:valueTo="0" />

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:propertyName="translationY"
android:valueFrom="0"
android:valueTo="-150"/>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="@color/white" />
<size android:height="@dimen/dp_10" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<solid android:color="@color/white" />
<size android:height="@dimen/dp_10" />
<corners android:radius="@dimen/dp_10" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/color_125ffe" />
<size android:height="@dimen/dp_10" />
<corners android:radius="@dimen/dp_10" />
</shape>
</clip>
</item>
</layer-list>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_16" />
<solid android:color="#F5F8FF" />
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_4" />
<solid android:color="#F5F8FF" />
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:topLeftRadius="@dimen/dp_16"
android:topRightRadius="@dimen/dp_16" />
<solid android:color="#F5F8FF" />
</shape>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="#E5EDFF"
android:startColor="#6694FE" />
</shape>

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
android:src="@mipmap/ic_close_dialog2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_18"
android:background="@mipmap/ic_add_keyword_dialog_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_close">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_44"
android:text="自定义关键词"
android:textColor="@color/color_222222"
android:textSize="@dimen/sp_18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:text="最多5个关键词~"
android:textColor="@color/color_222222"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_keyword"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_52"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_26"
android:layout_marginEnd="@dimen/dp_16"
app:layout_constraintTop_toBottomOf="@id/tv_desc">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_keyword"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_white_line_cor8"
android:hint="请输入您想要订阅的关键词"
android:maxLength="10"
android:maxLines="1"
android:paddingStart="@dimen/dp_14"
android:paddingEnd="@dimen/dp_14"
android:singleLine="true"
android:textColor="@color/color_222222"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_15"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_clear_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:src="@mipmap/ic_clear_text"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/et_keyword"
app:layout_constraintEnd_toEndOf="@id/et_keyword"
app:layout_constraintTop_toTopOf="@id/et_keyword" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_46"
android:paddingStart="@dimen/dp_16"
android:paddingTop="@dimen/dp_9"
android:paddingEnd="@dimen/dp_16"
android:paddingBottom="@dimen/dp_9"
app:layout_constraintTop_toBottomOf="@id/layout_keyword">
<com.cheng.blzb.widget.CommonShapeView
android:id="@+id/btn_next"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_46"
android:fontFamily="sans-serif-medium"
android:text="确定"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
app:csb_cornerRadius="@dimen/dp_10"
app:csb_fillColor="@color/color_125ffe"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,7 +4,7 @@
xmlns:tool="http://schemas.android.com/tools" xmlns:tool="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/shape_guide_item3_bg"> android:background="@mipmap/ic_guide_bg">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_bg" android:id="@+id/iv_bg"
@ -59,17 +59,14 @@
android:id="@+id/layout_option1" android:id="@+id/layout_option1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_25" android:layout_marginBottom="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_100"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toTopOf="@id/layout_option3"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/iv_desc"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon1" android:id="@+id/iv_icon1"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon1" android:src="@mipmap/ic_guide_item3_icon1"
@ -83,8 +80,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon1" app:layout_constraintStart_toStartOf="@id/iv_icon1"
app:layout_constraintTop_toTopOf="@id/ic_icon1" /> app:layout_constraintTop_toTopOf="@id/iv_icon1" />
<TextView <TextView
android:id="@+id/tv_name1" android:id="@+id/tv_name1"
@ -94,26 +91,27 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="通讯媒体" android:text="工程建筑"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon1" /> app:layout_constraintTop_toBottomOf="@id/iv_icon1" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option2" android:id="@+id/layout_option2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_60" android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_24"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@id/layout_option1" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="@id/iv_desc" app:layout_constraintTop_toBottomOf="@id/layout_option1"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon2" android:id="@+id/iv_icon2"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon2" android:src="@mipmap/ic_guide_item3_icon2"
@ -127,8 +125,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon2" app:layout_constraintStart_toStartOf="@id/iv_icon2"
app:layout_constraintTop_toTopOf="@id/ic_icon2" /> app:layout_constraintTop_toTopOf="@id/iv_icon2" />
<TextView <TextView
android:id="@+id/tv_name2" android:id="@+id/tv_name2"
@ -138,27 +136,29 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="工程建筑" android:text="工业制造"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon2" /> app:layout_constraintTop_toBottomOf="@id/iv_icon2" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option3" android:id="@+id/layout_option3"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20" android:layout_marginStart="@dimen/dp_25"
android:layout_marginTop="@dimen/dp_24" android:layout_marginBottom="@dimen/dp_100"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_option2" app:layout_constraintTop_toTopOf="parent"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon3" android:id="@+id/iv_icon3"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon3" android:src="@mipmap/ic_guide_item3_icon3"
@ -172,8 +172,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon3" app:layout_constraintStart_toStartOf="@id/iv_icon3"
app:layout_constraintTop_toTopOf="@id/ic_icon3" /> app:layout_constraintTop_toTopOf="@id/iv_icon3" />
<TextView <TextView
android:id="@+id/tv_name3" android:id="@+id/tv_name3"
@ -183,27 +183,27 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="工业制造" android:text="通讯媒体"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon3" /> app:layout_constraintTop_toBottomOf="@id/iv_icon3" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option4" android:id="@+id/layout_option4"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_35" android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_28" android:layout_marginBottom="@dimen/dp_37"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toTopOf="@id/layout_option8"
app:layout_constraintTop_toBottomOf="@id/layout_option3" app:layout_constraintEnd_toEndOf="@id/layout_option8"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon4" android:id="@+id/iv_icon4"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon4" android:src="@mipmap/ic_guide_item3_icon4"
@ -217,8 +217,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon4" app:layout_constraintStart_toStartOf="@id/iv_icon4"
app:layout_constraintTop_toTopOf="@id/ic_icon4" /> app:layout_constraintTop_toTopOf="@id/iv_icon4" />
<TextView <TextView
android:id="@+id/tv_name4" android:id="@+id/tv_name4"
@ -228,27 +228,28 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="科学教育" android:text="商业环卫"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon4" /> app:layout_constraintTop_toBottomOf="@id/iv_icon4" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option5" android:id="@+id/layout_option5"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_44" android:layout_marginStart="@dimen/dp_35"
android:layout_marginTop="-30dp" android:layout_marginTop="@dimen/dp_28"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintStart_toEndOf="@id/layout_option4" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_option4" app:layout_constraintTop_toBottomOf="@id/layout_option2"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon5" android:id="@+id/iv_icon5"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon5" android:src="@mipmap/ic_guide_item3_icon5"
@ -262,8 +263,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon5" app:layout_constraintStart_toStartOf="@id/iv_icon5"
app:layout_constraintTop_toTopOf="@id/ic_icon5" /> app:layout_constraintTop_toTopOf="@id/iv_icon5" />
<TextView <TextView
android:id="@+id/tv_name5" android:id="@+id/tv_name5"
@ -273,27 +274,27 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="交通运输" android:text="科学教育"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon5" /> app:layout_constraintTop_toBottomOf="@id/iv_icon5" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option6" android:id="@+id/layout_option6"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_32" android:layout_marginStart="@dimen/dp_44"
android:layout_marginEnd="@dimen/dp_25" android:layout_marginTop="-30dp"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/layout_option5"
app:layout_constraintTop_toTopOf="@id/layout_option5" app:layout_constraintTop_toBottomOf="@id/layout_option5"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon6" android:id="@+id/iv_icon6"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon6" android:src="@mipmap/ic_guide_item3_icon6"
@ -307,8 +308,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon6" app:layout_constraintStart_toStartOf="@id/iv_icon6"
app:layout_constraintTop_toTopOf="@id/ic_icon6" /> app:layout_constraintTop_toTopOf="@id/iv_icon6" />
<TextView <TextView
android:id="@+id/tv_name6" android:id="@+id/tv_name6"
@ -318,27 +319,27 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="其他" android:text="交通运输"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon6" /> app:layout_constraintTop_toBottomOf="@id/iv_icon6" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option7" android:id="@+id/layout_option7"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16" android:layout_marginEnd="@dimen/dp_25"
android:layout_marginBottom="@dimen/dp_37" android:layout_marginBottom="@dimen/dp_3"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@id/layout_option6" app:layout_constraintBottom_toTopOf="@id/layout_option3"
app:layout_constraintEnd_toEndOf="@id/layout_option6" app:layout_constraintEnd_toEndOf="parent"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon7" android:id="@+id/iv_icon7"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon7" android:src="@mipmap/ic_guide_item3_icon7"
@ -352,8 +353,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon7" app:layout_constraintStart_toStartOf="@id/iv_icon7"
app:layout_constraintTop_toTopOf="@id/ic_icon7" /> app:layout_constraintTop_toTopOf="@id/iv_icon7" />
<TextView <TextView
android:id="@+id/tv_name7" android:id="@+id/tv_name7"
@ -363,27 +364,27 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="商业环卫" android:text="能源产业"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon7" /> app:layout_constraintTop_toBottomOf="@id/iv_icon7" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_option8" android:id="@+id/layout_option8"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_32"
android:layout_marginEnd="@dimen/dp_25" android:layout_marginEnd="@dimen/dp_25"
android:layout_marginBottom="@dimen/dp_3"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@id/layout_option1"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/layout_option6"
tool:visibility="visible"> tool:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_icon8" android:id="@+id/iv_icon8"
android:layout_width="@dimen/dp_60" android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60" android:layout_height="@dimen/dp_60"
android:src="@mipmap/ic_guide_item3_icon8" android:src="@mipmap/ic_guide_item3_icon8"
@ -397,8 +398,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item3_checked" android:src="@mipmap/ic_guide_item3_checked"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/ic_icon8" app:layout_constraintStart_toStartOf="@id/iv_icon8"
app:layout_constraintTop_toTopOf="@id/ic_icon8" /> app:layout_constraintTop_toTopOf="@id/iv_icon8" />
<TextView <TextView
android:id="@+id/tv_name8" android:id="@+id/tv_name8"
@ -408,12 +409,13 @@
android:drawableStart="@mipmap/ic_guide_item3_star_default" android:drawableStart="@mipmap/ic_guide_item3_star_default"
android:drawablePadding="@dimen/dp_2" android:drawablePadding="@dimen/dp_2"
android:gravity="center" android:gravity="center"
android:text="能源产业" android:text="其他"
android:textColor="@color/color_222222" android:textColor="@color/color_222222"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ic_icon8" /> app:layout_constraintTop_toBottomOf="@id/iv_icon8" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/ic_guide_bg">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_42"
android:src="@mipmap/ic_guide_item4_title"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tool:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:src="@mipmap/ic_guide_item4_desc"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_title"
tool:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_30"
android:src="@mipmap/ic_guide_item3_btn"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tool:visibility="visible" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_keywords"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_28"
android:layout_marginEnd="@dimen/dp_16"
android:background="@drawable/shape_f5f8ff_cor16"
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@id/iv_desc"
tool:visibility="visible">
<com.angcyo.tablayout.DslTabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_38"
android:background="@drawable/shape_white_top_cor16"
app:layout_constraintTop_toTopOf="parent"
app:tab_deselect_color="#929DB6"
app:tab_enable_gradient_text_size="false"
app:tab_enable_text_bold="true"
app:tab_item_auto_equ_width="false"
app:tab_select_color="@color/color_125ffe"
app:tab_text_max_size="@dimen/sp_14"
app:tab_text_min_size="@dimen/sp_14" />
<LinearLayout
android:id="@+id/layout_base_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_11"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@id/tabLayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:text="行业交易规模"
android:textColor="#3B3F47"
android:textSize="@dimen/sp_10" />
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:drawableStart="@mipmap/ic_guide_fire"
android:drawablePadding="@dimen/dp_2"
android:gravity="center"
android:text="877.78亿"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/sp_10" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:src="@mipmap/ic_refresh_guide_keywords" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_14"
android:background="@drawable/shape_white_cor14"
android:overScrollMode="never"
android:padding="@dimen/dp_14"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_base_info"
app:spanCount="3"
tool:itemCount="18"
tool:listitem="@layout/listitem_guide_item4" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_selected_keywords"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_16"
android:background="@drawable/shape_f5f8ff_cor16"
android:padding="@dimen/dp_14"
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@id/layout_keywords"
tool:visibility="visible">
<TextView
android:id="@+id/tv_keywords_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="已添加关键词(5/5)"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_14"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_selected_keywords"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/shape_white_cor14"
android:paddingStart="@dimen/dp_12"
android:paddingTop="@dimen/dp_10"
android:paddingEnd="@dimen/dp_12"
android:paddingBottom="@dimen/dp_10"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintTop_toBottomOf="@id/tv_keywords_count"
app:spanCount="3"
tool:itemCount="5"
tool:listitem="@layout/listitem_guide4_selected_keyword" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:scaleY="1.5"
android:src="@mipmap/ic_guide_item5_bg"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_star1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_guide_item5_star"
android:translationY="125dp"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_star2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:rotation="180"
android:src="@mipmap/ic_guide_item5_star"
app:layout_constraintBottom_toBottomOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_earth"
android:layout_width="586dp"
android:layout_height="567dp"
android:src="@mipmap/ic_guide_item5_earth"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/ic_guide_item5_mask" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_65"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@id/progressBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible">
<LinearLayout
android:id="@+id/layout_city"
android:layout_width="@dimen/dp_180"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_35"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_search"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/ic_guide_item5_search"
app:layout_constraintBottom_toBottomOf="@id/viewFlipper"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/viewFlipper" />
<AdapterViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:autoStart="true"
android:flipInterval="500"
android:inAnimation="@animator/anim_vf_in"
android:loopViews="true"
android:outAnimation="@animator/anim_vf_out"
app:layout_constraintStart_toEndOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<com.yy.mobile.rollingtextview.RollingTextView
android:id="@+id/tv_bid_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="00000"
android:textColor="@color/white"
android:textSize="44sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_city"
app:layout_constraintWidth_min="@dimen/dp_140" />
<TextView
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_10"
android:text="条"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/tv_bid_count"
app:layout_constraintStart_toEndOf="@id/tv_bid_count" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_industry"
android:layout_width="@dimen/dp_100"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_bid_count"
tools:listitem="@layout/listitem_guide_item5_industry" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_38"
android:layout_marginEnd="@dimen/dp_38"
android:layout_marginBottom="@dimen/dp_60"
android:elevation="@dimen/dp_1"
android:progressDrawable="@drawable/layer_guide_item5_progress"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_progress_mask"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="-5dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_guide_item5_progress_start"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="@id/progressBar"
app:layout_constraintStart_toStartOf="@id/progressBar"
app:layout_constraintTop_toBottomOf="@id/progressBar"
tools:visibility="visible" />
<org.libpag.PAGImageView
android:id="@+id/pagView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
<TextView
android:id="@+id/tv_progress_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_14"
android:fontFamily="sans-serif-medium"
android:text="采集引擎启动中...."
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/ic_guide_vip_bg">
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_60"
android:src="@mipmap/ic_guide_vip_close" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_f5f8ff_cor4">
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_2"
android:ellipsize="marquee"
android:gravity="center_vertical"
android:maxLines="1"
android:singleLine="true"
android:text="数字电路"
android:scrollHorizontally="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColor="@color/color_125ffe"
android:textSize="@dimen/sp_13"
app:csb_drawablePosition="right"
app:csb_fillColor="#F5F8FF"
app:layout_constraintEnd_toStartOf="@id/iv_delete"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_8"
android:src="@mipmap/ic_guide_item4_delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_f5f8ff_cor4">
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_2"
android:gravity="center_vertical"
android:maxLines="1"
android:singleLine="true"
android:text="数字电路"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_13"
app:csb_drawablePosition="right"
app:csb_fillColor="#F5F8FF"
app:layout_constraintEnd_toStartOf="@id/iv_add"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_8"
android:src="@mipmap/ic_guide_item4_checked"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重庆市"
android:layout_gravity="center"
android:textStyle="bold"
android:textColor="@color/white"
android:textSize="44sp" />
</FrameLayout>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="能源电力"
android:textColor="@color/white"
android:textSize="@dimen/sp_26"
android:textStyle="bold" />
</LinearLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

View File

@ -91,5 +91,6 @@
<dimen name="dp_68">68dp</dimen> <dimen name="dp_68">68dp</dimen>
<dimen name="dp_66">66dp</dimen> <dimen name="dp_66">66dp</dimen>
<dimen name="dp_190">190dp</dimen> <dimen name="dp_190">190dp</dimen>
<dimen name="dp_180">180dp</dimen>
</resources> </resources>