Files
hospital-rescue-app-v2/uni_modules/x-design/utssdk/app-android/index.uts
T
2026-09-24 16:25:22 +08:00

135 lines
4.2 KiB
Plaintext

// import UniversalBlurHelper from 'uts.sdk.modules.utsXdBlur.UniversalBlurHelper';
import Color from 'android.graphics.Color';
import View from 'android.view.View';
import Blurry from 'jp.wasabeef.blurry.Blurry'
import ViewGroup from "android.view.ViewGroup";
import Bitmap from "android.graphics.Bitmap";
import ImageView from 'android.widget.ImageView';
import Canvas from 'android.graphics.Canvas';
import BitmapDrawable from "android.graphics.drawable.BitmapDrawable";
import { hexToRgb } from '../libs/color.uts'
import { ManiWinFloat } from './mainWinFloa.uts'
export class xModalPage {
contentView : View | null = null;
rootWin : ManiWinFloat = new ManiWinFloat();
constructor() {
}
setView(ele : UniElement | null) {
if (ele == null) return;
let userView = ele.getAndroidView() as View | null
if (userView == null) return;
this.contentView = userView;
this.rootWin.setContent(userView)
}
show() {
this.rootWin.show()
}
hide() {
}
destroy() {
}
}
export class xdBlur {
$element : UniNativeViewElement;
targetView : View | null = null;
// bgView:bgBlurView = new bgBlurView(UTSAndroid.getAppContext()!)
constructor(element : UniNativeViewElement) {
//接收传递过来的UniNativeViewElement
this.$element = element;
this.bindView();
}
bindView() {
//通过UniElement.getAndroidActivity()获取android平台activity 用于创建view的上下文
this.targetView = new View(this.$element.getAndroidActivity()!); //构建原生view
// this.targetView = new bgBlurView(this.$element.getAndroidActivity()!); //构建原生view
// this.targetView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT))
// //限制原生Button 文案描述不自动大写
// this.button?.setAllCaps(false)
// //监听原生Button点击事件
// this.button?.setOnClickListener(_ => {
// const detail = {}
// //构建自定义UniNativeViewEvent返回对象
// const event = new UniNativeViewEvent("customClick", detail)
// //触发原生Button的点击事件
// this.$element.dispatchEvent(event)
// })
//UniNativeViewEvent 绑定 安卓原生view
this.$element.bindAndroidView(this.targetView!);
}
setFilterBg(blur : number, bgcolor : string, ele : UniElement | null = null) {
// let decorView = UTSAndroid.getUniActivity()!.window.decorView as ViewGroup
// this.targetView?.refreshBG(decorView)
let colorrgba = hexToRgb(bgcolor)
let r = (colorrgba?.r ?? 255).toInt()
let g = (colorrgba?.g ?? 255).toInt()
let b = (colorrgba?.b ?? 255).toInt()
let a = ((colorrgba?.a ?? 1) * 255).toInt()
let br = (blur / 100 * 25).toFloat()
let view = this.targetView!;
view.setBackgroundColor(Color.argb(a, r, g, b))
let decorView = UTSAndroid.getUniActivity()!.window.decorView as ViewGroup
let context = UTSAndroid.getAppContext()!;
let bitmap : Bitmap = Blurry.with(context)
.radius(br.toInt()) // 模糊度
.sampling(8) // 采样
.color(Color.argb(a, r, g, b))
.capture(decorView) // 捕获背景View
.get()
let location = new IntArray(2);
view.getLocationInWindow(location);
let top = (location[1]).toInt()
let left = location[0]
let okbitm = Bitmap.createBitmap(bitmap, left, top, view.getWidth(), view.getHeight());
view.setBackground(new BitmapDrawable(view.getResources(), okbitm));
}
public static setFilterSelfBg(ele : UniElement, bg : UniElement, blur : number, bgcolor : string) {
let colorrgba = hexToRgb(bgcolor)
let r = (colorrgba?.r ?? 255).toInt()
let g = (colorrgba?.g ?? 255).toInt()
let b = (colorrgba?.b ?? 255).toInt()
let a = ((colorrgba?.a ?? 1) * 255).toInt()
let br = (blur / 100 * 25).toFloat()
let view = ele.getAndroidView()! as View
let viewbg = bg.getAndroidView()! as View
let context = UTSAndroid.getAppContext()!;
let bitmapbg = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
let canvas = new Canvas(bitmapbg)
view.draw(canvas)
let imgview = new ImageView(context)
Blurry.with(context)
.radius(br.toInt())
.sampling(8)
.color(Color.argb(a, r, g, b))
.from(bitmapbg)
.into(imgview)
viewbg.setBackground(imgview.getDrawable());
}
}