添加震动

This commit is contained in:
2025-12-03 20:16:07 +08:00
parent 0d5e64e31a
commit 22a1f420ea
4 changed files with 98 additions and 3 deletions

View File

@@ -5,6 +5,8 @@
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.REORDER_TASKS" /> <uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<application android:theme="@style/AppTheme"> <application android:theme="@style/AppTheme">
<activity <activity
android:name=".activity.user.activity.TotalRevenueActivity" android:name=".activity.user.activity.TotalRevenueActivity"

View File

@@ -421,11 +421,12 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
if (dialogMentorShip == null) { if (dialogMentorShip == null) {
dialogMentorShip = DialogMentorShip(ActivityUtils.getTopActivity()) dialogMentorShip = DialogMentorShip(ActivityUtils.getTopActivity())
} }
dialogMentorShip?.setClickable(true)
dialogMentorShip?.show(list, mSignPitBean, walletBean, dialogMentorShip?.show(list, mSignPitBean, walletBean,
object : DialogMentorShip.OnItemClickListener { object : DialogMentorShip.OnItemClickListener {
override fun onItemClick(coin: String) { override fun onItemClick(coin: String) {
// 触发轻微震动 dialogMentorShip?.setClickable(false)
view?.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
MvpPre!!.signCoin(mSignId!!, coin) MvpPre!!.signCoin(mSignId!!, coin)

View File

@@ -2,11 +2,14 @@ package com.xscm.modulemain.dialog
import android.content.Context import android.content.Context
import android.view.Gravity import android.view.Gravity
import android.view.HapticFeedbackConstants
import android.view.ViewGroup import android.view.ViewGroup
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder import com.chad.library.adapter.base.BaseViewHolder
import com.tencent.qcloud.tuicore.util.ToastUtil
import com.xscm.modulemain.R import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogMentorShipLayoutBinding import com.xscm.modulemain.databinding.DialogMentorShipLayoutBinding
import com.xscm.modulemain.utils.VibrationUtils
import com.xscm.moduleutil.bean.WalletBean import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.bean.room.RoomPitBean import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.utils.ImageUtils import com.xscm.moduleutil.utils.ImageUtils
@@ -23,7 +26,7 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
} }
private var isClick = true
override fun getLayoutId(): Int { override fun getLayoutId(): Int {
return R.layout.dialog_mentor_ship_layout return R.layout.dialog_mentor_ship_layout
@@ -38,6 +41,12 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
override fun initData() { override fun initData() {
adapter?.setOnItemClickListener { adapter, view, position -> adapter?.setOnItemClickListener { adapter, view, position ->
if (!isClick) {
ToastUtil.show( "稍等,点击太快了!",false,Gravity.CENTER)
return@setOnItemClickListener
}
VibrationUtils().vibrate(view.context, 200)
onItemClickListener?.onItemClick(adapter.data[position]!!.toString()) onItemClickListener?.onItemClick(adapter.data[position]!!.toString())
} }
mBinding.tvRecharge.setOnClickListener { mBinding.tvRecharge.setOnClickListener {
@@ -46,6 +55,14 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
} }
fun show(list: List<String>, mSignPitBean: RoomPitBean?, walletBean: WalletBean?, onItemClickListener: OnItemClickListener?) { fun show(list: List<String>, mSignPitBean: RoomPitBean?, walletBean: WalletBean?, onItemClickListener: OnItemClickListener?) {
if (isShowing){
mBinding.tvName.text = mSignPitBean?.nickname
mBinding.tvWallet.text = walletBean?.coin
ImageUtils.loadHeadCC(mSignPitBean?.avatar, mBinding.ivHead)
this.onItemClickListener = onItemClickListener
adapter?.setNewData(list)
return
}
super.show() super.show()
mBinding.tvName.text = mSignPitBean?.nickname mBinding.tvName.text = mSignPitBean?.nickname
mBinding.tvWallet.text = walletBean?.coin mBinding.tvWallet.text = walletBean?.coin
@@ -54,11 +71,17 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
adapter?.setNewData(list) adapter?.setNewData(list)
} }
fun setClickable(b: Boolean) {
isClick = b
}
class Adapter(idx: Int, data: MutableList<String>) : class Adapter(idx: Int, data: MutableList<String>) :
BaseQuickAdapter<String, BaseViewHolder>(idx, data) { BaseQuickAdapter<String, BaseViewHolder>(idx, data) {
override fun convert(helper: BaseViewHolder, item: String?) { override fun convert(helper: BaseViewHolder, item: String?) {
helper.setText(R.id.tv_glod, item) helper.setText(R.id.tv_glod, item)
// 触发轻微震动
helper.itemView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_PRESS)
} }
} }

View File

@@ -0,0 +1,69 @@
package com.xscm.modulemain.utils
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.os.Vibrator
import android.os.VibrationEffect
import android.os.Build
import android.os.VibratorManager
import androidx.core.content.ContextCompat
import com.blankj.utilcode.util.LogUtils
class VibrationUtils {
/**
* 简单震动
* @param durationMillis 震动时长(毫秒)
*/
fun vibrate(context: Context, durationMillis: Long) {
val vibrator = getVibrator(context)
// 检查权限
if (ContextCompat.checkSelfPermission(context, Manifest.permission.VIBRATE)
!= PackageManager.PERMISSION_GRANTED) {
LogUtils.e("Vibration", "缺少震动权限")
return
}
// 检查设备支持
if (!vibrator.hasVibrator()) {
LogUtils.e("Vibration", "设备不支持震动")
return
}
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// API 26+ 推荐方式
val effect = VibrationEffect.createOneShot(
durationMillis,
VibrationEffect.DEFAULT_AMPLITUDE
)
vibrator.vibrate(effect)
} else {
// 旧版本方式
@Suppress("DEPRECATION")
vibrator.vibrate(durationMillis)
}
LogUtils.d("Vibration", "震动成功: ${durationMillis}ms")
} catch (e: Exception) {
LogUtils.e("Vibration", "震动失败", e)
}
}
/**
* 获取 Vibrator 实例
*/
private fun getVibrator(context: Context): Vibrator {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// API 31+ 推荐方式
val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE)
as VibratorManager
vibratorManager.defaultVibrator
} else {
// 旧版本
@Suppress("DEPRECATION")
context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}
}
}