.gradle/4.1/fileHashes/fileHashes.binBinary files differ
.gradle/4.1/fileHashes/fileHashes.lockBinary files differ
.gradle/4.1/fileHashes/resourceHashesCache.binBinary files differ
.gradle/4.1/javaCompile/classAnalysis.binBinary files differ
.gradle/4.1/javaCompile/jarAnalysis.binBinary files differ
.gradle/4.1/javaCompile/javaCompile.lockBinary files differ
.gradle/4.1/javaCompile/taskHistory.binBinary files differ
.gradle/4.1/javaCompile/taskJars.binBinary files differ
.gradle/4.1/taskHistory/fileSnapshots.binBinary files differ
.gradle/4.1/taskHistory/taskHistory.binBinary files differ
.gradle/4.1/taskHistory/taskHistory.lockBinary files differ
FastBleLib/FastBleLib.iml
@@ -87,6 +87,7 @@ <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/attr" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> FastBleLib/src/main/java/com/clj/fastble/bluetooth/BleBluetooth.java
@@ -399,7 +399,6 @@ @Override public void onDisConnected(BluetoothGatt gatt, int status, BleException exception) { BleLog.i("BleGattCallback:onConnectFailure "); closeBluetoothGatt(); bluetoothGatt = null; Iterator iterator = callbackHashMap.entrySet().iterator(); @@ -449,7 +448,7 @@ @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { BleLog.i("BleGattCallback:onServicesDiscovered "); BleLog.i("BleGattCallback:onServicesDiscovered " + mtu); bluetoothGatt.requestMtu(mtu); connectionState = STATE_SERVICES_DISCOVERED; Iterator iterator = callbackHashMap.entrySet().iterator(); @@ -479,7 +478,6 @@ @Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { BleLog.i("BleGattCallback:onCharacteristicWrite "); Iterator iterator = callbackHashMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); @@ -492,7 +490,7 @@ @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { BleLog.i("BleGattCallback:onCharacteristicChanged "); BleLog.i("BleGattCallback:onCharacteristicChanged " + characteristic.getValue().length); Iterator iterator = callbackHashMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); FastBleLib/src/main/java/com/clj/fastble/conn/BleConnector.java
@@ -361,15 +361,12 @@ handler.removeMessages(MSG_NOTIFY_CHA, this); } if (characteristic.getUuid().equals(UUID.fromString(uuid_notify))) { System.out.println("chenqi Notify ->" + characteristic.getValue().length); System.out.println("chenqi Notify Hex ->" + BleBluetooth.dumpHex(characteristic.getValue())); bleCallback.onSuccess(characteristic); } } @Override public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { super.onMtuChanged(gatt, mtu, status); System.out.println(String.format("onMtuChanged:mtu = %s", mtu)); } }); andbrickslib/andbrickslib.iml
@@ -87,6 +87,7 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/attr" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> @@ -107,38 +108,38 @@ <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-fragment-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.3.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-media-compat-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" /> <orderEntry type="library" name="Gradle: com.pnikosis:materialish-progress-1.0" level="project" /> <orderEntry type="library" name="Gradle: com.lzy.net:okserver-1.1.3" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" /> <orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library-1.4.0" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-compat-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" /> <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.4.4" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-v13-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.3.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:core-0.9.4.4" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-v4-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-core-ui-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-media-compat-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.pnikosis:materialish-progress-1.0" level="project" /> <orderEntry type="library" name="Gradle: com.alibaba:fastjson:1.1.56.android@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> <orderEntry type="library" name="Gradle: com.lzy.net:okserver-1.1.3" level="project" /> <orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library-1.4.0" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-compat-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.lzy.net:okgo-2.1.4" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.4.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.9.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.4.4" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> </component> </module> app/app.iml
@@ -92,7 +92,9 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged-not-compiled-resources" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-rules" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> @@ -100,6 +102,7 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/reports" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" /> @@ -108,21 +111,14 @@ <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-fragment-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.3.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" /> <orderEntry type="library" name="Gradle: pub.devrel:easypermissions-0.4.0" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-media-compat-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" /> <orderEntry type="library" name="Gradle: com.pnikosis:materialish-progress-1.0" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" /> <orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library-1.4.0" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-compat-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.4.4" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-v13-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> <orderEntry type="library" name="Gradle: com.contrarywind:Android-PickerView-3.1.2" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:core-0.9.4.4" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-v4-25.3.1" level="project" /> @@ -130,14 +126,10 @@ <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-core-ui-25.3.1" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:cardview-v7-25.3.1" level="project" /> <orderEntry type="library" name="Gradle: in.srain.cube:ultra-ptr-1.0.11" level="project" /> <orderEntry type="library" name="Gradle: org.greenrobot:eventbus:3.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.alibaba:fastjson:1.1.56.android@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> <orderEntry type="library" name="Gradle: com.github.lecho:hellocharts-library-1.5.8" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:/Users/chenqi/AndroidStudioProjects/pregnancy_guard_android/app/libs/BaiduLBS_Android.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: com.daimajia.numberprogressbar:library-1.4" level="project" /> @@ -150,5 +142,18 @@ <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-25.3.1" level="project" /> <orderEntry type="module" module-name="andbrickslib" /> <orderEntry type="module" module-name="FastBleLib" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-2.2.2" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> <orderEntry type="module" module-name="andbrickslib" /> <orderEntry type="module" module-name="FastBleLib" /> </component> </module> app/build.gradle
@@ -7,31 +7,44 @@ applicationId "com.moral.yunfushao" minSdkVersion 21 targetSdkVersion 25 versionCode 1 versionName "1.0" versionCode 2 versionName "1.0.2_sp3" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.debug } // signingConfigs { // // your debug keystore //// debug { //// keyAlias 'chenqi' //// keyPassword '123456' //// storeFile file('/Users/chenqi/chenqi.jks') //// storePassword '123456' //// } // } signingConfigs { key { keyAlias 'qxpc' keyPassword '123456' storeFile file('../pregnancy_guard_android/qixingpiaochong') storePassword '123456' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } //自定义名字 //3.0版本 android.applicationVariants.all { variant -> variant.outputs.all { if (buildType.name == "debug") outputFileName = "Dev_yfs_v.${variant.versionName}.apk" else outputFileName = "yfs_v.${variant.versionName}.apk" } } buildTypes { release { minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [app_name: "@string/app_name"]//配置渠道 } debug { minifyEnabled false manifestPlaceholders = [app_name: "@string/app_name_text"] } } } @@ -53,7 +66,7 @@ compile 'com.github.bumptech.glide:glide:3.7.0' //网络请求 compile 'com.lzy.net:okgo:2.1.4' compile files('libs/BaiduLBS_Android.jar') compile files('libs/BaiduLBS_Android.jar') compile 'pub.devrel:easypermissions:0.4.0' compile 'com.daimajia.numberprogressbar:library:1.4@aar' compile 'org.greenrobot:eventbus:3.0.0' app/src/main/AndroidManifest.xml
@@ -34,39 +34,58 @@ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <application android:allowBackup="true" android:name="com.moral.yunfushao.MainApp" android:allowBackup="true" android:icon="@mipmap/icon" tools:replace="android:icon" android:label="@string/app_name" android:label="${app_name}" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".activity.SplashActivity" android:theme="@style/AppTheme" tools:replace="android:icon,android:label"> <activity android:name=".activity.SplashActivity" android:theme="@style/AppWelcomeTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.moral.yunfushao.MainActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.ForgetPasswordActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.LoginActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.RegisterActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.BLESearchActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.VoiceSetActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.ChartActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.ChooseSongActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.activity.TestActivity" android:screenOrientation="portrait"/> <activity android:name="com.moral.yunfushao.MainActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.ForgetPasswordActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.LoginActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.RegisterActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.BLESearchActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.VoiceSetActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.ChartActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.ChooseSongActivity" android:screenOrientation="portrait" /> <activity android:name="com.moral.yunfushao.activity.TestActivity" android:screenOrientation="portrait" /> <service android:name=".ble.BluetoothService" /> <meta-data @@ -75,8 +94,7 @@ <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> android:process=":remote"></service> </application> </manifest> app/src/main/java/com/moral/yunfushao/activity/BLESearchActivity.java
@@ -105,7 +105,10 @@ if (MainApp.theApp.bleManager != null) { MainApp.theApp.bleManager.closeBluetoothGatt(); } mBluetoothService.scanAndConnect5(scanResultList.get(position).getDevice().getAddress()); EventMessage eventMessage = new EventMessage(); eventMessage.setType(AppConfig.BLUETOOCH_CHANGE_CONNECT); EventBus.getDefault().post(eventMessage); mBluetoothService.connectDevice(scanResultList.get(position)); } } app/src/main/java/com/moral/yunfushao/adapter/SongAdapter.java
@@ -9,7 +9,6 @@ import com.moral.andbrickslib.baseadapter.recyclerview.base.ViewHolder; import com.moral.yunfushao.R; import com.moral.yunfushao.model.Song; import com.moral.yunfushao.model.VoiceBean; import java.util.List; app/src/main/java/com/moral/yunfushao/ble/BluetoothService.java
@@ -154,24 +154,23 @@ mCallback.onConnecting(); } System.out.println("BleGattCallback setting " + scanResult.getDevice().getAddress()); System.out.println("Ble onconnectSuccess"); bleManager.connectDevice(scanResult, false, new BleGattCallback() { @Override public void onFoundDevice(ScanResult scanResult) { System.out.println("chenqi blueTooth connect state -> onFoundDevice"); BluetoothService.this.name = scanResult.getDevice().getName(); BluetoothService.this.mac = scanResult.getDevice().getAddress(); } @Override public void onConnecting(BluetoothGatt gatt, int status) { System.out.println("chenqi blueTooth connect state -> onConnecting"); } @Override public void onConnectError(BleException exception) { System.out.println("chenqi blueTooth connect state -> onConnectError"); runOnMainThread(new Runnable() { @Override public void run() { @@ -184,12 +183,14 @@ @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { System.out.println("chenqi blueTooth connect state -> onConnectSuccess"); //保存最近连接的蓝牙设备MAC MainApp.theApp.sharedPreferencesUtil.saveBLE(gatt.getDevice().getAddress()); } @Override public void onServicesDiscovered(final BluetoothGatt gatt, int status) { System.out.println("chenqi blueTooth connect state -> onServicesDiscovered"); BluetoothService.this.gatt = gatt; runOnMainThread(new Runnable() { @Override @@ -203,6 +204,7 @@ @Override public void onDisConnected(BluetoothGatt gatt, int status, BleException exception) { System.out.println("chenqi blueTooth connect state -> onDisConnected"); runOnMainThread(new Runnable() { @Override public void run() { app/src/main/java/com/moral/yunfushao/common/AppConfig.java
@@ -11,6 +11,7 @@ public static final int CHANGE_SETTING = 3; public static final int SET_MAIN_CALL = 4; public static final int SET_VOICE = 5; public static final int BLUETOOCH_CHANGE_CONNECT = 6; public static String voideUrl1 = "http://yfsapi.7drlb.com/video/boy/music.mp3"; public static String voideUrl2 = "http://yfsapi.7drlb.com/video/boy/music1.mp3"; public static String voideUrl3 = "http://yfsapi.7drlb.com/video/boy/music2.mp3"; app/src/main/java/com/moral/yunfushao/common/VersionConstants.java
New file @@ -0,0 +1,12 @@ package com.moral.yunfushao.common; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/2. * @Package_name: pregnancy_guard_android */ public class VersionConstants { public static final String DEBUG = "debug"; public static final String RELEASE = "release"; } app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
@@ -35,6 +35,7 @@ import com.moral.andbrickslib.utils.TimeUtil; import com.moral.andbrickslib.utils.dialog.MaterialDialogUtils; import com.moral.andbrickslib.utils.log.XLog; import com.moral.yunfushao.BuildConfig; import com.moral.yunfushao.MainActivity; import com.moral.yunfushao.MainApp; import com.moral.yunfushao.R; @@ -45,6 +46,7 @@ import com.moral.yunfushao.ble.BluetoothService; import com.moral.yunfushao.common.API; import com.moral.yunfushao.common.AppConfig; import com.moral.yunfushao.common.VersionConstants; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.HttpUtils; import com.moral.yunfushao.imageload.ImageLoader; @@ -90,6 +92,7 @@ private ArrayList<RecData> submitResult = new ArrayList<>(); private StringBuilder stringResult = new StringBuilder(); private String deviceName = "";//当前连接的设备名称 //临时存储上传数据 private ArrayList<RecData> submitTempResult = new ArrayList<>(); @@ -120,8 +123,10 @@ handler.removeCallbacks(runnable); checkTimeCount = 0; result = result.substring(14); doHandleData(result); if (result.length() > 14) { result = result.substring(14); doHandleData(result); } } if (result.startsWith("3A")) { @@ -151,7 +156,6 @@ if (result.length() >= 76) { DebugUtils.sendData("data", result); parseHoutData(result.substring(0, 76)); mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_SEND_7A, null); result = result.substring(76); doHandleData(result); } else { @@ -167,6 +171,7 @@ */ @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void eventComing(EventMessage msg) { System.out.println("chenqi msge -> " + msg.getType()); if (msg.getType() == AppConfig.GET_BLE_SERVICE) { if (chonglianTimer != null) { chonglianTimer.cancel(); @@ -190,7 +195,6 @@ for (BluetoothGattCharacteristic characteristic : mBluetoothService.getService().getCharacteristics()) { int charaProp = characteristic.getProperties(); if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0) { } if ((charaProp & BluetoothGattCharacteristic.PROPERTY_WRITE) > 0 || (charaProp & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) > 0) { mBluetoothService.setWirteCharacteristic(characteristic); @@ -199,6 +203,7 @@ mBluetoothService.setCharacteristic(characteristic); } } } /** @@ -252,10 +257,6 @@ } else if (msg.getType() == AppConfig.GET_BLE_DISCONNECT) { preLevel = -1; showStatus(-1); pv.setStatusStr("未连接"); pv.setPercent(0); tv_ljjl.setText("0"); tv_shishi.setText("0"); chonglian(); stop(); isVirating = false; @@ -294,7 +295,8 @@ voiceBean.setName("严重铃声"); voiceList.add(voiceBean); } } else if (msg.getType() == AppConfig.BLUETOOCH_CHANGE_CONNECT) { showStatus(-1); } } @@ -382,14 +384,17 @@ iv_dianliang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlipAnimatorXViewShow(iv_dianliang, tv_dianliang2, 200); if (BuildConfig.BUILD_TYPE.equals(VersionConstants.DEBUG)) { FlipAnimatorXViewShow(iv_dianliang, tv_dianliang2, 200); } } }); tv_dianliang2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlipAnimatorXViewShow(tv_dianliang2, iv_dianliang, 200); if (BuildConfig.BUILD_TYPE.equals(VersionConstants.DEBUG)) { FlipAnimatorXViewShow(tv_dianliang2, iv_dianliang, 200); } } }); showStatus(-1); @@ -605,16 +610,18 @@ int danger = R.mipmap.icon_danger; if (type == 1) { //电离 yanzhang = R.mipmap.dianliyanyang; danger = R.mipmap.dianlidanger; lv_ljjl.setVisibility(View.VISIBLE); tvShishiTitle.setText("实时计量(uSv/h)"); } else if (type == 2) { //电磁 yanzhang = R.mipmap.icon_yanzhong; danger = R.mipmap.icon_danger; tvShishiTitle.setText("实时计量(V/m)"); lv_ljjl.setVisibility(View.GONE); tvLijiTitle.setText("累计计量(uSv)"); tvShishiTitle.setText("实时计量(uSv/h)"); iv_dianliang.setEnabled(false); } else if (type == 2) { //电磁 yanzhang = R.mipmap.dianliyanyang; danger = R.mipmap.dianlidanger; tvLijiTitle.setText("磁场辐射"); tvShishiTitle.setText("电场辐射"); iv_dianliang.setEnabled(true); } if (level == 0) { @@ -662,6 +669,22 @@ tv_status.setText("离线"); tv_status.setTextColor(getResources().getColor(R.color.gray_txt)); ll_status.setBackgroundResource(R.mipmap.bg_corner_gray); pv.setStatusStr("未连接"); pv.setPercent(0); tv_ljjl.setText("0"); tv_shishi.setText("0"); showPower(2, 0); } else if (level == -2) { tv_tishi.setText("当前设备充电中"); tv_tishi.setBackgroundResource(R.mipmap.bt_green); tv_desc.setText("您当前设备在线!"); iv_status.setVisibility(View.GONE); tv_status.setText("充电中"); ll_status.setBackgroundResource(R.mipmap.bg_corner_gray); pv.setPercent(0); pv.setStatusStr("连接中"); tv_ljjl.setText("0"); tv_shishi.setText("0"); } } @@ -672,7 +695,6 @@ */ private int preLevel = -1; /** * data : 5A160000FA1C0400004100E7000700000071005B * format : 20个字节,5A开头 5B结尾 @@ -682,6 +704,7 @@ */ //todo 解析实时数据 private void parseCurrentData(String nowResult) { System.out.println("chenqi nowResult parseCurrentData"); type = 1; if (!TextUtils.isEmpty(nowResult) && nowResult.length() == 40 && nowResult.startsWith("5A") && nowResult.endsWith("5B")) { int real = Integer.parseInt(nowResult.substring(24, 26), 16) * 256 + Integer.parseInt(nowResult.substring(26, 28), 16); @@ -701,10 +724,6 @@ data.setTime(TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss")); data.setType(0); /** * 显示电量 */ showPower(b1, b2); if (realValue < 0.16) { data.setIs_warn(0); @@ -748,7 +767,10 @@ AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0); } } /** * 显示电量 */ showPower(b1, b2); submitResult.add(data); // realResult.clear(); } @@ -760,6 +782,7 @@ * 电磁辐射显示 */ private void parseHoutData(String nowResult) { System.out.println("chenqi elec parseHoutData" + nowResult); if (TextUtils.isEmpty(nowResult)) { return; } @@ -767,33 +790,41 @@ String[] strings = StringUtils.splitString(nowResult, 2); if (strings[0].startsWith("7A") && strings[35].endsWith("7B")) { String realString = StringUtils.subStrings(strings, 21, 23); int real = Integer.parseInt(realString, 16); int electric_field = Integer.parseInt(realString, 16); int b1 = Integer.parseInt(strings[24], 16); int b2 = Integer.parseInt(strings[25], 16); double realValue = NumberUtils.getBigDecimalValue((real) / 100.0, 3); int baojing = Integer.parseInt(strings[29], 16); int elec = Integer.parseInt(StringUtils.subStrings(strings, 13, 15)); // T.show("bl = " + strings[24] + " -- b2 = " + strings[25]); // // System.out.println("bl = " + b1 + " -- b2 = " + b2); double electricFieldValue = (electric_field) / 100.0; double elecValue = (elec) / 100.0; String power = StringUtils.subStrings(strings, 26, 27); double textPower = Integer.parseInt(power, 16) / 1000.0; tv_shishi.setText(electricFieldValue + "(V/m)"); tv_dianliang2.setText(textPower + "V"); tv_shishi.setText(realValue + ""); tv_ljjl.setText(elecValue + "(μT)"); /** * 保存数据至内存 */ RecData data = new RecData(); data.setValue(realValue); data.setValue(electricFieldValue); data.setTime(TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss")); data.setType(0); /** * 电量显示 */ showPower(b1, b2); showStatus(Integer.parseInt(strings[21], 16)); if (realValue < 0.16) { data.setIs_warn(0); pv.setPercent((float) (realValue * (0.25 / 0.16))); if (baojing == 0) { pv.setPercent((float) (0.125)); showStatus(0); stop(); if (isVirating) { @@ -801,40 +832,50 @@ AudioUtils.virateCancle(getActivity()); } preLevel = -1; } else if (realValue >= 0.16 && realValue < 0.8) { } else if (baojing == 1) { data.setIs_warn(1); pv.setPercent((float) (0.25 + realValue * (0.25 / 0.8))); pv.setPercent((float) (0.375)); showStatus(1); play(0); if (!isVirating) { isVirating = true; AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0); } } else if (realValue >= 0.8 && realValue < 2) { } else if (baojing == 2) { data.setIs_warn(1); showStatus(2); pv.setPercent((float) (0.5 + realValue * (0.25 / 2))); pv.setPercent((float) (0.625)); play(1); if (!isVirating) { isVirating = true; AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0); } } else if (realValue >= 2) { } else if (baojing == 3) { data.setIs_warn(1); showStatus(3); if ((0.75 + realValue / 30) < 1.0) { pv.setPercent((float) (0.75 + realValue / 30)); } else { pv.setPercent(1.0f); pv.setPercent((float) (0.875)); play(2); if (!isVirating) { isVirating = true; AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0); } } else if (baojing == 4) { data.setIs_warn(1); showStatus(3); pv.setPercent((float) (1.00)); play(2); if (!isVirating) { isVirating = true; AudioUtils.vibrate(getActivity(), new long[]{1000, 1000, 1000, 1000}, 0); } } System.out.println("chenqi elec B-- " + b2); /** * 电量显示 */ showPower(b1, b2); submitResult.add(data); // realResult.clear(); // realResult.clear(); } } @@ -868,7 +909,6 @@ ArrayList<RecData> temp = new ArrayList<>(); temp.add(data); Log.d("hourdata", "=====hourdata=====" + FastJsonTools.toJson(temp)); test(nowResult, time.toString()); submitHourData(temp); } @@ -880,6 +920,7 @@ private void showPower(int b1, int b2) { if (b1 == 1) { ImageLoader.setGIFByUrl(getActivity(), R.mipmap.icon_chong, iv_dianliang); showStatus(-2); } else if (b1 == 2) { ImageLoader.setImageViewById(getActivity(), R.mipmap.icon_full, iv_dianliang); } else { @@ -1065,7 +1106,6 @@ } public static void FlipAnimatorXViewShow(final View oldView, final View newView, final long time) { ObjectAnimator animator1 = ObjectAnimator.ofFloat(oldView, "rotationX", 0, 90); final ObjectAnimator animator2 = ObjectAnimator.ofFloat(newView, "rotationX", -90, 0); animator2.setInterpolator(new OvershootInterpolator(2.0f)); app/src/main/java/com/moral/yunfushao/ui/PanelView.java
@@ -1,5 +1,6 @@ package com.moral.yunfushao.ui; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; @@ -28,11 +29,11 @@ private int mmHeight; //绘制渐变圆弧的画笔 private Paint mShaderPaint; private int[] mshaderColor = new int[]{0xfff70e17,0xfff70e17,0xfff70e17,0xffff5c92,0xff00c44a,0xff00d062,0xff00f5af,0xff00f6cb,0xff00ccff,0xff179fff,0xffa054ff,0xffa53aff,0xffd74bff,0xfff64da5,0xfff70e17}; private int[] mshaderRedColor = new int[]{0xfff70e17,0xffff5c92}; private int[] mshaderZiseColor = new int[]{0xffa53aff,0xffd74bff,0xfff64da5}; private int[] mshaderBlueColor = new int[]{0xff00f6cb,0xff00ccff,0xff179fff,0xffa054ff}; private int[] mshaderGreenColor = new int[]{0xff00c44a,0xff00d062,0xff00f5af}; private int[] mshaderColor = new int[]{0xfff70e17, 0xfff70e17, 0xfff70e17, 0xffff5c92, 0xff00c44a, 0xff00d062, 0xff00f5af, 0xff00f6cb, 0xff00ccff, 0xff179fff, 0xffa054ff, 0xffa53aff, 0xffd74bff, 0xfff64da5, 0xfff70e17}; private int[] mshaderRedColor = new int[]{0xfff70e17, 0xffff5c92}; private int[] mshaderZiseColor = new int[]{0xffa53aff, 0xffd74bff, 0xfff64da5}; private int[] mshaderBlueColor = new int[]{0xff00f6cb, 0xff00ccff, 0xff179fff, 0xffa054ff}; private int[] mshaderGreenColor = new int[]{0xff00c44a, 0xff00d062, 0xff00f5af}; //环形渐变色值渲染 private SweepGradient mSweepGradient; private int mShaderWidth = 70; @@ -59,7 +60,7 @@ private Paint drawTextPaint; private int textColor = Color.GRAY; private int textSize = 36; private String[] level = {"绝对安全","建议回避","及时闪躲","紧急撤离"}; private String[] level = {"绝对安全", "建议回避", "及时闪躲", "紧急撤离"}; //内进度圆 private Paint mCirclePaint; @@ -75,17 +76,26 @@ private Bitmap mBitmap; private float percent = 0;//百分比数据 private float percent2 = (float) 0.27;//百分比数据 private String statusStr = "未连接"; private ValueAnimator anim; public void setStatusStr(String statusStr){ public void setStatusStr(String statusStr) { this.statusStr = statusStr; postInvalidate(); } public void setPercent(float percent){ public void setPercent(float percent) { this.percent = percent; // this.percent2 = percent; postInvalidate(); // if (anim.isStarted() || anim.isRunning()) { // anim.end(); // anim.cancel(); // } // anim.start(); } public PanelView(Context context) { @@ -106,15 +116,15 @@ private void init(Context mContext) { this.mContext = mContext; //初始化 mShaderWidth = dip2px(mContext,24); line1Length = dip2px(mContext,14); line2Length = dip2px(mContext,22); lineWidth = dip2px(mContext,2); widthInner = dip2px(mContext,40); paddingKedu = dip2px(mContext,10); mCircleWidth = dip2px(mContext,24); innerPadding = dip2px(mContext,8); textSize = dip2px(mContext,12); mShaderWidth = dip2px(mContext, 24); line1Length = dip2px(mContext, 14); line2Length = dip2px(mContext, 22); lineWidth = dip2px(mContext, 2); widthInner = dip2px(mContext, 40); paddingKedu = dip2px(mContext, 10); mCircleWidth = dip2px(mContext, 24); innerPadding = dip2px(mContext, 8); textSize = dip2px(mContext, 12); //渐变圆环 mShaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -123,7 +133,7 @@ mShaderPaint.setStrokeCap(Paint.Cap.ROUND); paintGapLine = new Paint(Paint.ANTI_ALIAS_FLAG); paintGapLine.setColor(Color.WHITE); paintGapLine.setStrokeWidth(dip2px(mContext,3)); paintGapLine.setStrokeWidth(dip2px(mContext, 3)); //刻度 mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mLinePaint.setStyle(Paint.Style.STROKE); @@ -149,7 +159,8 @@ mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBitPaint.setFilterBitmap(true); mBitPaint.setDither(true); mBitmap = ((BitmapDrawable)mContext.getResources().getDrawable(R.mipmap.zhizhen)).getBitmap(); mBitmap = ((BitmapDrawable) mContext.getResources().getDrawable(R.mipmap.zhizhen)).getBitmap(); // startAnimation(); } @Override @@ -169,50 +180,78 @@ } else { mmHeight = dip2px(mContext, 300); } mWidth = mmWidth<mmHeight?mmWidth:mmHeight; mWidth = mmWidth < mmHeight ? mmWidth : mmHeight; setMeasuredDimension(mmWidth, mmHeight); } // private void startAnimation() { // anim = ValueAnimator.ofObject(new CustomPointEvaluator(),(float)0, percent2); // anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // @Override // public void onAnimationUpdate(ValueAnimator animation) { // percent = (float) animation.getAnimatedValue(); // System.out.println("chenqi rotato " + percent + " all -> " + percent2 * 300); //// invalidate(); // } // }); // anim.setDuration(3000L); // anim.setRepeatCount(Animation.INFINITE); // } // // private class CustomPointEvaluator implements TypeEvaluator<Float> { // @Override // public Float evaluate(float fraction, Float startValue, Float endValue) { // System.out.println("chenqi2 rotato " + fraction + " all -> " + endValue); // float y = fraction * endValue; // return y; // } // } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画刻度 //画刻度 drawKedu(canvas); //画刻度文字 drawTextKedu(canvas); //画渐变圆环 drawJianbianCircle(canvas); //画内圆 RectF cirlcleRect = new RectF(mShaderWidth + widthInner+mCircleWidth+innerPadding, mShaderWidth + widthInner+mCircleWidth+innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding); RectF cirlcleRect = new RectF(mShaderWidth + widthInner + mCircleWidth + innerPadding, mShaderWidth + widthInner + mCircleWidth + innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding); canvas.drawArc(cirlcleRect, 0, 360, false, mCirclePaint); //画指针 float circleR = (cirlcleRect.right - cirlcleRect.left)/2; float circleR = (cirlcleRect.right - cirlcleRect.left) / 2; float bitH = circleR; float bitW = bitH*0.448f; float bitW = bitH * 0.448f; canvas.save(); canvas.rotate(percent*300-150,mWidth/2,mWidth/2); RectF btmRect = new RectF((float) (cirlcleRect.left+bitH-bitW*0.535), (float) (cirlcleRect.top+mCircleWidth*0.68),(float) (cirlcleRect.left+bitH+bitW*0.465), (float) (cirlcleRect.top+bitH+mCircleWidth*0.68)); System.out.println("chenqi percent connect" + percent); canvas.rotate(percent * 300 - 150, mWidth / 2, mWidth / 2); RectF btmRect = new RectF((float) (cirlcleRect.left + bitH - bitW * 0.535), (float) (cirlcleRect.top + mCircleWidth * 0.68), (float) (cirlcleRect.left + bitH + bitW * 0.465), (float) (cirlcleRect.top + bitH + mCircleWidth * 0.68)); // Log.d("haijiang","left="+btmRect.left); // Log.d("haijiang","right="+btmRect.right); // Log.d("haijiang","top="+btmRect.top); // Log.d("haijiang","bottom="+btmRect.bottom); // Log.d("haijiang","宽高比例="+(btmRect.right-btmRect.left)/(btmRect.bottom-btmRect.top)); canvas.drawBitmap(mBitmap,null,btmRect,mBitPaint); canvas.drawBitmap(mBitmap, null, btmRect, mBitPaint); canvas.restore(); drawTextPaint.setColor(line3Color); drawTextPaint.setTextSize(textSize); int statusStrWidth = (int) drawTextPaint.measureText(this.statusStr); canvas.drawText(this.statusStr,mWidth / 2-statusStrWidth/2, mWidth/2+(btmRect.bottom-btmRect.top)/2,drawTextPaint); if(percent>0) canvas.drawArc(new RectF(mShaderWidth + widthInner+mCircleWidth+innerPadding, mShaderWidth + widthInner+mCircleWidth+innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding), 120, 300*percent, false, mProgressPaint); canvas.drawText(this.statusStr, mWidth / 2 - statusStrWidth / 2, mWidth / 2 + (btmRect.bottom - btmRect.top) / 2, drawTextPaint); if (percent > 0) canvas.drawArc(new RectF(mShaderWidth + widthInner + mCircleWidth + innerPadding, mShaderWidth + widthInner + mCircleWidth + innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding), 120, 300 * percent, false, mProgressPaint); } /** * 画刻度 * * @param canvas */ private void drawKedu(Canvas canvas){ private void drawKedu(Canvas canvas) { //画右边刻度 for (int i = 0; i <= 50; i++) { canvas.save(); @@ -245,85 +284,86 @@ /** * 画刻度文字 * * @param canvas */ private void drawTextKedu(Canvas canvas){ for(int i=0;i<level.length;i++){ private void drawTextKedu(Canvas canvas) { for (int i = 0; i < level.length; i++) { float textWidth = drawTextPaint.measureText(level[i]); if(percent<0.25){ if(i==0){ if (percent < 0.25) { if (i == 0) { drawTextPaint.setColor(line3Color); }else{ } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); if(i==0){ canvas.rotate(-120,mWidth/2,mWidth/2); }else if(i==1){ canvas.rotate(-45,mWidth/2,mWidth/2); }else if(i==2){ canvas.rotate(45,mWidth/2,mWidth/2); }else if(i==3){ canvas.rotate(120,mWidth/2,mWidth/2); if (i == 0) { canvas.rotate(-120, mWidth / 2, mWidth / 2); } else if (i == 1) { canvas.rotate(-45, mWidth / 2, mWidth / 2); } else if (i == 2) { canvas.rotate(45, mWidth / 2, mWidth / 2); } else if (i == 3) { canvas.rotate(120, mWidth / 2, mWidth / 2); } canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); }else if(percent>=0.25&&percent<0.5){ if(i==1){ } else if (percent >= 0.25 && percent < 0.5) { if (i == 1) { drawTextPaint.setColor(line3Color); }else{ } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-120+i*75,mWidth/2,mWidth/2); if(i==0){ canvas.rotate(-120,mWidth/2,mWidth/2); }else if(i==1){ canvas.rotate(-45,mWidth/2,mWidth/2); }else if(i==2){ canvas.rotate(45,mWidth/2,mWidth/2); }else if(i==3){ canvas.rotate(120,mWidth/2,mWidth/2); if (i == 0) { canvas.rotate(-120, mWidth / 2, mWidth / 2); } else if (i == 1) { canvas.rotate(-45, mWidth / 2, mWidth / 2); } else if (i == 2) { canvas.rotate(45, mWidth / 2, mWidth / 2); } else if (i == 3) { canvas.rotate(120, mWidth / 2, mWidth / 2); } canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); }else if(percent>=0.5&&percent<0.75){ if(i==2){ } else if (percent >= 0.5 && percent < 0.75) { if (i == 2) { drawTextPaint.setColor(line3Color); }else{ } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-120+i*75,mWidth/2,mWidth/2); if(i==0){ canvas.rotate(-120,mWidth/2,mWidth/2); }else if(i==1){ canvas.rotate(-45,mWidth/2,mWidth/2); }else if(i==2){ canvas.rotate(45,mWidth/2,mWidth/2); }else if(i==3){ canvas.rotate(120,mWidth/2,mWidth/2); if (i == 0) { canvas.rotate(-120, mWidth / 2, mWidth / 2); } else if (i == 1) { canvas.rotate(-45, mWidth / 2, mWidth / 2); } else if (i == 2) { canvas.rotate(45, mWidth / 2, mWidth / 2); } else if (i == 3) { canvas.rotate(120, mWidth / 2, mWidth / 2); } canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); }else if(percent>=0.75){ if(i==3){ } else if (percent >= 0.75) { if (i == 3) { drawTextPaint.setColor(line3Color); }else{ } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-105+i*75,mWidth/2,mWidth/2); if(i==0){ canvas.rotate(-120,mWidth/2,mWidth/2); }else if(i==1){ canvas.rotate(-45,mWidth/2,mWidth/2); }else if(i==2){ canvas.rotate(45,mWidth/2,mWidth/2); }else if(i==3){ canvas.rotate(120,mWidth/2,mWidth/2); if (i == 0) { canvas.rotate(-120, mWidth / 2, mWidth / 2); } else if (i == 1) { canvas.rotate(-45, mWidth / 2, mWidth / 2); } else if (i == 2) { canvas.rotate(45, mWidth / 2, mWidth / 2); } else if (i == 3) { canvas.rotate(120, mWidth / 2, mWidth / 2); } canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); } } @@ -331,24 +371,25 @@ /** * 画渐变圆环 * * @param canvas */ private void drawJianbianCircle(Canvas canvas){ private void drawJianbianCircle(Canvas canvas) { mSweepGradient = new SweepGradient(mWidth / 2, mWidth / 2, mshaderColor, null); mShaderPaint.setShader(mSweepGradient); canvas.drawArc(new RectF(mShaderWidth + widthInner, mShaderWidth + widthInner, mWidth - mShaderWidth - widthInner, mWidth - mShaderWidth - widthInner), 120, 300, false, mShaderPaint); //画圆环分隔 canvas.save(); canvas.rotate(75, mWidth / 2, mWidth / 2); canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); canvas.save(); canvas.rotate(0, mWidth / 2, mWidth / 2); canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); canvas.save(); canvas.rotate(-75, mWidth / 2, mWidth / 2); canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); } app/src/main/res/values/strings.xml
@@ -1,5 +1,6 @@ <resources> <string name="app_name">孕妇哨</string> <string name="app_name_text">孕妇哨Text</string> <string name="action_settings">Settings</string> <string name="soft_update_no">已经是最新版本</string> gradlewold mode 100644 new mode 100755