lmw
2025-02-28 3dc12ef829d9bcd6a2a85a7456eb24f304c15c66
app/src/main/java/com/sinata/xqmuse/ui/tree/TreeFragment.kt
@@ -10,6 +10,8 @@
import cn.sinata.xldutils.visible
import com.github.penfeizhou.animation.apng.APNGDrawable
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.luck.picture.lib.tools.SPUtils
import com.sinata.xqmuse.MainActivity
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.TreeTipDialog
import com.sinata.xqmuse.network.HttpManager
@@ -20,6 +22,7 @@
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.ScreenUtil
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.checkLogin
import com.sinata.xqmuse.utils.extention.clickDelay
import kotlinx.android.synthetic.main.fragment_tree.*
import org.greenrobot.eventbus.EventBus
@@ -46,10 +49,10 @@
        Log.e("虚拟导航栏高度", "$virtualBarHeigh")
        val navigationBarHeight = getNavigationBarHeight()
        Log.e("导航栏高度", "$navigationBarHeight")
        if (virtualBarHeigh >= getNavigationBarHeight()) //如果虚拟导航栏高度大于或等于导航栏高度,说明虚拟导航栏在显示,需要减去导航栏的高度
            behavior.setPeekHeight(dip(63) - getNavigationBarHeight(), true)
        else
            behavior.setPeekHeight(dip(63), true)
//        if (virtualBarHeigh >= getNavigationBarHeight()) //如果虚拟导航栏高度大于或等于导航栏高度,说明虚拟导航栏在显示,需要减去导航栏的高度
//            behavior.setPeekHeight(dip(63) + getNavigationBarHeight(), true)
//        else
        behavior.setPeekHeight(dip(63), true)
        tv_rule.setOnClickListener {
            HttpManager.getH5(6).requestByF(this){ _, data->
                data?.let {
@@ -57,6 +60,7 @@
                }
            }
        }
        tv_sign.clickDelay {
            HttpManager.sign().requestByF(this){_,data->
                tv_sign.isEnabled = false
@@ -75,13 +79,12 @@
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.SWITCH_HOME))
        }
        iv_water.clickDelay {
//            showWater()
            showWater()
//            tree?.energyValue = 0
//            tree!!.treeLevelType++
//            showTreeAnim(tree!!.getTreeApng(),true)
//            audioPlayer.startPlayMusic(requireContext(),tree!!.getLevelUpAudio())
//            TreeTipDialog.show(childFragmentManager,"升级","恭喜!你的树苗已升级为${tree!!.getLevelName()}阶段!")
            if (tree?.energyValue == 0)
                toast("能量值不足")
//            else if (tree?.status == 1)
@@ -91,19 +94,20 @@
            else
                HttpManager.watering().requestByF(this){_,data->
                    data?.apply {
                        EventBus.getDefault().post(EmptyEvent(Const.EventCode.USER_INFO_CHANGED)) //刷新成长值
                        tv_max.text = "/$nextLevel"
                        tv_growth.text = growthValue.toString()
                        val targetHeight = growthValue.toDouble()/nextLevel*dip(155)
                        val layoutParams = progress.layoutParams
                        showGrowthAnim(layoutParams.height, max(1,targetHeight.toInt()))
                        showWater()
                        tree?.energyValue = 0
                        tree?.energyValue = energyValue
                        tv_power.text = "当前能量值:${(tree?.energyValue?:0)}"
                        if (isNext){
                            tree!!.treeLevelType++
                            showTreeAnim(tree!!.getTreeApng(),true)
                            audioPlayer.startPlayMusic(requireContext(),tree!!.getLevelUpAudio())
                            TreeTipDialog.show(childFragmentManager,"升级","恭喜!你的树苗已升级为${tree!!.getLevelName()}阶段!")
                        if (tree!!.treeLevelType != data.treeLevelType){
                            showGrowUpDialog(data.treeLevelType)
                        }else if (tree!!.status != 2){
                            tree!!.status = 2
                            showTreeAnim(tree!!.getTreeApng(),tree!!.treeLevelType != 1)
                        }
                    }
                }
@@ -143,10 +147,45 @@
    }
    private fun checkFirst() {
        HttpManager.isFirst().requestByF(this){_,data->
            if (data == true){
                TreeTipDialog.show(childFragmentManager)
                audioPlayer.startPlayMusic(requireContext(),Const.TREE.first)
        if (checkLogin())
            HttpManager.isFirst().requestByF(this){_,data->
                if (data == true)
                    showFirst()
            }
    }
    /**
     * 依次弹窗升级和播放语音
     */
    private fun showGrowUpDialog(targetLevel:Int){
        tree!!.treeLevelType++
        showTreeAnim(tree!!.getTreeApng(),true)
        audioPlayer.startPlayMusic(requireContext(),tree!!.getLevelUpAudio())
        val dialog = TreeTipDialog.show(childFragmentManager,"生命之树",tree!!.getLevelName())
        audioPlayer.setOnAudioStatusUpdateListener(object :AudioUtils.OnAudioStatusUpdateListener{
            override fun onUpdate(db: Double, time: Long) {
            }
            override fun onStop(filePath: String?) {
            }
            override fun onStartPlay() {
            }
            override fun onFinishPlay() {
                dialog.canDismiss()
            }
            override fun onGetDuration(duration: Int) {
            }
        })
        dialog.onDismissCallback = object :TreeTipDialog.OnDismissCallback{
            override fun onDismiss() {
                if (tree!!.treeLevelType != targetLevel) //继续展示下一级
                    showGrowUpDialog(targetLevel)
                else{
                    audioPlayer.setOnAudioStatusUpdateListener(null)
                }
            }
        }
    }
@@ -172,6 +211,16 @@
                } else
                    showTreeDead()
            }
        }
    }
    /**
     * 首次进入树苗打卡,播放音频和弹窗说明
     */
    fun showFirst(){
        if (!(activity as MainActivity).hasTreeFirstShow){
            TreeTipDialog.show(childFragmentManager)
            audioPlayer.startPlayMusic(requireContext(),Const.TREE.first)
        }
    }
@@ -242,9 +291,5 @@
        val resourceId: Int = resources.getIdentifier("navigation_bar_height", "dimen", "android")
        val height: Int = resources.getDimensionPixelSize(resourceId)
        return height
    }
    companion object{
        const val TAG_TREE = "TAG_TREE"
    }
}