添加震动

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.REORDER_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<application android:theme="@style/AppTheme">
<activity
android:name=".activity.user.activity.TotalRevenueActivity"

View File

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

View File

@@ -2,11 +2,14 @@ package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.HapticFeedbackConstants
import android.view.ViewGroup
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.tencent.qcloud.tuicore.util.ToastUtil
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogMentorShipLayoutBinding
import com.xscm.modulemain.utils.VibrationUtils
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.utils.ImageUtils
@@ -23,7 +26,7 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
}
private var isClick = true
override fun getLayoutId(): Int {
return R.layout.dialog_mentor_ship_layout
@@ -38,6 +41,12 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
override fun initData() {
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())
}
mBinding.tvRecharge.setOnClickListener {
@@ -46,6 +55,14 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
}
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()
mBinding.tvName.text = mSignPitBean?.nickname
mBinding.tvWallet.text = walletBean?.coin
@@ -54,11 +71,17 @@ class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBind
adapter?.setNewData(list)
}
fun setClickable(b: Boolean) {
isClick = b
}
class Adapter(idx: Int, data: MutableList<String>) :
BaseQuickAdapter<String, BaseViewHolder>(idx, data) {
override fun convert(helper: BaseViewHolder, item: String?) {
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
}
}
}