daShangDao_scanBook/uni_modules/lime-camera/utssdk/app-android/index.vue

274 lines
7.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view></view>
</template>
<script lang="uts">
/**
* 引用 Android 系统库
* [可选实现,按需引入]
*/
import PreviewView from 'androidx.camera.view.PreviewView'
import View from 'android.view.View';
import { LimeCamera } from './camera';
import { CameraConfig, TakePhotoOption,CameraContextStopRecordOption, TakePhotoCallback, CameraContextSetZoomOption, CameraContextStartRecordOption } from '../interface'
/**
* 引入三方库
* [可选实现,按需引入]
*
* 在 Android 平台引入三方库有以下两种方式:
* 1、[推荐] 通过 仓储 方式引入,将 三方库的依赖信息 配置到 config.json 文件下的 dependencies 字段下。详细配置方式[详见](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#dependencies)
* 2、直接引入将 三方库的aar或jar文件 放到libs目录下。更多信息[详见](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#android%E5%B9%B3%E5%8F%B0%E5%8E%9F%E7%94%9F%E9%85%8D%E7%BD%AE)
*
* 在通过上述任意方式依赖三方库后,使用时需要在文件中 import
* import { LottieAnimationView } from 'com.airbnb.lottie.LottieAnimationView'
*/
/**
* UTSAndroid 为平台内置对象,不需要 import 可直接调用其API[详见](https://uniapp.dcloud.net.cn/uts/utsandroid.html#utsandroid)
*/
//原生提供以下属性或方法的实现
export default {
/**
* 组件名称,也就是开发者使用的标签
*/
name: "l-camera",
/**
* 组件涉及的事件声明,只有声明过的事件,才能被正常发送
*/
emits: ['stop', 'error', 'initdone', 'ready', 'scancode', 'click', 'photoSuccess', 'recordSuccess'],
/**
* 属性声明,组件的使用者会传递这些属性值到组件
*/
props: {
"mode": {
type: String,
default: "normal"
},
"resolution": {
type: String,
default: "medium" // low | high
},
"devicePosition": {
type: String,
default: "back" // front前置 |back 后置
},
"flash": {
type: String,
default: "auto" // auto, on, off, torch
},
"frameSize": {
type: String,
default: "medium" // small|large
},
"focus": {
type: Boolean,
default: false
}
},
/**
* 组件内部变量声明
*/
data() {
return {}
},
/**
* 属性变化监听器实现
*/
watch: {
"devicePosition": {
/**
* 这里监听属性变化,并进行组件内部更新
*/
handler(newValue : string, oldValue : string) {
if (oldValue == newValue) return
this.$el?.switchCamera(newValue)
},
immediate: false // 创建时是否通过此方法更新属性默认值为false
},
"flash": {
/**
* 这里监听属性变化,并进行组件内部更新
*/
handler(newValue : string, oldValue : string) {
if (oldValue == newValue) return
this.$el?.setFlash(newValue)
},
immediate: false // 创建时是否通过此方法更新属性默认值为false
},
"focus": {
/**
* 这里监听属性变化,并进行组件内部更新
*/
handler(newValue : boolean, oldValue : boolean) {
if (oldValue == newValue) return
this.$el?.setFocus(newValue)
},
immediate: false // 创建时是否通过此方法更新属性默认值为false
}
},
/**
* 规则如果没有配置expose则methods中的方法均对外暴露如果配置了expose则以expose的配置为准向外暴露
* ['publicMethod'] 含义为:只有 `publicMethod` 在实例上可用
*/
expose: ['takePhoto', 'setZoom', 'startRecord', 'stopRecord'],
methods: {
/**
* 对外公开的组件方法
*
* uni-app中调用示例
* this.$refs["组件ref"].doSomething("uts-button");
*
* uni-app x中调用示例
* 1、引入对应Element
* import { UtsButtonElement(组件名称以upper camel case方式命名 + Element) } from 'uts.sdk.modules.utsComponent(组件目录名称以lower camel case方式命名)';
* 2、(this.$refs["组件ref"] as UtsButtonElement).doSomething("uts-button");
* 或 (uni.getElementById("组件id") as UtsButtonElement).doSomething("uts-button");
*/
takePhoto() {
this.$el?.takePhoto({
success(res) {
this.$emit('photoSuccess', res)
},
fail(err) {
this.$emit('error', err)
console.log('takePhoto err', err)
}
} as TakePhotoOption)
},
setZoom(zoom: number) {
this.$el?.setZoom({
zoom: zoom,
} as CameraContextSetZoomOption)
},
startRecord() {
this.$el?.startRecord({
// selfieMirror: options.getBoolean('selfieMirror'),
// timeout: options.getNumber('timeout'),
success(res) {
console.log('startRecord success', res)
},
fail(err) {
console.log('startRecord err', err)
}
} as CameraContextStartRecordOption)
},
stopRecord() {
this.$el?.stopRecord({
success(res) {
console.log('stopRecord success', res)
this.$emit('recordSuccess', res)
},
fail(err) {
console.log('stopRecord fail', err)
this.$emit('error', err)
},
} as CameraContextStopRecordOption)
},
},
/**
* [可选实现] 组件被创建,组件第一个生命周期,
* 在内存中被占用的时候被调用,开发者可以在这里执行一些需要提前执行的初始化逻辑
*/
created() {
},
/**
* [可选实现] 对应平台的view载体即将被创建对应前端beforeMount
*/
NVBeforeLoad() {
},
/**
* [必须实现] 创建原生View必须定义返回值类型
* 开发者需要重点实现这个函数,声明原生组件被创建出来的过程,以及最终生成的原生组件类型
* Android需要明确知道View类型需特殊校验
*/
NVLoad() : LimeCamera {
let previewView = new LimeCamera(
this.$androidContext!,
this as UTSComponent<FrameLayout>)
previewView.setTag("limeCamera");
return previewView
},
/**
* [可选实现] 原生View已创建
*/
NVLoaded() {
},
/**
* [可选实现] 原生View布局完成
*/
NVLayouted() {
this.$el?.setConfig({
resolution: this.resolution,
frameSize: this.frameSize,
flash: this.flash,
focus: this.focus,
} as CameraConfig)
this.$el?.switchCamera(this.devicePosition)
},
/**
* [可选实现] 原生View将释放
*/
NVBeforeUnload() {
this.$emit('stop')
this.$el?.unbindCamera()
},
/**
* [可选实现] 原生View已释放这里可以做释放View之后的操作
*/
NVUnloaded() {
},
/**
* [可选实现] 组件销毁
*/
unmounted() {
},
/**
* [可选实现] 自定组件布局尺寸,用于告诉排版系统,组件自身需要的宽高
* 一般情况下,组件的宽高应该是由终端系统的排版引擎决定,组件开发者不需要实现此函数
* 但是部分场景下,组件开发者需要自己维护宽高,则需要开发者重写此函数
*/
NVMeasure(size : UTSSize) : UTSSize {
// size.width = 300.0.toFloat();
// size.height = 200.0.toFloat();
return size;
}
}
/**
* 定义按钮点击后触发回调的类
* [可选实现]
*/
class ButtonClickListener extends View.OnClickListener {
/**
* 如果需要在回调类或者代理类中对组件进行操作,比如调用组件方法,发送事件等,需要在该类中持有组件对应的原生类的对象
* 组件原生类的基类为 UTSComponent该类是一个泛型类需要接收一个类型变量该类型变量就是原生组件的类型
*/
private comp : UTSComponent<Button>;
constructor(comp : UTSComponent<Button>) {
super();
this.comp = comp;
}
/**
* 按钮点击回调方法
*/
override onClick(v ?: View) {
console.log("按钮被点击");
// 发送事件
this.comp.$emit("buttonclick");
}
}
</script>
<style>
</style>