国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android JNI實現鍋爐壓力顯示系統(tǒng)詳解

這篇具有很好參考價值的文章主要介紹了Android JNI實現鍋爐壓力顯示系統(tǒng)詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前些天發(fā)現了一個蠻有意思的人工智能學習網站,8個字形容一下"通俗易懂,風趣幽默",感覺非常有意思,忍不住分享一下給大家。
??點擊跳轉到教程

第一步創(chuàng)建GuoLu.c文件

//
// Created by DELL on 2023/8/13.
//
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include <unistd.h>

int pressure = 20;

int getPressure() {
    int increase = rand() % 25;
    pressure += increase;
    return pressure;
}

/**
 * 從鍋爐感應器中得到鍋爐壓力值
 */
jint Java_com_example_guolu_MainActivity_getPressure(JNIEnv *env, jobject thiz) {
    int pressure = getPressure();
    return pressure;
}

第二步在build.gradle文件中,進行相關配置

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 33
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.guolu"
        minSdkVersion 23
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        // 增加cmake控制屬性
        externalNativeBuild {
            cmake {
                // 指定編譯架構
                abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
            }
        }
    }

    // 在android節(jié)點下
    // 指定CMakeLists.txt路徑
    externalNativeBuild {
        cmake {
            // 在該文件種設置所要編寫的c源碼位置,以及編譯后so文件的名字
            path 'CMakeLists.txt'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

第三步實現在MainActivity中,調用相關的C代碼,顯示鍋爐壓力值,根據壓力值顯示不同的UI在Android設備上

public class MainActivity extends AppCompatActivity {
    {
        System.loadLibrary("GuoLu");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PressureView pressureView = new PressureView(this);
        setContentView(pressureView);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    SystemClock.sleep(1000);
                    int pressure = Math.round(getPressure());//0-250
                    pressureView.setPressure(pressure);
                    if (pressure > 220) {//如果壓力大于220就要爆炸
                        break;
                    }
                }
            }
        }).start();
    }

    /**
     * native代碼
     * 調用C代碼中對應的方法
     *
     * @return
     */
    public native int getPressure();
}

第四步實現自定義View,PressureView

/**
 * @Author: ly
 * @Date: 2023/8/13
 * @Description: 鍋爐壓力值顯示自定義view
 */
public class PressureView extends View {
    /**
     * 鍋爐壓力值
     */
    private int pressure;
    /**
     * 畫筆
     */
    private Paint paint;

    public PressureView(Context context) {
        this(context, null);
    }

    public PressureView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public PressureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setAntiAlias(true);//設置抗鋸齒
        paint.setTextSize(20);
    }

    public void setPressure(int pressure) {
        this.pressure = pressure;
//        invalidate(); 在主線程調用
        postInvalidate();//在子線程使用這個進行繪制 onDraw() 執(zhí)行
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (pressure > 220) {
            //1.如果壓力值大于200,就繪制文本,顯示鍋爐爆炸了,快跑
            canvas.drawText("快跑!", 10, getHeight() / 2, paint);
        } else {
            //2.正常和提示的情況
            paint.setColor(Color.GRAY);
            canvas.drawRect(10, 10, 60, 260, paint);
            //設置背景顏色為灰色
            //2.1.如果小于200正常顯示,并且設置畫筆顏色,綠色
            if (pressure < 200) {
                paint.setColor(Color.GREEN);
                canvas.drawRect(10, 260 - pressure, 60, 260, paint);
            }
            //2.2.如果大于200警示顯示,并且設置畫筆顏色,紅色
            if (pressure > 200) {
                paint.setColor(Color.RED);
                canvas.drawRect(10, 260 - pressure, 60, 260, paint);
            }
        }
    }
}

效果如圖所示:

Android JNI實現鍋爐壓力顯示系統(tǒng)詳解,Android JNI基礎筆記,android,jni,C語言,ndk,CMake文章來源地址http://www.zghlxwxcb.cn/news/detail-646482.html

