bola inteligente autojs, la pantalla está rota

Me inscribí en el Desafío Fase 1 del Proyecto Piedra Dorada - Divide el pozo de premios de 100,000, este es mi octavo artículo, haz clic para ver los detalles del evento

Uncle Tooth Tutorial es simple y fácil de entender

Efecto

ideas

Smart Island es una ventana flotante, no hacemos funciones específicas, solo trabajo de superficie,

Así que solo escribimos una ventana flotante;

La ventana flotante no puede interferir con la operación del usuario, por lo tanto, al dibujar la bola, se debe usar otra ventana flotante.

La ventana flotante no responde a ningún evento de clic, solo dibuja

Así que hay dos ventanas flotantes en total;

  • una barra de notificaciones
  • pantalla completa uno

Ventana flotante isla inteligente

codigo xml

this.window = floaty.rawWindow(
    <card id="root" cardCornerRadius="{{cardCornerRadius}}px" gravity="center" w="{{ windowWidth }}px" h="{{ windowHeight }}px" cardBackgroundColor="#000000">
        <text id="count" w="*" gravity="center" textColor="#ff000f" textSize="{{textSize}}px">
            0
        </text>
    </card>
);
复制代码

Para tener una experiencia de apariencia consistente en cada resolución media, el ancho y la altura aún se calculan primero y luego se muestra la interfaz de usuario.

this.config = {
    width: {
        ratio: 0.2,
    },
    height: {
        ratio: 1,
    },
};
this.config.width = parseInt(device.width * this.config.width.ratio);
this.config.height = parseInt(STATUS_BAR_HEIGHT * this.config.height.ratio);
复制代码

Para obtener el valor de la variable en el subproceso de la interfaz de usuario, debe vincular la variable

runtime.ui.bindingContext.windowWidth = windowWidth;
复制代码

Si es demasiado largo para recordar, puede agregar fragmentos de código en vscode

"runtime.ui.bindingContext.windowWidth=windowWidth": {
    "scope": "javascript,typescript",
    "prefix": "bindui",
    "body": ["runtime.ui.bindingContext.windowWidth=windowWidth;"],
    "description": "runtime.ui.bindingContext.windowWidth=windowWidth"
  },
复制代码

Después de ingresar, ingrese bindui, puede ingresar rápidamente esta línea de código

runtime.ui.bindingContext.windowWidth = windowWidth;
复制代码

La ventana flotante se puede mover arbitrariamente, utilizando el código encapsulado en el tutorial anterior

makeWindowMoveable
复制代码

El último tutorial es: ventana flotante autojs para traducir palabras

www.yuque.com/yashujs/bfu…

La isla inteligente está terminada, dibujemos la bola inteligente

Pelota inteligente

Haga clic en la isla inteligente, aparece la bola inteligente y la bola inteligente se dibuja en una ventana flotante de pantalla completa

Ventana flotante a pantalla completa

Este es el método de pantalla completa anterior

function fullScreen(window) {
    let LayoutParams = android.view.WindowManager.LayoutParams;
    let mWindow = getClassField(window, "mWindow");
    log(mWindow); // com.stardust.autojs.core.floaty.RawWindow@26b1509
    let params = mWindow.getWindowLayoutParams();
    //设置全屏悬浮窗
    params.flags |= LayoutParams.FLAG_FULLSCREEN | LayoutParams.FLAG_LAYOUT_IN_SCREEN | LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    ui.run(function () {
        mWindow.updateWindowLayoutParams(params);
        window.setSize(device.width, device.height);
    });
}
复制代码

pantalla completa ahora

window.setSize(-1, -1);
复制代码

\

La bola inteligente aparece lentamente

Haga clic en la isla inteligente, la bola inteligente aparece lentamente

Dibujar una bola es usar drawCircle of canvas

canvas.drawCircle(ballData.centerX, ballData.centerY, ballData.radius, this.paint);
复制代码

La pelota se mueve hacia abajo, podemos usar ValueAnimator para configurar el monitor para cambiar la altura del centro de la pelota

this.valueAnimator = ValueAnimator.ofFloat(beginValue, endValue);
this.valueAnimator.setDuration(1000);
this.valueAnimator.addUpdateListener({
    onAnimationUpdate: function (animation) {
        let value = animation.getAnimatedValue();
        ballData.centerY = value;
    },
});
复制代码

añadir una línea

canvas.drawLine(islandWindowRect.centerX, islandWindowRect.centerY, ballData.centerX, ballData.centerY, this.paint);
复制代码

\

donde va la pelota

Aquí hemos agregado dos ValueAnimators para controlar el XY en el movimiento de la pelota;

this.valueAnimatorX = ValueAnimator.ofFloat(beginValueX, endValueX, beginValueX);
this.valueAnimatorY = ValueAnimator.ofFloat(beginValueY, endValueY, beginValueY);
复制代码

animaciones para ejecutar simultáneamente

this.animatorSet = new AnimatorSet();
this.animatorSet.playTogether(this.valueAnimatorX, this.valueAnimatorY);
this.animatorSet.setDuration(300);
复制代码

Activar la animación después de presionar y levantar el dedo

switch (event.getAction()) {
    case event.ACTION_DOWN:
        return true;
    case event.ACTION_MOVE:
        return true;
    case event.ACTION_UP:
        let touchPoint = {
            x: event.getRawX(),
            y: event.getRawY(),
        };
        that.updateTouchValueAnimator(touchPoint);
        that.animatorSet.start();
        return true;
}
复制代码

\

efecto de pantalla rota

Use ps para hacer una imagen de vidrios rotos, o haga algunas imágenes más seleccionadas al azar para dibujar

for (var i = 0; i < len; i++) {
    let glass = this.glasses[i];
    canvas.drawBitmap(this.glassBitmap, glass.x - this.glassBitmapHalfWidth, glass.y - this.glassBitmapHalfHeight, this.paint);
}
复制代码

Tutorial de texto, si no puedo escuchar el sonido, no agregaré el efecto de sonido

alrededores

Dispositivo: Mi 11pro
Versión de Android: 12
Emulador de Thunderbolt: 9.0.17
Versión de Android: 9
Versión de Autojs: 9.2.13

frases famosas

Las ideas son las más importantes, otros Baidu, bing, stackoverflow, github, la documentación de Android, la documentación de autojs y, finalmente, el grupo para preguntar --- Uncle Tooth Tutorial

declaración

Parte del contenido proviene de Internet. Este tutorial es solo para aprender, y está prohibido usarlo para otros fines.

Tutorial del tío de los dientes de la cuenta pública de WeChat

Supongo que te gusta

Origin juejin.im/post/7148025147738292237
Recomendado
Clasificación