package watermark
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.view.View
import com.orhanobut.logger.Logger
class WatermarkView(context: Context) : View(context) {
private val paint = Paint()
private val text = "水印文本"
init {
paint.color = Color.RED
paint.textSize = 35f
paint.alpha = 100
paint.isAntiAlias = true
paint.isDither = true
isClickable = false
isFocusable = false
alpha = 0.3f
visibility = View.VISIBLE
setWillNotDraw(false)
Logger.d("WatermarkView", "WatermarkView init called")
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val width = MeasureSpec.getSize(widthMeasureSpec)
val height = MeasureSpec.getSize(heightMeasureSpec)
if (width == 0 || height == 0) {
val displayMetrics = context.resources.displayMetrics
setMeasuredDimension(displayMetrics.widthPixels, displayMetrics.heightPixels)
} else {
setMeasuredDimension(width, height)
}
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
Logger.d("WatermarkView-->onDraw width: $width, height: $height")
if (canvas != null && width > 0 && height > 0) {
canvas.save()
val centerX = (width / 2).toFloat()
val centerY = (height / 2).toFloat()
canvas.rotate(-25f, centerX, centerY)
val spacing = 400
for (i in -2..width / spacing + 2) {
for (j in -2..height / spacing + 2) {
val x = (i * spacing).toFloat()
val y = (j * spacing).toFloat()
if (x >= -spacing && x <= width + spacing && y >= -spacing && y <= height + spacing) {
canvas.drawText(text, x, y, paint)
}
}
}
canvas.restore()
}
}
}
package watermark
import android.app.Activity
import android.app.Application
import android.os.Bundle
import android.view.ViewGroup
import android.widget.FrameLayout
class WatermarkLifecycleHandler : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.window.decorView.post {
addWatermark(activity)
}
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
private fun addWatermark(activity: Activity) {
if (shouldAddWatermark(activity)) {
val contentView = activity.findViewById<ViewGroup>(android.R.id.content)
val watermarkView = WatermarkView(activity)
val layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
contentView.addView(watermarkView, layoutParams)
}
}
private fun shouldAddWatermark(activity: Activity): Boolean {
val activityName = activity.javaClass.simpleName
val excludeActivities = listOf(
"SplashAct",
"HomeAct",
"ShareBillAct"
)
return !excludeActivities.contains(activityName)
}
}
package cn.eeepay.v3agent
import android.util.Log
import cn.eeepay.enc.EncRSA
import cn.eeepay.lib_core.base.BaseApplication
import cn.eeepay.lib_core.utils.MMKVUtils
import cn.eeepay.lib_data.constants.EnvironmentDefConstant
import cn.eeepay.lib_data.constants.UrlConfigConstant
import cn.eeepay.net.Url
import watermark.WatermarkLifecycleHandler
import com.simple.spiderman.SpiderMan
class MainApp : BaseApplication() {
override fun onCreate() {
super.onCreate()
initWatermark()
}
private fun initWatermark() {
registerActivityLifecycleCallbacks(WatermarkLifecycleHandler())
}
}