到了這里,關于Android JNI實現鍋爐壓力顯示系統(tǒng)詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android顯示系統(tǒng)SurfaceFlinger詳解 超級干貨

    Android顯示系統(tǒng)SurfaceFlinger詳解 超級干貨

    本文詳細講解了Android顯示系統(tǒng)SurfaceFlinger,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下 目錄 一、Android系統(tǒng)啟動 二、SurfaceFlinger代碼剖析[Android 11] 1.【執(zhí)行文件-surfaceflinger】 2.【動態(tài)庫-libsurfaceflinger.so】 3. 服務啟

    2024年03月14日
    瀏覽(22)
  • Android 12.0 系統(tǒng)settings系統(tǒng)屬性控制一級菜單顯示隱藏

    在12.0的系統(tǒng)rom定制化開發(fā)中,系統(tǒng)settings的一級菜單有些在客戶需求中,要求通過系統(tǒng)屬性來控制顯示隱藏,從而達到控制一級菜單的顯示的目的,而系統(tǒng)settings是通過靜態(tài)加載的方式負責顯示隱藏

    2024年02月06日
    瀏覽(58)
  • Android11.0 修改系統(tǒng)默認顯示大小

    系統(tǒng)設置中的顯示大小調整的就是屏幕密度,調整的越小,屏幕顯示的內容就越多。 在系統(tǒng)中都會有定義一個默認的屏幕密度 設置中顯示大小相關內容 源碼:/packages/apps/Settings/res/xml/display_settings.xml 源碼:/packages/apps/Settings/src/com/android/settings/display/ScreenZoomSettings.java 密度縮

    2024年02月09日
    瀏覽(93)
  • Android打開系統(tǒng)相機或從相冊中選擇圖片并顯示

    Android打開系統(tǒng)相機或從相冊中選擇圖片并顯示

    xml代碼 展示 ?java代碼 實機演示 ?

    2024年02月11日
    瀏覽(18)
  • Android T 遠程動畫顯示流程其二——系統(tǒng)側動畫啟動流程

    Android T 遠程動畫顯示流程其二——系統(tǒng)側動畫啟動流程

    接著上篇文章分析 Android T 遠程動畫顯示流程其一 下面,我們以從桌面點擊一個應用啟動的場景來分析遠程動畫的流程,窗口添加的流程見Android T WMS窗口相關流程 這里我們從AppTransitionController.handleAppTransitionReady方法開始跟蹤代碼流程 代碼路徑:framework/services/core/java/com/and

    2024年03月28日
    瀏覽(34)
  • Android 進階——圖形顯示系統(tǒng)之VSync和 Choreographer的創(chuàng)建詳解(一)

    前一篇文章Android 進階——圖形顯示系統(tǒng)之底層圖像顯示原理小結(一)介紹了關于Android 圖形顯示系統(tǒng)的基礎理論,相信你對于Android的圖形顯示系統(tǒng)中圖形界面渲染刷新機制有了更深的了解,接下來進一步講解VSync和Choreography的聯(lián)系和作用。 VSync 可以提升Android 圖形顯示效果

    2024年02月10日
    瀏覽(26)
  • 解決Mac系統(tǒng)android monitor啟動時卡住,顯示白屏的問題

    解決Mac系統(tǒng)android monitor啟動時卡住,顯示白屏的問題

    清安裝1.8版本的jdk,java1.8版本以上不支持android monitor;如果你電腦上安裝有java 11等高級別的版本,請自行搜索,如果在mac上安裝多jdk,以及如何切換到1.8版本上 請更新SWT插件,下載地址; 1.打開網頁,點擊4.9 跳轉到另外的網頁 ?2.跳轉到的網頁如下所示意 ? 3. 點擊下載此版

    2024年02月12日
    瀏覽(30)
  • Android 10.0 系統(tǒng)systemui狀態(tài)欄下拉左滑顯示通知欄右滑顯示控制中心模塊的流程分析

    Android 10.0 系統(tǒng)systemui狀態(tài)欄下拉左滑顯示通知欄右滑顯示控制中心模塊的流程分析

    ? 在android10.0的系統(tǒng)rom定制化開發(fā)中,在系統(tǒng)原生systemui進行自定義下拉狀態(tài)欄布局的定制的時候,需要在systemui下拉狀態(tài)欄下滑的時候,根據下滑坐標來 判斷當前是滑出通知欄還是滑出控制中心模塊,所以就需要根據屏幕寬度,來區(qū)分x坐標值為多少是左滑出通知欄或者右滑

    2023年04月09日
    瀏覽(93)
  • Android 12.0 系統(tǒng)systemui狀態(tài)欄下拉左滑顯示通知欄右滑顯示控制中心模塊的流程分析

    ? 在android12.0的系統(tǒng)rom定制化開發(fā)中,在系統(tǒng)原生systemui進行自定義下拉狀態(tài)欄布局的定制的時候,需要在systemui下拉狀態(tài)欄下滑的時候,根據下滑坐標來 判斷當前是滑出通知欄還是滑出控制中心模塊,所以就需要根據屏幕寬度,來區(qū)分x坐標值為多少是左滑出通知欄或者右滑

    2024年02月09日
    瀏覽(127)
  • Android 11.0 系統(tǒng)修改usb連接電腦mtp和PTP的顯示名稱

    ? 在11.0的系統(tǒng)產品rom定制化開發(fā)中,在usb模塊otg連接電腦,調整為mtp文件傳輸模式的時候,這時可以在電腦看到手機的內部存儲 顯示在電腦的盤符中,會有一個mtp名稱做盤符,所以為了統(tǒng)一這個名稱,就需要修改這個名稱,接下來分析下處理的方法來解決這個問題 MTP的全稱

    2024年01月17日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包