├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── themes.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── layout │ │ │ │ ├── activity_main.xml │ │ │ │ └── activity_ming_pan.xml │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── gnss │ │ │ │ └── fortunetelling │ │ │ │ ├── bean │ │ │ │ ├── ListBean.kt │ │ │ │ └── ResultBean.kt │ │ │ │ ├── MingPanActivity.kt │ │ │ │ ├── App.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── Extentions.kt │ │ │ │ ├── MingPanView.kt │ │ │ │ └── JsonParser.kt │ │ ├── AndroidManifest.xml │ │ └── assets │ │ │ └── src.json │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── gnss │ │ │ └── fortunetelling │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── gnss │ │ └── fortunetelling │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── .idea ├── .gitignore ├── codeStyles │ ├── codeStyleConfig.xml │ └── Project.xml ├── compiler.xml ├── vcs.xml ├── misc.xml ├── gradle.xml └── jarRepositories.xml ├── image-folder ├── 加宫名称.png └── Screenshot_20210322-200303.jpg ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── README.md ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "FortuneTelling" -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /image-folder/加宫名称.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/image-folder/加宫名称.png -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 紫微星语 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /image-folder/Screenshot_20210322-200303.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/image-folder/Screenshot_20210322-200303.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocuicui1937/FortuneTelling/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Mar 20 16:08:27 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/bean/ListBean.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling.bean 2 | 3 | data class ListBean( 4 | val stars:List, 5 | val bottomLeft:List, 6 | val bottomRight:List, 7 | val bottomCenter:List, 8 | val center:String 9 | ) 10 | 11 | data class Stars( 12 | val big:String, 13 | val small:String 14 | ) -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/MingPanActivity.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import androidx.appcompat.app.AppCompatActivity 4 | import android.os.Bundle 5 | 6 | class MingPanActivity : AppCompatActivity() { 7 | override fun onCreate(savedInstanceState: Bundle?) { 8 | super.onCreate(savedInstanceState) 9 | setContentView(R.layout.activity_ming_pan) 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | -------------------------------------------------------------------------------- /app/src/test/java/com/gnss/fortunetelling/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/App.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import android.app.Application 4 | import android.content.Context 5 | 6 | class App :Application(){ 7 | companion object { 8 | var mContext: Application? = null 9 | fun getContext(): Context { 10 | return mContext!! 11 | } 12 | } 13 | 14 | override fun onCreate() { 15 | super.onCreate() 16 | mContext = this; 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import android.graphics.Typeface 4 | import androidx.appcompat.app.AppCompatActivity 5 | import android.os.Bundle 6 | import android.util.TypedValue 7 | import android.widget.TextView 8 | 9 | class MainActivity : AppCompatActivity() { 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | setContentView(R.layout.activity_main) 13 | val tvContent = findViewById(R.id.tv_content) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/Extentions.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import android.app.Application 4 | import android.content.res.Resources 5 | import android.util.TypedValue 6 | import android.widget.Toast 7 | import com.google.gson.Gson 8 | 9 | /** 10 | * 扩展函数 11 | * */ 12 | val Float.dp 13 | get() = TypedValue.applyDimension( 14 | TypedValue.COMPLEX_UNIT_DIP, 15 | this, Resources.getSystem().displayMetrics 16 | ) 17 | 18 | inline fun Gson.fromJson(json: String) = fromJson(json, T::class.java) 19 | 20 | 21 | 22 | fun String.showToast(duration: Int = Toast.LENGTH_SHORT){ 23 | //MyApplication 这是一个直接获取全局context的类 24 | Toast.makeText(App.mContext,this,Toast.LENGTH_SHORT).show() 25 | } 26 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/gnss/fortunetelling/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.gnss.fortunetelling", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'kotlin-android' 4 | } 5 | 6 | android { 7 | compileSdkVersion 30 8 | buildToolsVersion "30.0.2" 9 | 10 | defaultConfig { 11 | applicationId "com.gnss.fortunetelling" 12 | minSdkVersion 21 13 | targetSdkVersion 30 14 | versionCode 1 15 | versionName "1.0" 16 | 17 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 18 | } 19 | 20 | buildTypes { 21 | release { 22 | minifyEnabled false 23 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 24 | } 25 | } 26 | compileOptions { 27 | sourceCompatibility JavaVersion.VERSION_1_8 28 | targetCompatibility JavaVersion.VERSION_1_8 29 | } 30 | kotlinOptions { 31 | jvmTarget = '1.8' 32 | } 33 | sourceSets { 34 | main { 35 | assets { 36 | srcDirs 'src\\main\\assets' 37 | } 38 | } 39 | } 40 | } 41 | 42 | dependencies { 43 | 44 | implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 45 | implementation 'androidx.core:core-ktx:1.2.0' 46 | implementation 'androidx.appcompat:appcompat:1.2.0' 47 | implementation 'com.google.android.material:material:1.2.1' 48 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 49 | testImplementation 'junit:junit:4.+' 50 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 51 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 52 | implementation 'com.google.code.gson:gson:2.8.6' 53 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_ming_pan.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 26 | 27 | 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FortuneTelling 2 | 仿文墨天机命盘界面,自定义view 3 | 宫格实现是通过drawline画直线,拿到View的width和height的1/4,按照对应宫格宽度和高度进行偏移划线;因为中间的是占了4个小宫格矩形位置组成的大宫格矩形,因此需要分部分处理,观察图形后发现按照从上到下分为4部分最为合适,最上边申、酉、戌、亥四个宫位划分为TopTopArea,中上部分的未、子两个宫位划分为TopCenterArea,中下部分的午、丑两个宫位分为BottomCenterArea,最下边巳、辰、卯、寅四个宫位划分为BottomBottomArea。 4 | x方向也是屏幕宽度方向,按照宫格所占宽度划线偏移。y方向也就是屏幕高度方向,从上往下按照宫格所占高度偏移划线。 5 | 宫格中的文字部分,按照申宫调用drawText绘制出文字,并通过Paint设置文字的大小,文字的位置,以及文字的颜色,酉、戌、亥宫中的文字布局位置通过申宫中的文字位置按照宫位所处的位置偏移即可,其它宫位原理亦如此,具体查看demo中的代码实现。 6 | 7 | 中宫需要注意的是它会有多行文字的显示,但是drawText 只能实现单行文字效果,那么要想实现多行代码效果,需要用到官方提供另外一个专门用来实现多行文字的函数StaticLayout,我们要展示的数据 8 | val centerStrFromText ="姓名:匿名 ${info.性别} ${info.五行局}\n" + "真太阳时:${info.真太阳时}\n" + "钟表时间:${info.钟表时间}\n" + "农历:${info.年干}" + "${info.年支}年${info.农历月}月${info.农历日}日 ${info.时干}\n" + "命主:${info.命主} 身主:${info.身主} 子斗:${info.身宫}\n"] 9 | val centerStaticLayout = StaticLayout(centerStrFromText,mTextPaint,600,Layout.Alignment.ALIGN_NORMAL,1f,0f,true) 10 | 11 | StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad) 12 | width 是文字区域的宽度,文字到达这个宽度后就会自动换行; 13 | align 是文字的对齐方向; 14 | spacingmult 是行间距的倍数,通常情况下填 1 就好; 15 | spacingadd 是行间距的额外增加值,通常情况下填 0 就好; 16 | includepad 是指是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界。 17 | 多行文字偏移,需要配合canvas的translate方法实现,调用StaticLayout的draw方法进行绘制 18 | 19 | 添加点击事件,重写onTouchEvent方法,在 MotionEvent.ACTION_UP中判断用户点击位置是不是符合所在宫位的范围内如果是改变字体颜色,调用invalidate重新绘制其它宫位显示 20 | 21 | 实现效果1 实现效果2 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 120 | 121 | 130 | 131 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/assets/src.json: -------------------------------------------------------------------------------- 1 | { 2 | "其他信息": { 3 | "性别": "阳男", 4 | "五行局": "土五局", 5 | "命主": "文曲", 6 | "身主": "火星", 7 | "身宫": "亥", 8 | "经度": "120.000000", 9 | "真太阳时": "2021/1/22 20:32:25", 10 | "钟表时间": "2021/1/22 20:44:3", 11 | "农历年": "2020", 12 | "农历月": "十二", 13 | "农历是否闰月": "0", 14 | "农历日": "初十", 15 | "时支": "戌", 16 | "时干": "丙", 17 | "日干": "庚", 18 | "日支": "午", 19 | "月干": "己", 20 | "月支": "丑", 21 | "年干": "庚", 22 | "年支": "子" 23 | }, 24 | "十二宫信息": { 25 | "辰": { 26 | "宫": "父母", 27 | "宫干": "庚", 28 | "长生": "墓", 29 | "生年博士": "病符", 30 | "生年将前": "华盖", 31 | "生年岁前": "官符", 32 | "大限": "15-24", 33 | "小限": "7,19,31,43,55,67", 34 | "四化": { 35 | "禄": { 36 | "星": "太阳", 37 | "支": "子", 38 | "力度": "50" 39 | }, 40 | "权": { 41 | "星": "武曲", 42 | "支": "亥", 43 | "力度": "20" 44 | }, 45 | "科": { 46 | "星": "太阴", 47 | "支": "寅", 48 | "力度": "90" 49 | }, 50 | "忌": { 51 | "星": "天同", 52 | "支": "戌", 53 | "力度": "50" 54 | } 55 | }, 56 | "自化": "", 57 | "冲化": { 58 | "忌": { 59 | "星": "天同", 60 | "支": "戌", 61 | "力度": "50" 62 | } 63 | }, 64 | "星列表": { 65 | "巨门": "巨门", 66 | "阴煞": "阴煞", 67 | "台辅": "台辅", 68 | "龙池": "龙池", 69 | "华盖": "华盖", 70 | "旬空": "旬空" 71 | }, 72 | "星庙旺": { 73 | "巨门": { 74 | "庙旺": "不", 75 | "级别值": "2" 76 | } 77 | } 78 | }, 79 | "丑": { 80 | "宫": "夫妻", 81 | "宫干": "己", 82 | "长生": "衰", 83 | "生年博士": "奏书", 84 | "生年将前": "攀鞍", 85 | "生年岁前": "晦气", 86 | "大限": "105-114", 87 | "小限": "4,16,28,40,52,64", 88 | "四化": { 89 | "禄": { 90 | "星": "武曲", 91 | "支": "亥", 92 | "力度": "60" 93 | }, 94 | "权": { 95 | "星": "贪狼", 96 | "支": "卯", 97 | "力度": "90" 98 | }, 99 | "科": { 100 | "星": "天梁", 101 | "支": "午", 102 | "力度": "10" 103 | }, 104 | "忌": { 105 | "星": "文曲", 106 | "支": "寅", 107 | "力度": "35" 108 | } 109 | }, 110 | "自化": "", 111 | "冲化": "", 112 | "星列表": { 113 | "天府": "天府", 114 | "地空": "地空", 115 | "天空": "天空", 116 | "天魁": "天魁" 117 | }, 118 | "星庙旺": { 119 | "地空": { 120 | "庙旺": "庙", 121 | "级别值": "7" 122 | }, 123 | "天府": { 124 | "庙旺": "庙", 125 | "级别值": "7" 126 | } 127 | } 128 | }, 129 | "亥": { 130 | "宫": "财帛", 131 | "宫干": "丁", 132 | "长生": "临官", 133 | "生年博士": "小耗", 134 | "生年将前": "亡神", 135 | "生年岁前": "病符", 136 | "大限": "85-94", 137 | "小限": "2,14,26,38,50,62", 138 | "四化": { 139 | "禄": { 140 | "星": "太阴", 141 | "支": "寅", 142 | "力度": "40" 143 | }, 144 | "权": { 145 | "星": "天同", 146 | "支": "戌", 147 | "力度": "50" 148 | }, 149 | "科": { 150 | "星": "天机", 151 | "支": "寅", 152 | "力度": "90" 153 | }, 154 | "忌": { 155 | "星": "巨门", 156 | "支": "辰", 157 | "力度": "30" 158 | } 159 | }, 160 | "自化": "", 161 | "冲化": "", 162 | "星列表": { 163 | "武曲": "武曲", 164 | "破军": "破军", 165 | "右弼": "右弼", 166 | "天巫": "天巫", 167 | "天官": "天官", 168 | "天寿": "天寿" 169 | }, 170 | "星庙旺": { 171 | "破军": { 172 | "庙旺": "庙", 173 | "级别值": "7" 174 | }, 175 | "武曲": { 176 | "庙旺": "得", 177 | "级别值": "5" 178 | }, 179 | "右弼": { 180 | "庙旺": "庙", 181 | "级别值": "7" 182 | } 183 | } 184 | }, 185 | "卯": { 186 | "宫": "命宫", 187 | "宫干": "己", 188 | "长生": "死", 189 | "生年博士": "喜神", 190 | "生年将前": "息神", 191 | "生年岁前": "贯索", 192 | "大限": "5-14", 193 | "小限": "6,18,30,42,54,66", 194 | "四化": { 195 | "禄": { 196 | "星": "武曲", 197 | "支": "亥", 198 | "力度": "60" 199 | }, 200 | "权": { 201 | "星": "贪狼", 202 | "支": "卯", 203 | "力度": "90" 204 | }, 205 | "科": { 206 | "星": "天梁", 207 | "支": "午", 208 | "力度": "10" 209 | }, 210 | "忌": { 211 | "星": "文曲", 212 | "支": "寅", 213 | "力度": "35" 214 | } 215 | }, 216 | "自化": { 217 | "权": { 218 | "星": "贪狼", 219 | "支": "卯", 220 | "力度": "90" 221 | } 222 | }, 223 | "冲化": "", 224 | "星列表": { 225 | "紫微": "紫微", 226 | "贪狼": "贪狼", 227 | "左辅": "左辅", 228 | "红鸾": "红鸾", 229 | "天才": "天才" 230 | }, 231 | "星庙旺": { 232 | "贪狼": { 233 | "庙旺": "庙", 234 | "级别值": "7" 235 | }, 236 | "紫微": { 237 | "庙旺": "旺", 238 | "级别值": "6" 239 | }, 240 | "左辅": { 241 | "庙旺": "旺", 242 | "级别值": "6" 243 | } 244 | } 245 | }, 246 | "申": { 247 | "宫": "交友", 248 | "宫干": "甲", 249 | "长生": "长生", 250 | "生年博士": "博士", 251 | "生年将前": "指背", 252 | "生年岁前": "白虎", 253 | "大限": "55-64", 254 | "小限": "11,23,35,47,59,71", 255 | "四化": { 256 | "禄": { 257 | "星": "廉贞", 258 | "支": "未", 259 | "力度": "60" 260 | }, 261 | "权": { 262 | "星": "破军", 263 | "支": "亥", 264 | "力度": "20" 265 | }, 266 | "科": { 267 | "星": "武曲", 268 | "支": "亥", 269 | "力度": "80" 270 | }, 271 | "忌": { 272 | "星": "太阳", 273 | "支": "子", 274 | "力度": "100" 275 | } 276 | }, 277 | "自化": "", 278 | "冲化": "", 279 | "星列表": { 280 | "天刑": "天刑", 281 | "蜚廉": "蜚廉", 282 | "禄存": "禄存", 283 | "铃星": "铃星", 284 | "恩光": "恩光", 285 | "天伤": "天伤" 286 | }, 287 | "星庙旺": { 288 | "铃星": { 289 | "庙旺": "庙", 290 | "级别值": "7" 291 | } 292 | } 293 | }, 294 | "巳": { 295 | "宫": "福德", 296 | "宫干": "辛", 297 | "长生": "绝", 298 | "生年博士": "大耗", 299 | "生年将前": "劫煞", 300 | "生年岁前": "小耗", 301 | "大限": "25-34", 302 | "小限": "8,20,32,44,56,68", 303 | "四化": { 304 | "禄": { 305 | "星": "巨门", 306 | "支": "辰", 307 | "力度": "50" 308 | }, 309 | "权": { 310 | "星": "太阳", 311 | "支": "子", 312 | "力度": "10" 313 | }, 314 | "科": { 315 | "星": "文曲", 316 | "支": "寅", 317 | "力度": "90" 318 | }, 319 | "忌": { 320 | "星": "文昌", 321 | "支": "子", 322 | "力度": "100" 323 | } 324 | }, 325 | "自化": "", 326 | "冲化": "", 327 | "星列表": { 328 | "天相": "天相", 329 | "劫煞": "劫煞", 330 | "破碎": "破碎", 331 | "副旬": "副旬" 332 | }, 333 | "星庙旺": { 334 | "天相": { 335 | "庙旺": "陷", 336 | "级别值": "1" 337 | } 338 | } 339 | }, 340 | "未": { 341 | "宫": "官禄", 342 | "宫干": "癸", 343 | "长生": "养", 344 | "生年博士": "官府", 345 | "生年将前": "天煞", 346 | "生年岁前": "龙德", 347 | "大限": "45-54", 348 | "小限": "10,22,34,46,58,70", 349 | "四化": { 350 | "禄": { 351 | "星": "破军", 352 | "支": "亥", 353 | "力度": "60" 354 | }, 355 | "权": { 356 | "星": "巨门", 357 | "支": "辰", 358 | "力度": "90" 359 | }, 360 | "科": { 361 | "星": "太阴", 362 | "支": "寅", 363 | "力度": "90" 364 | }, 365 | "忌": { 366 | "星": "贪狼", 367 | "支": "卯", 368 | "力度": "20" 369 | } 370 | }, 371 | "自化": "", 372 | "冲化": "", 373 | "星列表": { 374 | "廉贞": "廉贞", 375 | "七杀": "七杀", 376 | "大耗": "大耗", 377 | "陀罗": "陀罗", 378 | "天钺": "天钺", 379 | "副截": "副截", 380 | "龙德": "龙德" 381 | }, 382 | "星庙旺": { 383 | "廉贞": { 384 | "庙旺": "庙", 385 | "级别值": "7" 386 | }, 387 | "七杀": { 388 | "庙旺": "庙", 389 | "级别值": "7" 390 | }, 391 | "陀罗": { 392 | "庙旺": "庙", 393 | "级别值": "7" 394 | } 395 | } 396 | }, 397 | "午": { 398 | "宫": "田宅", 399 | "宫干": "壬", 400 | "长生": "胎", 401 | "生年博士": "伏兵", 402 | "生年将前": "灾煞", 403 | "生年岁前": "大耗", 404 | "大限": "35-44", 405 | "小限": "9,21,33,45,57,69", 406 | "四化": { 407 | "禄": { 408 | "星": "天梁", 409 | "支": "午", 410 | "力度": "10" 411 | }, 412 | "权": { 413 | "星": "紫微", 414 | "支": "卯", 415 | "力度": "90" 416 | }, 417 | "科": { 418 | "星": "左辅", 419 | "支": "卯", 420 | "力度": "95" 421 | }, 422 | "忌": { 423 | "星": "武曲", 424 | "支": "亥", 425 | "力度": "80" 426 | } 427 | }, 428 | "自化": { 429 | "禄": { 430 | "星": "天梁", 431 | "支": "午", 432 | "力度": "10" 433 | } 434 | }, 435 | "冲化": "", 436 | "星列表": { 437 | "天梁": "天梁", 438 | "解神": "解神", 439 | "天哭": "天哭", 440 | "天虚": "天虚", 441 | "天福": "天福", 442 | "截空": "截空" 443 | }, 444 | "星庙旺": { 445 | "天梁": { 446 | "庙旺": "庙", 447 | "级别值": "7" 448 | } 449 | } 450 | }, 451 | "戌": { 452 | "宫": "疾厄", 453 | "宫干": "丙", 454 | "长生": "冠带", 455 | "生年博士": "青龙", 456 | "生年将前": "月煞", 457 | "生年岁前": "吊客", 458 | "大限": "75-84", 459 | "小限": "1,13,25,37,49,61", 460 | "四化": { 461 | "禄": { 462 | "星": "天同", 463 | "支": "戌", 464 | "力度": "90" 465 | }, 466 | "权": { 467 | "星": "天机", 468 | "支": "寅", 469 | "力度": "80" 470 | }, 471 | "科": { 472 | "星": "文昌", 473 | "支": "子", 474 | "力度": "80" 475 | }, 476 | "忌": { 477 | "星": "廉贞", 478 | "支": "未", 479 | "力度": "30" 480 | } 481 | }, 482 | "自化": { 483 | "禄": { 484 | "星": "天同", 485 | "支": "戌", 486 | "力度": "90" 487 | } 488 | }, 489 | "冲化": "", 490 | "星列表": { 491 | "天同": "天同", 492 | "凤阁": "凤阁", 493 | "寡宿": "寡宿", 494 | "年解": "年解", 495 | "天贵": "天贵", 496 | "天使": "天使" 497 | }, 498 | "星庙旺": { 499 | "天同": { 500 | "庙旺": "得", 501 | "级别值": "5" 502 | } 503 | } 504 | }, 505 | "寅": { 506 | "宫": "兄弟", 507 | "宫干": "戊", 508 | "长生": "病", 509 | "生年博士": "飞廉", 510 | "生年将前": "岁驿", 511 | "生年岁前": "丧门", 512 | "大限": "115-124", 513 | "小限": "5,17,29,41,53,65", 514 | "四化": { 515 | "禄": { 516 | "星": "贪狼", 517 | "支": "卯", 518 | "力度": "40" 519 | }, 520 | "权": { 521 | "星": "太阴", 522 | "支": "寅", 523 | "力度": "80" 524 | }, 525 | "科": { 526 | "星": "右弼", 527 | "支": "亥", 528 | "力度": "80" 529 | }, 530 | "忌": { 531 | "星": "天机", 532 | "支": "寅", 533 | "力度": "35" 534 | } 535 | }, 536 | "自化": { 537 | "权": { 538 | "星": "太阴", 539 | "支": "寅", 540 | "力度": "80" 541 | }, 542 | "忌": { 543 | "星": "天机", 544 | "支": "寅", 545 | "力度": "35" 546 | } 547 | }, 548 | "冲化": "", 549 | "星列表": { 550 | "天机": "天机", 551 | "太阴": "太阴", 552 | "天月": "天月", 553 | "八座": "八座", 554 | "文曲": "文曲", 555 | "天马": "天马", 556 | "孤辰": "孤辰", 557 | "天厨": "天厨" 558 | }, 559 | "星庙旺": { 560 | "太阴": { 561 | "庙旺": "利", 562 | "级别值": "4" 563 | }, 564 | "天机": { 565 | "庙旺": "庙", 566 | "级别值": "7" 567 | }, 568 | "文曲": { 569 | "庙旺": "庙", 570 | "级别值": "7" 571 | } 572 | } 573 | }, 574 | "酉": { 575 | "宫": "迁移", 576 | "宫干": "乙", 577 | "长生": "沐浴", 578 | "生年博士": "力士", 579 | "生年将前": "咸池", 580 | "生年岁前": "天德", 581 | "大限": "65-74", 582 | "小限": "12,24,36,48,60,72", 583 | "四化": { 584 | "禄": { 585 | "星": "天机", 586 | "支": "寅", 587 | "力度": "40" 588 | }, 589 | "权": { 590 | "星": "天梁", 591 | "支": "午", 592 | "力度": "100" 593 | }, 594 | "科": { 595 | "星": "紫微", 596 | "支": "卯", 597 | "力度": "95" 598 | }, 599 | "忌": { 600 | "星": "太阴", 601 | "支": "寅", 602 | "力度": "35" 603 | } 604 | }, 605 | "自化": "", 606 | "冲化": { 607 | "科": { 608 | "星": "紫微", 609 | "支": "卯", 610 | "力度": "95" 611 | } 612 | }, 613 | "星列表": { 614 | "地劫": "地劫", 615 | "天喜": "天喜", 616 | "咸池": "咸池", 617 | "天德": "天德", 618 | "擎羊": "擎羊" 619 | }, 620 | "星庙旺": { 621 | "地劫": { 622 | "庙旺": "庙", 623 | "级别值": "7" 624 | }, 625 | "擎羊": { 626 | "庙旺": "庙", 627 | "级别值": "7" 628 | } 629 | } 630 | }, 631 | "子": { 632 | "宫": "子女", 633 | "宫干": "戊", 634 | "长生": "帝旺", 635 | "生年博士": "将军", 636 | "生年将前": "将星", 637 | "生年岁前": "岁建", 638 | "大限": "95-104", 639 | "小限": "3,15,27,39,51,63", 640 | "四化": { 641 | "禄": { 642 | "星": "贪狼", 643 | "支": "卯", 644 | "力度": "40" 645 | }, 646 | "权": { 647 | "星": "太阴", 648 | "支": "寅", 649 | "力度": "80" 650 | }, 651 | "科": { 652 | "星": "右弼", 653 | "支": "亥", 654 | "力度": "80" 655 | }, 656 | "忌": { 657 | "星": "天机", 658 | "支": "寅", 659 | "力度": "35" 660 | } 661 | }, 662 | "自化": "", 663 | "冲化": "", 664 | "星列表": { 665 | "太阳": "太阳", 666 | "天姚": "天姚", 667 | "三台": "三台", 668 | "文昌": "文昌", 669 | "封诰": "封诰", 670 | "火星": "火星" 671 | }, 672 | "星庙旺": { 673 | "火星": { 674 | "庙旺": "陷", 675 | "级别值": "1" 676 | }, 677 | "太阳": { 678 | "庙旺": "陷", 679 | "级别值": "1" 680 | }, 681 | "文昌": { 682 | "庙旺": "利", 683 | "级别值": "4" 684 | } 685 | } 686 | } 687 | } 688 | } 689 | 690 | -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/MingPanView.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import android.content.Context 4 | import android.graphics.Canvas 5 | import android.graphics.Color 6 | import android.graphics.Paint 7 | import android.graphics.Paint.Align 8 | import android.graphics.Rect 9 | import android.text.Layout 10 | import android.text.StaticLayout 11 | import android.text.TextPaint 12 | import android.text.TextUtils 13 | import android.util.AttributeSet 14 | import android.view.MotionEvent 15 | import android.view.View 16 | import com.gnss.fortunetelling.bean.ListBean 17 | 18 | class MingPanView @JvmOverloads constructor(context: Context?, 19 | attrs: AttributeSet? = null, 20 | defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) { 21 | private var mPaintLine = Paint() 22 | private val mTextPaint = TextPaint(Paint.ANTI_ALIAS_FLAG) 23 | private var mColor:Int=Color.RED 24 | private var isClick:Boolean= true 25 | init { 26 | init() 27 | } 28 | 29 | private fun init() { 30 | 31 | //加载文本数据 32 | JsonParser.jsonParseWithSrc() 33 | initPaintWithLineAndAppName() 34 | 35 | } 36 | 37 | private fun initPaintWithLineAndAppName() { 38 | mPaintLine.color = Color.BLACK 39 | mPaintLine.strokeWidth = 1f.dp 40 | } 41 | 42 | private fun setTextPaint(align: Align, color: Int, size: Float, isBold: Boolean) { 43 | mTextPaint.textAlign = align 44 | if (color != 0) { 45 | mTextPaint.color = color 46 | } 47 | mTextPaint.textSize = size 48 | mTextPaint.isFakeBoldText = isBold 49 | } 50 | 51 | //TODO 新增点击事件 通过动态设置文字需要展示颜色,重新绘制从而改变了颜色 52 | override fun onTouchEvent(event: MotionEvent): Boolean { 53 | //左边第一条竖线的横坐标x 54 | val width = width 55 | val lineVerticalLeftX = width / 4 56 | val lineVerticalRightX = 3 * lineVerticalLeftX 57 | val lineVerticalCenterX = 2 * lineVerticalLeftX 58 | //上边第一台一条横线的纵坐标y 59 | val height = height 60 | val lineHorizontalTopY = height / 4 61 | val lineHorizontalCenterY = 2 * lineHorizontalTopY 62 | val lineHorizontalBottomY = 3 * lineHorizontalTopY 63 | val rawX = event.x 64 | val rawY = event.y 65 | 66 | when(event.actionMasked){ 67 | MotionEvent.ACTION_UP -> { 68 | //申位 69 | if (rawX>0&&rawX0&&rawY, 196 | offsetX: Float, 197 | offsetY: Float, 198 | lineVerticalLeftX: Int, 199 | widthS: Float, 200 | lineHorizontalTopY: Int) { 201 | setTextPaint(Align.CENTER, Color.GRAY, 12f.dp, true) 202 | canvas.drawText(strs[0], 203 | lineVerticalLeftX - widthS * 4 + paddingStart + offsetX, 204 | lineHorizontalTopY - getTextHeight("耗", mTextPaint) / 2f + paddingTop + offsetY, 205 | mTextPaint) 206 | canvas.drawText(strs[1], 207 | lineVerticalLeftX - widthS * 4.8f + paddingStart + offsetX, 208 | lineHorizontalTopY - getTextHeight("耗", mTextPaint) * 2.8f + paddingTop + offsetY, 209 | mTextPaint) 210 | } 211 | 212 | private fun drawAreaBottomRight(canvas: Canvas, 213 | strs: Array, 214 | offsetX: Float, 215 | offsetY: Float, 216 | lineVerticalLeftX: Int, 217 | lineHorizontalTopY: Int): Float { 218 | val l = "耗" 219 | val widthS: Float = mTextPaint.measureText(l) 220 | drawVerticalTextTop(canvas, 221 | strs[0], 222 | "", 223 | lineVerticalLeftX - widthS + offsetX, 224 | lineHorizontalTopY - getTextHeight(l, mTextPaint) * 2f + paddingTop + offsetY, 225 | Color.GREEN, 226 | 0, 227 | 12f.dp, 228 | 0f) 229 | setTextPaint(Align.CENTER, Color.GRAY, 12f.dp, true) 230 | canvas.drawText(strs[1],lineVerticalLeftX - widthS*1.8f + offsetX, 231 | lineHorizontalTopY - getTextHeight(l, mTextPaint) * 4f + paddingTop + offsetY,mTextPaint) 232 | // drawVerticalTextTop(canvas, 233 | // strs[1], 234 | // "", 235 | // lineVerticalLeftX - widthS + offsetX, 236 | // lineHorizontalTopY - getTextHeight(l, mTextPaint) * 3f + paddingTop + offsetY, 237 | // Color.GRAY, 238 | // 0, 239 | // 12f.dp, 240 | // 0f) 241 | return widthS 242 | } 243 | 244 | private fun drawAreaBottomLeft(canvas: Canvas, 245 | strs: Array, 246 | offsetX: Float, 247 | offsetY: Float, 248 | lineHorizontalTopY: Int) { 249 | setTextPaint(Align.CENTER, Color.GRAY, 8f.dp, true) 250 | canvas.drawText(strs[0], 251 | 10f.dp + paddingStart + offsetX, 252 | +lineHorizontalTopY - getTextHeight("耗", mTextPaint) / 2f + paddingTop + offsetY, 253 | mTextPaint) 254 | canvas.drawText(strs[1], 255 | 10f.dp + paddingStart + offsetX, 256 | lineHorizontalTopY - getTextHeight("耗", mTextPaint) * 2f + paddingTop + offsetY, 257 | mTextPaint) 258 | setTextPaint(Align.CENTER, Color.BLUE, 8f.dp, true) 259 | canvas.drawText(strs[2], 260 | 10f.dp + paddingStart + offsetX, 261 | lineHorizontalTopY - getTextHeight("耗", mTextPaint) * 3.5f + paddingTop + offsetY, 262 | mTextPaint) 263 | } 264 | 265 | private fun drawAreaTop(canvas: Canvas, 266 | content: String, 267 | small: String, 268 | offsetX: Float, 269 | offsetY: Float, 270 | contentColor: Int) { 271 | drawVerticalTextTop(canvas, 272 | content, 273 | small, 274 | offsetX + 10f.dp, 275 | offsetY + 16f.dp, 276 | contentColor, 277 | Color.GRAY, 278 | 12f.dp, 279 | 8f.dp) 280 | } 281 | 282 | private fun drawVerticalTextTop(canvas: Canvas, 283 | content: String, 284 | small: String, 285 | offsetX: Float, 286 | offsetY: Float, 287 | contentColor: Int, 288 | smallColor: Int, 289 | contentSize: Float, 290 | smallSize: Float) { 291 | setTextPaint(Align.CENTER, contentColor, contentSize, true) 292 | 293 | val chars = content.toCharArray() 294 | for (i in chars.indices) { 295 | canvas.drawText(chars[i].toString(), 296 | offsetX + paddingStart, 297 | if (i == 0) offsetY + paddingTop else offsetY + paddingTop + getTextHeight(content, mTextPaint), mTextPaint) 298 | } 299 | if (TextUtils.isEmpty(small)) { 300 | return 301 | } 302 | val textHeight = getTextHeight(content, mTextPaint) 303 | setTextPaint(Align.CENTER, smallColor, smallSize, true) 304 | canvas.drawText(small, offsetX, offsetY + paddingTop + 2 * textHeight, mTextPaint) 305 | } 306 | 307 | private fun centerStr(canvas: Canvas, width: Float, lineHorizontalTopY: Int) { 308 | setTextPaint(Align.CENTER, Color.BLACK, 16f.dp, true) 309 | val appName = resources.getString(R.string.app_name) 310 | canvas.drawText(appName, 311 | width / 2, 312 | lineHorizontalTopY + 10f.dp + getTextHeight(appName, mTextPaint).toFloat(), 313 | mTextPaint) 314 | setTextPaint(Align.CENTER, 0, 12f.dp, false) 315 | val info = JsonParser.mData.其他信息 316 | val centerStrFromText = 317 | "姓名:匿名 ${info.性别} ${info.五行局}\n" + "真太阳时:${info.真太阳时}\n" + "钟表时间:${info.钟表时间}\n" + "农历:${info.年干}" + 318 | "${info.年支}年${info.农历月}月${info.农历日}日 ${info.时干}\n" + "命主:${info.命主} 身主:${info.身主} 子斗:${info.身宫}\n" 319 | val centerStaticLayout = StaticLayout(centerStrFromText, 320 | mTextPaint, 321 | 600, 322 | Layout.Alignment.ALIGN_NORMAL, 323 | 1f, 324 | 0f, 325 | true) 326 | 327 | //移动字符介绍 328 | canvas.save() 329 | canvas.translate(width / 2, 330 | lineHorizontalTopY + 30f.dp + getTextHeight(appName, mTextPaint).toFloat()) 331 | centerStaticLayout.draw(canvas) 332 | canvas.translate((-60f).dp, 80f.dp) 333 | setTextPaint(Align.LEFT, Color.BLACK, 16f.dp, true) 334 | 335 | val centerBig = "四化引动\n禄权科忌的\n变化,即时显示" 336 | val centerBigStaticLayout = 337 | StaticLayout(centerBig, mTextPaint, 600, Layout.Alignment.ALIGN_NORMAL, 1.2f, 0f, true) 338 | centerBigStaticLayout.draw(canvas) 339 | 340 | canvas.translate(60f.dp, 100f.dp) 341 | setTextPaint(Align.CENTER, Color.GRAY, 10f.dp, true) 342 | val bottom = "自化图示—>禄—>权—>科—>忌" 343 | val bottomStaticLayout = 344 | StaticLayout(bottom, mTextPaint, 400, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, true) 345 | bottomStaticLayout.draw(canvas) 346 | canvas.restore() 347 | } 348 | 349 | private fun getTextHeight(text: String, paint: Paint): Int { 350 | val rect = Rect() 351 | paint.getTextBounds(text, 0, text.length, rect) 352 | return rect.height() 353 | } 354 | 355 | private fun drawHorizontalLines(canvas: Canvas, 356 | width: Int, 357 | lineVerticalLeftX: Int, 358 | lineVerticalRightX: Int, 359 | height: Int, 360 | lineHorizontalTopY: Int, 361 | lineHorizontalCenterY: Int, 362 | lineHorizontalBottomY: Int) { 363 | canvas.drawLine(0f, 0f, width.toFloat(), 0f, mPaintLine) 364 | canvas.drawLine(0f, 365 | lineHorizontalTopY.toFloat(), 366 | width.toFloat(), 367 | lineHorizontalTopY.toFloat(), 368 | mPaintLine) 369 | //横向 最左边分割线 370 | canvas.drawLine(0f, 371 | lineHorizontalCenterY.toFloat(), 372 | lineVerticalLeftX.toFloat(), 373 | lineHorizontalCenterY.toFloat(), 374 | mPaintLine) 375 | //最右边分割线 376 | canvas.drawLine(lineVerticalRightX.toFloat(), 377 | lineHorizontalCenterY.toFloat(), 378 | width.toFloat(), 379 | lineHorizontalCenterY.toFloat(), 380 | mPaintLine) 381 | canvas.drawLine(0f, 382 | lineHorizontalBottomY.toFloat(), 383 | width.toFloat(), 384 | lineHorizontalBottomY.toFloat(), 385 | mPaintLine) 386 | canvas.drawLine(0f, height.toFloat(), width.toFloat(), height.toFloat(), mPaintLine) 387 | } 388 | 389 | private fun drawVerticalLines(canvas: Canvas, 390 | lineVerticalLeftX: Int, 391 | lineVerticalRightX: Int, 392 | lineVerticalCenterX: Int, 393 | height: Int, 394 | lineHorizontalTopY: Int, 395 | lineHorizontalBottomY: Int) { 396 | canvas.drawLine(0f, 0f, 0f, height.toFloat(), mPaintLine) 397 | canvas.drawLine(lineVerticalLeftX.toFloat(), 398 | 0f, 399 | lineVerticalLeftX.toFloat(), 400 | height.toFloat(), 401 | mPaintLine) 402 | //竖向线排列中间的一条top 403 | canvas.drawLine(lineVerticalCenterX.toFloat(), 404 | 0f, 405 | lineVerticalCenterX.toFloat(), 406 | lineHorizontalTopY.toFloat(), 407 | mPaintLine) 408 | //竖向线排列中间的一条bottom 409 | canvas.drawLine(lineVerticalCenterX.toFloat(), 410 | lineHorizontalBottomY.toFloat(), 411 | lineVerticalCenterX.toFloat(), 412 | height.toFloat(), 413 | mPaintLine) 414 | canvas.drawLine(lineVerticalRightX.toFloat(), 415 | 0f, 416 | lineVerticalRightX.toFloat(), 417 | height.toFloat(), 418 | mPaintLine) 419 | canvas.drawLine(width.toFloat(), 0f, width.toFloat(), height.toFloat(), mPaintLine) 420 | } 421 | 422 | 423 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/bean/ResultBean.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling.bean 2 | 3 | data class ResultBean( 4 | val 其他信息: 其他信息, 5 | val 十二宫信息: 十二宫信息 6 | ) 7 | 8 | 9 | 10 | data class 其他信息( 11 | val 五行局: String, 12 | val 农历年: String, 13 | val 农历日: String, 14 | val 农历是否闰月: String, 15 | val 农历月: String, 16 | val 命主: String, 17 | val 年干: String, 18 | val 年支: String, 19 | val 性别: String, 20 | val 日干: String, 21 | val 日支: String, 22 | val 时干: String, 23 | val 时支: String, 24 | val 月干: String, 25 | val 月支: String, 26 | val 真太阳时: String, 27 | val 经度: String, 28 | val 身主: String, 29 | val 身宫: String, 30 | val 钟表时间: String 31 | ) 32 | 33 | data class 十二宫信息( 34 | val 丑: 丑, 35 | val 亥: 亥, 36 | val 午: 午, 37 | val 卯: 卯, 38 | val 子: 子, 39 | val 寅: 寅, 40 | val 巳: 巳, 41 | val 戌: 戌, 42 | val 未: 未, 43 | val 申: 申, 44 | val 辰: 辰, 45 | val 酉: 酉 46 | ) 47 | 48 | data class 丑( 49 | val 冲化: String, 50 | val 四化: 四化, 51 | val 大限: String, 52 | val 宫: String, 53 | val 宫干: String, 54 | val 小限: String, 55 | val 星列表: 星列表, 56 | val 星庙旺: 星庙旺, 57 | val 生年博士: String, 58 | val 生年将前: String, 59 | val 生年岁前: String, 60 | val 自化: String, 61 | val 长生: String 62 | ) 63 | 64 | data class 亥( 65 | val 冲化: String, 66 | val 四化: 四化X, 67 | val 大限: String, 68 | val 宫: String, 69 | val 宫干: String, 70 | val 小限: String, 71 | val 星列表: 星列表X, 72 | val 星庙旺: 星庙旺X, 73 | val 生年博士: String, 74 | val 生年将前: String, 75 | val 生年岁前: String, 76 | val 自化: String, 77 | val 长生: String 78 | ) 79 | 80 | data class 午( 81 | val 冲化: String, 82 | val 四化: 四化XX, 83 | val 大限: String, 84 | val 宫: String, 85 | val 宫干: String, 86 | val 小限: String, 87 | val 星列表: 星列表XX, 88 | val 星庙旺: 星庙旺XX, 89 | val 生年博士: String, 90 | val 生年将前: String, 91 | val 生年岁前: String, 92 | val 自化: 自化, 93 | val 长生: String 94 | ) 95 | 96 | data class 卯( 97 | val 冲化: String, 98 | val 四化: 四化XXX, 99 | val 大限: String, 100 | val 宫: String, 101 | val 宫干: String, 102 | val 小限: String, 103 | val 星列表: 星列表XXX, 104 | val 星庙旺: 星庙旺XXX, 105 | val 生年博士: String, 106 | val 生年将前: String, 107 | val 生年岁前: String, 108 | val 自化: 自化X, 109 | val 长生: String 110 | ) 111 | 112 | data class 子( 113 | val 冲化: String, 114 | val 四化: 四化XXXX, 115 | val 大限: String, 116 | val 宫: String, 117 | val 宫干: String, 118 | val 小限: String, 119 | val 星列表: 星列表XXXX, 120 | val 星庙旺: 星庙旺XXXX, 121 | val 生年博士: String, 122 | val 生年将前: String, 123 | val 生年岁前: String, 124 | val 自化: String, 125 | val 长生: String 126 | ) 127 | 128 | data class 寅( 129 | val 冲化: String, 130 | val 四化: 四化XXXXX, 131 | val 大限: String, 132 | val 宫: String, 133 | val 宫干: String, 134 | val 小限: String, 135 | val 星列表: 星列表XXXXX, 136 | val 星庙旺: 星庙旺XXXXX, 137 | val 生年博士: String, 138 | val 生年将前: String, 139 | val 生年岁前: String, 140 | val 自化: 自化XX, 141 | val 长生: String 142 | ) 143 | 144 | data class 巳( 145 | val 冲化: String, 146 | val 四化: 四化XXXXXX, 147 | val 大限: String, 148 | val 宫: String, 149 | val 宫干: String, 150 | val 小限: String, 151 | val 星列表: 星列表XXXXXX, 152 | val 星庙旺: 星庙旺XXXXXX, 153 | val 生年博士: String, 154 | val 生年将前: String, 155 | val 生年岁前: String, 156 | val 自化: String, 157 | val 长生: String 158 | ) 159 | 160 | data class 戌( 161 | val 冲化: String, 162 | val 四化: 四化XXXXXXX, 163 | val 大限: String, 164 | val 宫: String, 165 | val 宫干: String, 166 | val 小限: String, 167 | val 星列表: 星列表XXXXXXX, 168 | val 星庙旺: 星庙旺XXXXXXX, 169 | val 生年博士: String, 170 | val 生年将前: String, 171 | val 生年岁前: String, 172 | val 自化: 自化XXX, 173 | val 长生: String 174 | ) 175 | 176 | data class 未( 177 | val 冲化: String, 178 | val 四化: 四化XXXXXXXX, 179 | val 大限: String, 180 | val 宫: String, 181 | val 宫干: String, 182 | val 小限: String, 183 | val 星列表: 星列表XXXXXXXX, 184 | val 星庙旺: 星庙旺XXXXXXXX, 185 | val 生年博士: String, 186 | val 生年将前: String, 187 | val 生年岁前: String, 188 | val 自化: String, 189 | val 长生: String 190 | ) 191 | 192 | data class 申( 193 | val 冲化: String, 194 | val 四化: 四化XXXXXXXXX, 195 | val 大限: String, 196 | val 宫: String, 197 | val 宫干: String, 198 | val 小限: String, 199 | val 星列表: 星列表XXXXXXXXX, 200 | val 星庙旺: 星庙旺XXXXXXXXX, 201 | val 生年博士: String, 202 | val 生年将前: String, 203 | val 生年岁前: String, 204 | val 自化: String, 205 | val 长生: String 206 | ) 207 | 208 | data class 辰( 209 | val 冲化: 冲化, 210 | val 四化: 四化XXXXXXXXXX, 211 | val 大限: String, 212 | val 宫: String, 213 | val 宫干: String, 214 | val 小限: String, 215 | val 星列表: 星列表XXXXXXXXXX, 216 | val 星庙旺: 星庙旺XXXXXXXXXX, 217 | val 生年博士: String, 218 | val 生年将前: String, 219 | val 生年岁前: String, 220 | val 自化: String, 221 | val 长生: String 222 | ) 223 | 224 | data class 酉( 225 | val 冲化: 冲化X, 226 | val 四化: 四化XXXXXXXXXXX, 227 | val 大限: String, 228 | val 宫: String, 229 | val 宫干: String, 230 | val 小限: String, 231 | val 星列表: 星列表XXXXXXXXXXX, 232 | val 星庙旺: 星庙旺XXXXXXXXXXX, 233 | val 生年博士: String, 234 | val 生年将前: String, 235 | val 生年岁前: String, 236 | val 自化: String, 237 | val 长生: String 238 | ) 239 | 240 | data class 四化( 241 | val 忌: 忌, 242 | val 权: 权, 243 | val 禄: 禄, 244 | val 科: 科 245 | ) 246 | 247 | data class 星列表( 248 | val 地空: String, 249 | val 天府: String, 250 | val 天空: String, 251 | val 天魁: String 252 | ) 253 | 254 | data class 星庙旺( 255 | val 地空: 地空, 256 | val 天府: 天府 257 | ) 258 | 259 | data class 忌( 260 | val 力度: String, 261 | val 支: String, 262 | val 星: String 263 | ) 264 | 265 | data class 权( 266 | val 力度: String, 267 | val 支: String, 268 | val 星: String 269 | ) 270 | 271 | data class 禄( 272 | val 力度: String, 273 | val 支: String, 274 | val 星: String 275 | ) 276 | 277 | data class 科( 278 | val 力度: String, 279 | val 支: String, 280 | val 星: String 281 | ) 282 | 283 | data class 地空( 284 | val 庙旺: String, 285 | val 级别值: String 286 | ) 287 | 288 | data class 天府( 289 | val 庙旺: String, 290 | val 级别值: String 291 | ) 292 | 293 | data class 四化X( 294 | val 忌: 忌X, 295 | val 权: 权X, 296 | val 禄: 禄X, 297 | val 科: 科X 298 | ) 299 | 300 | data class 星列表X( 301 | val 右弼: String, 302 | val 天官: String, 303 | val 天寿: String, 304 | val 天巫: String, 305 | val 武曲: String, 306 | val 破军: String 307 | ) 308 | 309 | data class 星庙旺X( 310 | val 右弼: 右弼, 311 | val 武曲: 武曲, 312 | val 破军: 破军 313 | ) 314 | 315 | data class 忌X( 316 | val 力度: String, 317 | val 支: String, 318 | val 星: String 319 | ) 320 | 321 | data class 权X( 322 | val 力度: String, 323 | val 支: String, 324 | val 星: String 325 | ) 326 | 327 | data class 禄X( 328 | val 力度: String, 329 | val 支: String, 330 | val 星: String 331 | ) 332 | 333 | data class 科X( 334 | val 力度: String, 335 | val 支: String, 336 | val 星: String 337 | ) 338 | 339 | data class 右弼( 340 | val 庙旺: String, 341 | val 级别值: String 342 | ) 343 | 344 | data class 武曲( 345 | val 庙旺: String, 346 | val 级别值: String 347 | ) 348 | 349 | data class 破军( 350 | val 庙旺: String, 351 | val 级别值: String 352 | ) 353 | 354 | data class 四化XX( 355 | val 忌: 忌XX, 356 | val 权: 权XX, 357 | val 禄: 禄XX, 358 | val 科: 科XX 359 | ) 360 | 361 | data class 星列表XX( 362 | val 天哭: String, 363 | val 天梁: String, 364 | val 天福: String, 365 | val 天虚: String, 366 | val 截空: String, 367 | val 解神: String 368 | ) 369 | 370 | data class 星庙旺XX( 371 | val 天梁: 天梁 372 | ) 373 | 374 | data class 自化( 375 | val 禄: 禄XXX 376 | ) 377 | 378 | data class 忌XX( 379 | val 力度: String, 380 | val 支: String, 381 | val 星: String 382 | ) 383 | 384 | data class 权XX( 385 | val 力度: String, 386 | val 支: String, 387 | val 星: String 388 | ) 389 | 390 | data class 禄XX( 391 | val 力度: String, 392 | val 支: String, 393 | val 星: String 394 | ) 395 | 396 | data class 科XX( 397 | val 力度: String, 398 | val 支: String, 399 | val 星: String 400 | ) 401 | 402 | data class 天梁( 403 | val 庙旺: String, 404 | val 级别值: String 405 | ) 406 | 407 | data class 禄XXX( 408 | val 力度: String, 409 | val 支: String, 410 | val 星: String 411 | ) 412 | 413 | data class 四化XXX( 414 | val 忌: 忌XXX, 415 | val 权: 权XXX, 416 | val 禄: 禄XXXX, 417 | val 科: 科XXX 418 | ) 419 | 420 | data class 星列表XXX( 421 | val 天才: String, 422 | val 左辅: String, 423 | val 紫微: String, 424 | val 红鸾: String, 425 | val 贪狼: String 426 | ) 427 | 428 | data class 星庙旺XXX( 429 | val 左辅: 左辅, 430 | val 紫微: 紫微, 431 | val 贪狼: 贪狼 432 | ) 433 | 434 | data class 自化X( 435 | val 权: 权XXXX 436 | ) 437 | 438 | data class 忌XXX( 439 | val 力度: String, 440 | val 支: String, 441 | val 星: String 442 | ) 443 | 444 | data class 权XXX( 445 | val 力度: String, 446 | val 支: String, 447 | val 星: String 448 | ) 449 | 450 | data class 禄XXXX( 451 | val 力度: String, 452 | val 支: String, 453 | val 星: String 454 | ) 455 | 456 | data class 科XXX( 457 | val 力度: String, 458 | val 支: String, 459 | val 星: String 460 | ) 461 | 462 | data class 左辅( 463 | val 庙旺: String, 464 | val 级别值: String 465 | ) 466 | 467 | data class 紫微( 468 | val 庙旺: String, 469 | val 级别值: String 470 | ) 471 | 472 | data class 贪狼( 473 | val 庙旺: String, 474 | val 级别值: String 475 | ) 476 | 477 | data class 权XXXX( 478 | val 力度: String, 479 | val 支: String, 480 | val 星: String 481 | ) 482 | 483 | data class 四化XXXX( 484 | val 忌: 忌XXXX, 485 | val 权: 权XXXXX, 486 | val 禄: 禄XXXXX, 487 | val 科: 科XXXX 488 | ) 489 | 490 | data class 星列表XXXX( 491 | val 三台: String, 492 | val 天姚: String, 493 | val 太阳: String, 494 | val 封诰: String, 495 | val 文昌: String, 496 | val 火星: String 497 | ) 498 | 499 | data class 星庙旺XXXX( 500 | val 太阳: 太阳, 501 | val 文昌: 文昌, 502 | val 火星: 火星 503 | ) 504 | 505 | data class 忌XXXX( 506 | val 力度: String, 507 | val 支: String, 508 | val 星: String 509 | ) 510 | 511 | data class 权XXXXX( 512 | val 力度: String, 513 | val 支: String, 514 | val 星: String 515 | ) 516 | 517 | data class 禄XXXXX( 518 | val 力度: String, 519 | val 支: String, 520 | val 星: String 521 | ) 522 | 523 | data class 科XXXX( 524 | val 力度: String, 525 | val 支: String, 526 | val 星: String 527 | ) 528 | 529 | data class 太阳( 530 | val 庙旺: String, 531 | val 级别值: String 532 | ) 533 | 534 | data class 文昌( 535 | val 庙旺: String, 536 | val 级别值: String 537 | ) 538 | 539 | data class 火星( 540 | val 庙旺: String, 541 | val 级别值: String 542 | ) 543 | 544 | data class 四化XXXXX( 545 | val 忌: 忌XXXXX, 546 | val 权: 权XXXXXX, 547 | val 禄: 禄XXXXXX, 548 | val 科: 科XXXXX 549 | ) 550 | 551 | data class 星列表XXXXX( 552 | val 八座: String, 553 | val 天厨: String, 554 | val 天月: String, 555 | val 天机: String, 556 | val 天马: String, 557 | val 太阴: String, 558 | val 孤辰: String, 559 | val 文曲: String 560 | ) 561 | 562 | data class 星庙旺XXXXX( 563 | val 天机: 天机, 564 | val 太阴: 太阴, 565 | val 文曲: 文曲 566 | ) 567 | 568 | data class 自化XX( 569 | val 忌: 忌XXXXXX, 570 | val 权: 权XXXXXXX 571 | ) 572 | 573 | data class 忌XXXXX( 574 | val 力度: String, 575 | val 支: String, 576 | val 星: String 577 | ) 578 | 579 | data class 权XXXXXX( 580 | val 力度: String, 581 | val 支: String, 582 | val 星: String 583 | ) 584 | 585 | data class 禄XXXXXX( 586 | val 力度: String, 587 | val 支: String, 588 | val 星: String 589 | ) 590 | 591 | data class 科XXXXX( 592 | val 力度: String, 593 | val 支: String, 594 | val 星: String 595 | ) 596 | 597 | data class 天机( 598 | val 庙旺: String, 599 | val 级别值: String 600 | ) 601 | 602 | data class 太阴( 603 | val 庙旺: String, 604 | val 级别值: String 605 | ) 606 | 607 | data class 文曲( 608 | val 庙旺: String, 609 | val 级别值: String 610 | ) 611 | 612 | data class 忌XXXXXX( 613 | val 力度: String, 614 | val 支: String, 615 | val 星: String 616 | ) 617 | 618 | data class 权XXXXXXX( 619 | val 力度: String, 620 | val 支: String, 621 | val 星: String 622 | ) 623 | 624 | data class 四化XXXXXX( 625 | val 忌: 忌XXXXXXX, 626 | val 权: 权XXXXXXXX, 627 | val 禄: 禄XXXXXXX, 628 | val 科: 科XXXXXX 629 | ) 630 | 631 | data class 星列表XXXXXX( 632 | val 副旬: String, 633 | val 劫煞: String, 634 | val 天相: String, 635 | val 破碎: String 636 | ) 637 | 638 | data class 星庙旺XXXXXX( 639 | val 天相: 天相 640 | ) 641 | 642 | data class 忌XXXXXXX( 643 | val 力度: String, 644 | val 支: String, 645 | val 星: String 646 | ) 647 | 648 | data class 权XXXXXXXX( 649 | val 力度: String, 650 | val 支: String, 651 | val 星: String 652 | ) 653 | 654 | data class 禄XXXXXXX( 655 | val 力度: String, 656 | val 支: String, 657 | val 星: String 658 | ) 659 | 660 | data class 科XXXXXX( 661 | val 力度: String, 662 | val 支: String, 663 | val 星: String 664 | ) 665 | 666 | data class 天相( 667 | val 庙旺: String, 668 | val 级别值: String 669 | ) 670 | 671 | data class 四化XXXXXXX( 672 | val 忌: 忌XXXXXXXX, 673 | val 权: 权XXXXXXXXX, 674 | val 禄: 禄XXXXXXXX, 675 | val 科: 科XXXXXXX 676 | ) 677 | 678 | data class 星列表XXXXXXX( 679 | val 凤阁: String, 680 | val 天使: String, 681 | val 天同: String, 682 | val 天贵: String, 683 | val 寡宿: String, 684 | val 年解: String 685 | ) 686 | 687 | data class 星庙旺XXXXXXX( 688 | val 天同: 天同 689 | ) 690 | 691 | data class 自化XXX( 692 | val 禄: 禄XXXXXXXXX 693 | ) 694 | 695 | data class 忌XXXXXXXX( 696 | val 力度: String, 697 | val 支: String, 698 | val 星: String 699 | ) 700 | 701 | data class 权XXXXXXXXX( 702 | val 力度: String, 703 | val 支: String, 704 | val 星: String 705 | ) 706 | 707 | data class 禄XXXXXXXX( 708 | val 力度: String, 709 | val 支: String, 710 | val 星: String 711 | ) 712 | 713 | data class 科XXXXXXX( 714 | val 力度: String, 715 | val 支: String, 716 | val 星: String 717 | ) 718 | 719 | data class 天同( 720 | val 庙旺: String, 721 | val 级别值: String 722 | ) 723 | 724 | data class 禄XXXXXXXXX( 725 | val 力度: String, 726 | val 支: String, 727 | val 星: String 728 | ) 729 | 730 | data class 四化XXXXXXXX( 731 | val 忌: 忌XXXXXXXXX, 732 | val 权: 权XXXXXXXXXX, 733 | val 禄: 禄XXXXXXXXXX, 734 | val 科: 科XXXXXXXX 735 | ) 736 | 737 | data class 星列表XXXXXXXX( 738 | val 七杀: String, 739 | val 副截: String, 740 | val 大耗: String, 741 | val 天钺: String, 742 | val 廉贞: String, 743 | val 陀罗: String, 744 | val 龙德: String 745 | ) 746 | 747 | data class 星庙旺XXXXXXXX( 748 | val 七杀: 七杀, 749 | val 廉贞: 廉贞, 750 | val 陀罗: 陀罗 751 | ) 752 | 753 | data class 忌XXXXXXXXX( 754 | val 力度: String, 755 | val 支: String, 756 | val 星: String 757 | ) 758 | 759 | data class 权XXXXXXXXXX( 760 | val 力度: String, 761 | val 支: String, 762 | val 星: String 763 | ) 764 | 765 | data class 禄XXXXXXXXXX( 766 | val 力度: String, 767 | val 支: String, 768 | val 星: String 769 | ) 770 | 771 | data class 科XXXXXXXX( 772 | val 力度: String, 773 | val 支: String, 774 | val 星: String 775 | ) 776 | 777 | data class 七杀( 778 | val 庙旺: String, 779 | val 级别值: String 780 | ) 781 | 782 | data class 廉贞( 783 | val 庙旺: String, 784 | val 级别值: String 785 | ) 786 | 787 | data class 陀罗( 788 | val 庙旺: String, 789 | val 级别值: String 790 | ) 791 | 792 | data class 四化XXXXXXXXX( 793 | val 忌: 忌XXXXXXXXXX, 794 | val 权: 权XXXXXXXXXXX, 795 | val 禄: 禄XXXXXXXXXXX, 796 | val 科: 科XXXXXXXXX 797 | ) 798 | 799 | data class 星列表XXXXXXXXX( 800 | val 天伤: String, 801 | val 天刑: String, 802 | val 恩光: String, 803 | val 禄存: String, 804 | val 蜚廉: String, 805 | val 铃星: String 806 | ) 807 | 808 | data class 星庙旺XXXXXXXXX( 809 | val 铃星: 铃星 810 | ) 811 | 812 | data class 忌XXXXXXXXXX( 813 | val 力度: String, 814 | val 支: String, 815 | val 星: String 816 | ) 817 | 818 | data class 权XXXXXXXXXXX( 819 | val 力度: String, 820 | val 支: String, 821 | val 星: String 822 | ) 823 | 824 | data class 禄XXXXXXXXXXX( 825 | val 力度: String, 826 | val 支: String, 827 | val 星: String 828 | ) 829 | 830 | data class 科XXXXXXXXX( 831 | val 力度: String, 832 | val 支: String, 833 | val 星: String 834 | ) 835 | 836 | data class 铃星( 837 | val 庙旺: String, 838 | val 级别值: String 839 | ) 840 | 841 | data class 冲化( 842 | val 忌: 忌XXXXXXXXXXX 843 | ) 844 | 845 | data class 四化XXXXXXXXXX( 846 | val 忌: 忌XXXXXXXXXXXX, 847 | val 权: 权XXXXXXXXXXXX, 848 | val 禄: 禄XXXXXXXXXXXX, 849 | val 科: 科XXXXXXXXXX 850 | ) 851 | 852 | data class 星列表XXXXXXXXXX( 853 | val 华盖: String, 854 | val 台辅: String, 855 | val 巨门: String, 856 | val 旬空: String, 857 | val 阴煞: String, 858 | val 龙池: String 859 | ) 860 | 861 | data class 星庙旺XXXXXXXXXX( 862 | val 巨门: 巨门 863 | ) 864 | 865 | data class 忌XXXXXXXXXXX( 866 | val 力度: String, 867 | val 支: String, 868 | val 星: String 869 | ) 870 | 871 | data class 忌XXXXXXXXXXXX( 872 | val 力度: String, 873 | val 支: String, 874 | val 星: String 875 | ) 876 | 877 | data class 权XXXXXXXXXXXX( 878 | val 力度: String, 879 | val 支: String, 880 | val 星: String 881 | ) 882 | 883 | data class 禄XXXXXXXXXXXX( 884 | val 力度: String, 885 | val 支: String, 886 | val 星: String 887 | ) 888 | 889 | data class 科XXXXXXXXXX( 890 | val 力度: String, 891 | val 支: String, 892 | val 星: String 893 | ) 894 | 895 | data class 巨门( 896 | val 庙旺: String, 897 | val 级别值: String 898 | ) 899 | 900 | data class 冲化X( 901 | val 科: 科XXXXXXXXXXX 902 | ) 903 | 904 | data class 四化XXXXXXXXXXX( 905 | val 忌: 忌XXXXXXXXXXXXX, 906 | val 权: 权XXXXXXXXXXXXX, 907 | val 禄: 禄XXXXXXXXXXXXX, 908 | val 科: 科XXXXXXXXXXXX 909 | ) 910 | 911 | data class 星列表XXXXXXXXXXX( 912 | val 咸池: String, 913 | val 地劫: String, 914 | val 天喜: String, 915 | val 天德: String, 916 | val 擎羊: String 917 | ) 918 | 919 | data class 星庙旺XXXXXXXXXXX( 920 | val 地劫: 地劫, 921 | val 擎羊: 擎羊 922 | ) 923 | 924 | data class 科XXXXXXXXXXX( 925 | val 力度: String, 926 | val 支: String, 927 | val 星: String 928 | ) 929 | 930 | data class 忌XXXXXXXXXXXXX( 931 | val 力度: String, 932 | val 支: String, 933 | val 星: String 934 | ) 935 | 936 | data class 权XXXXXXXXXXXXX( 937 | val 力度: String, 938 | val 支: String, 939 | val 星: String 940 | ) 941 | 942 | data class 禄XXXXXXXXXXXXX( 943 | val 力度: String, 944 | val 支: String, 945 | val 星: String 946 | ) 947 | 948 | data class 科XXXXXXXXXXXX( 949 | val 力度: String, 950 | val 支: String, 951 | val 星: String 952 | ) 953 | 954 | data class 地劫( 955 | val 庙旺: String, 956 | val 级别值: String 957 | ) 958 | 959 | data class 擎羊( 960 | val 庙旺: String, 961 | val 级别值: String 962 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/gnss/fortunetelling/JsonParser.kt: -------------------------------------------------------------------------------- 1 | package com.gnss.fortunetelling 2 | 3 | import android.util.Log 4 | import com.gnss.fortunetelling.bean.ListBean 5 | import com.gnss.fortunetelling.bean.ResultBean 6 | import com.gnss.fortunetelling.bean.Stars 7 | import com.google.gson.Gson 8 | import java.io.IOException 9 | import java.io.InputStream 10 | import java.util.* 11 | 12 | class JsonParser { 13 | 14 | companion object { 15 | lateinit var mData: ResultBean 16 | 17 | fun jsonParseWithSrc(): ResultBean { 18 | val str = readAssetsTxt("src.json") 19 | 20 | Log.d("测试 ", str!!) 21 | val data = Gson().fromJson(str) 22 | Log.d("测试1", 23 | "返回结果 ${data.其他信息.性别} ${data.其他信息.五行局} ${data.其他信息.农历年} " + "${data.其他信息.农历日} ${data.其他信息.农历是否闰月}") 24 | mData = data 25 | return data 26 | } 27 | 28 | fun readAssetsTxt(fileName: String): String? { 29 | var inputStream: InputStream? = null 30 | try { 31 | inputStream = App.getContext().assets.open("$fileName") 32 | return convertStreamToString(inputStream) as String 33 | } catch (e: Exception) { 34 | e.printStackTrace() 35 | } finally { 36 | inputStream?.close() 37 | } 38 | return "读取失败,请检查文件名称及文件是否存在!" 39 | } 40 | 41 | /** 42 | * input 流转换为字符串 43 | */ 44 | fun convertStreamToString(input: InputStream): String? { 45 | var s: String? = null 46 | try { 47 | //格式转换 48 | val scanner = Scanner(input, "UTF-8").useDelimiter("\\A") 49 | if (scanner.hasNext()) { 50 | s = scanner.next() 51 | } 52 | input.close() 53 | } catch (e: IOException) { 54 | e.printStackTrace() 55 | } 56 | return s 57 | } 58 | 59 | //读取十二宫位数据并加工处理以便展示出来 60 | //申 61 | fun loadShen(): ListBean { 62 | val elevenInfo = mData.十二宫信息 63 | val shen = elevenInfo.申 64 | val startList = shen.星列表 65 | val starSmall = shen.星庙旺 66 | val stars = listOf(Stars(startList.天伤, ""), 67 | Stars(startList.天刑, ""), 68 | Stars(startList.恩光, ""), 69 | Stars(startList.禄存, ""), 70 | Stars(startList.蜚廉, ""), 71 | Stars(startList.铃星, starSmall.铃星.庙旺)) 72 | val bottomLeft = listOf(shen.生年博士, shen.生年将前, shen.生年岁前) 73 | val bottomRight = listOf("辛巳", shen.长生) 74 | val bottomCenter = listOf(shen.宫, shen.大限) 75 | val smallLimit = shen.小限.split(",") 76 | val limitSb = StringBuilder() 77 | for (index in smallLimit.indices) { 78 | when (index) { 79 | 2 -> { 80 | limitSb.append("${smallLimit[index]}\n") 81 | } 82 | smallLimit.size - 1 -> { 83 | limitSb.append(smallLimit[index]) 84 | } 85 | else -> { 86 | limitSb.append("${smallLimit[index]},") 87 | } 88 | } 89 | } 90 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 91 | } 92 | 93 | //酉 94 | fun loadYou(): ListBean { 95 | val elevenInfo = mData.十二宫信息 96 | val you = elevenInfo.酉 97 | val startList = you.星列表 98 | val starSmall = you.星庙旺 99 | val stars = listOf(Stars(startList.咸池, ""), 100 | Stars(startList.地劫, starSmall.地劫.庙旺), 101 | Stars(startList.天喜, ""), 102 | Stars(startList.天德, ""), 103 | Stars(startList.擎羊, starSmall.擎羊.庙旺)) 104 | val bottomLeft = listOf(you.生年博士, you.生年将前, you.生年岁前) 105 | val bottomRight = listOf("辛巳", you.长生) 106 | val bottomCenter = listOf(you.宫, you.大限) 107 | val smallLimit = you.小限.split(",") 108 | val limitSb = StringBuilder() 109 | for (index in smallLimit.indices) { 110 | when (index) { 111 | 2 -> { 112 | limitSb.append("${smallLimit[index]}\n") 113 | } 114 | smallLimit.size - 1 -> { 115 | limitSb.append(smallLimit[index]) 116 | } 117 | else -> { 118 | limitSb.append("${smallLimit[index]},") 119 | } 120 | } 121 | } 122 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 123 | } 124 | 125 | /** 126 | * 戌 127 | */ 128 | fun loadXu(): ListBean { 129 | val elevenInfo = mData.十二宫信息 130 | val xu = elevenInfo.戌 131 | val startList = xu.星列表 132 | val starSmall = xu.星庙旺 133 | val stars = listOf(Stars(startList.凤阁, ""), 134 | Stars(startList.天使, ""), 135 | Stars(startList.天同, starSmall.天同.庙旺), 136 | Stars(startList.天贵, ""), 137 | Stars(startList.寡宿, ""), 138 | Stars(startList.年解, "")) 139 | val bottomLeft = listOf(xu.生年博士, xu.生年将前, xu.生年岁前) 140 | val bottomRight = listOf("辛巳", xu.长生) 141 | val bottomCenter = listOf(xu.宫, xu.大限) 142 | val smallLimit = xu.小限.split(",") 143 | val limitSb = StringBuilder() 144 | for (index in smallLimit.indices) { 145 | when (index) { 146 | 2 -> { 147 | limitSb.append("${smallLimit[index]}\n") 148 | } 149 | smallLimit.size - 1 -> { 150 | limitSb.append(smallLimit[index]) 151 | } 152 | else -> { 153 | limitSb.append("${smallLimit[index]},") 154 | } 155 | } 156 | } 157 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 158 | } 159 | 160 | /** 161 | * 亥 162 | */ 163 | fun loadHai(): ListBean { 164 | val elevenInfo = mData.十二宫信息 165 | val hai = elevenInfo.亥 166 | val startList = hai.星列表 167 | val starSmall = hai.星庙旺 168 | val stars = listOf(Stars(startList.右弼, starSmall.右弼.庙旺), 169 | Stars(startList.天官, ""), 170 | Stars(startList.天寿, ""), 171 | Stars(startList.天巫, ""), 172 | Stars(startList.武曲, starSmall.武曲.庙旺), 173 | Stars(startList.破军, starSmall.破军.庙旺)) 174 | val bottomLeft = listOf(hai.生年博士, hai.生年将前, hai.生年岁前) 175 | val bottomRight = listOf("辛巳", hai.长生) 176 | val bottomCenter = listOf(hai.宫, hai.大限) 177 | val smallLimit = hai.小限.split(",") 178 | val limitSb = StringBuilder() 179 | for (index in smallLimit.indices) { 180 | when (index) { 181 | 2 -> { 182 | limitSb.append("${smallLimit[index]}\n") 183 | } 184 | smallLimit.size - 1 -> { 185 | limitSb.append(smallLimit[index]) 186 | } 187 | else -> { 188 | limitSb.append("${smallLimit[index]},") 189 | } 190 | } 191 | } 192 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 193 | } 194 | 195 | /** 196 | * 子 197 | */ 198 | fun loadZi(): ListBean { 199 | val elevenInfo = mData.十二宫信息 200 | val zi = elevenInfo.子 201 | val startList = zi.星列表 202 | val starSmall = zi.星庙旺 203 | val stars = listOf(Stars(startList.三台, ""), 204 | Stars(startList.天姚, ""), 205 | Stars(startList.太阳, starSmall.太阳.庙旺), 206 | Stars(startList.封诰, ""), 207 | Stars(startList.文昌, starSmall.文昌.庙旺), 208 | Stars(startList.火星, starSmall.火星.庙旺)) 209 | val bottomLeft = listOf(zi.生年博士, zi.生年将前, zi.生年岁前) 210 | val bottomRight = listOf("辛巳", zi.长生) 211 | val bottomCenter = listOf(zi.宫, zi.大限) 212 | val smallLimit = zi.小限.split(",") 213 | val limitSb = StringBuilder() 214 | for (index in smallLimit.indices) { 215 | when (index) { 216 | 2 -> { 217 | limitSb.append("${smallLimit[index]}\n") 218 | } 219 | smallLimit.size - 1 -> { 220 | limitSb.append(smallLimit[index]) 221 | } 222 | else -> { 223 | limitSb.append("${smallLimit[index]},") 224 | } 225 | } 226 | } 227 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 228 | } 229 | 230 | 231 | /** 232 | * 丑 233 | */ 234 | fun loadChou(): ListBean { 235 | val elevenInfo = mData.十二宫信息 236 | val chou = elevenInfo.丑 237 | val startList = chou.星列表 238 | val starSmall = chou.星庙旺 239 | 240 | val stars = listOf(Stars(startList.地空, starSmall.地空.庙旺), 241 | Stars(startList.天府, starSmall.地空.庙旺), 242 | Stars(startList.天空, ""), 243 | Stars(startList.天魁, "")) 244 | val bottomLeft = listOf(chou.生年博士, chou.生年将前, chou.生年岁前) 245 | val bottomRight = listOf("辛巳", chou.长生) 246 | val bottomCenter = listOf(chou.宫, chou.大限) 247 | val smallLimit = chou.小限.split(",") 248 | val limitSb = StringBuilder() 249 | for (index in smallLimit.indices) { 250 | when (index) { 251 | 2 -> { 252 | limitSb.append("${smallLimit[index]}\n") 253 | } 254 | smallLimit.size - 1 -> { 255 | limitSb.append(smallLimit[index]) 256 | } 257 | else -> { 258 | limitSb.append("${smallLimit[index]},") 259 | } 260 | } 261 | } 262 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 263 | } 264 | 265 | 266 | /** 267 | * 寅 268 | */ 269 | fun loadYin(): ListBean { 270 | val elevenInfo = mData.十二宫信息 271 | val yin = elevenInfo.寅 272 | val startList = yin.星列表 273 | val starSmall = yin.星庙旺 274 | 275 | val stars = listOf(Stars(startList.八座, ""), 276 | Stars(startList.天厨, ""), 277 | Stars(startList.天月, ""), 278 | Stars(startList.天机, starSmall.天机.庙旺), 279 | Stars(startList.天马, ""), 280 | Stars(startList.太阴, starSmall.太阴.庙旺), 281 | Stars(startList.孤辰, ""), 282 | Stars(startList.文曲, starSmall.文曲.庙旺)) 283 | val bottomLeft = listOf(yin.生年博士, yin.生年将前, yin.生年岁前) 284 | val bottomRight = listOf("辛巳", yin.长生) 285 | val bottomCenter = listOf(yin.宫, yin.大限) 286 | val smallLimit = yin.小限.split(",") 287 | val limitSb = StringBuilder() 288 | for (index in smallLimit.indices) { 289 | when (index) { 290 | 2 -> { 291 | limitSb.append("${smallLimit[index]}\n") 292 | } 293 | smallLimit.size - 1 -> { 294 | limitSb.append(smallLimit[index]) 295 | } 296 | else -> { 297 | limitSb.append("${smallLimit[index]},") 298 | } 299 | } 300 | } 301 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 302 | } 303 | 304 | /** 305 | * 卯 306 | */ 307 | fun loadMao(): ListBean { 308 | val elevenInfo = mData.十二宫信息 309 | val mao = elevenInfo.卯 310 | val startList = mao.星列表 311 | val starSmall = mao.星庙旺 312 | val stars = listOf(Stars(startList.天才, ""), 313 | Stars(startList.左辅, starSmall.左辅.庙旺), 314 | Stars(startList.紫微, starSmall.紫微.庙旺), 315 | Stars(startList.红鸾, ""), 316 | Stars(startList.贪狼, starSmall.贪狼.庙旺)) 317 | val bottomLeft = listOf(mao.生年博士, mao.生年将前, mao.生年岁前) 318 | val bottomRight = listOf("辛巳", mao.长生) 319 | val bottomCenter = listOf(mao.宫, mao.大限) 320 | val smallLimit = mao.小限.split(",") 321 | val limitSb = StringBuilder() 322 | for (index in smallLimit.indices) { 323 | when (index) { 324 | 2 -> { 325 | limitSb.append("${smallLimit[index]}\n") 326 | } 327 | smallLimit.size - 1 -> { 328 | limitSb.append(smallLimit[index]) 329 | } 330 | else -> { 331 | limitSb.append("${smallLimit[index]},") 332 | } 333 | } 334 | } 335 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 336 | } 337 | 338 | /** 339 | * 辰 340 | */ 341 | fun loadChen(): ListBean { 342 | val elevenInfo = mData.十二宫信息 343 | val chen = elevenInfo.辰 344 | val startList = chen.星列表 345 | val starSmall = chen.星庙旺 346 | 347 | val stars = listOf(Stars(startList.华盖, ""), 348 | Stars(startList.台辅, ""), 349 | Stars(startList.巨门, starSmall.巨门.庙旺), 350 | Stars(startList.旬空, ""), 351 | Stars(startList.阴煞, ""), 352 | Stars(startList.龙池, "")) 353 | val bottomLeft = listOf(chen.生年博士, chen.生年将前, chen.生年岁前) 354 | val bottomRight = listOf("辛巳", chen.长生) 355 | val bottomCenter = listOf(chen.宫, chen.大限) 356 | val smallLimit = chen.小限.split(",") 357 | val limitSb = StringBuilder() 358 | for (index in smallLimit.indices) { 359 | when (index) { 360 | 2 -> { 361 | limitSb.append("${smallLimit[index]}\n") 362 | } 363 | smallLimit.size - 1 -> { 364 | limitSb.append(smallLimit[index]) 365 | } 366 | else -> { 367 | limitSb.append("${smallLimit[index]},") 368 | } 369 | } 370 | } 371 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 372 | } 373 | 374 | /** 375 | * 巳 376 | */ 377 | fun loadSi(): ListBean { 378 | val elevenInfo = mData.十二宫信息 379 | val si = elevenInfo.巳 380 | val startList = si.星列表 381 | val starSmall = si.星庙旺 382 | val stars = listOf(Stars(startList.副旬, ""), 383 | Stars(startList.劫煞, ""), 384 | Stars(startList.天相, starSmall.天相.庙旺), 385 | Stars(startList.破碎, "")) 386 | val bottomLeft = listOf(si.生年博士, si.生年将前, si.生年岁前) 387 | val bottomRight = listOf("辛巳", si.长生) 388 | val bottomCenter = listOf(si.宫, si.大限) 389 | val smallLimit = si.小限.split(",") 390 | val limitSb = StringBuilder() 391 | for (index in smallLimit.indices) { 392 | when (index) { 393 | 2 -> { 394 | limitSb.append("${smallLimit[index]}\n") 395 | } 396 | smallLimit.size - 1 -> { 397 | limitSb.append(smallLimit[index]) 398 | } 399 | else -> { 400 | limitSb.append("${smallLimit[index]},") 401 | } 402 | } 403 | } 404 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 405 | } 406 | 407 | 408 | /** 409 | * 午 410 | */ 411 | fun loadWu(): ListBean { 412 | val elevenInfo = mData.十二宫信息 413 | val wu = elevenInfo.午 414 | val startList = wu.星列表 415 | val starSmall = wu.星庙旺 416 | 417 | val stars = listOf(Stars(startList.天哭, ""), 418 | Stars(startList.天梁, starSmall.天梁.庙旺), 419 | Stars(startList.天福, ""), 420 | Stars(startList.天虚, ""), 421 | Stars(startList.截空, ""), 422 | Stars(startList.解神, "")) 423 | val bottomLeft = listOf(wu.生年博士, wu.生年将前, wu.生年岁前) 424 | val bottomRight = listOf("辛巳", wu.长生) 425 | val bottomCenter = listOf(wu.宫, wu.大限) 426 | val smallLimit = wu.小限.split(",") 427 | val limitSb = StringBuilder() 428 | for (index in smallLimit.indices) { 429 | when (index) { 430 | 2 -> { 431 | limitSb.append("${smallLimit[index]}\n") 432 | } 433 | smallLimit.size - 1 -> { 434 | limitSb.append(smallLimit[index]) 435 | } 436 | else -> { 437 | limitSb.append("${smallLimit[index]},") 438 | } 439 | } 440 | } 441 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 442 | } 443 | 444 | /** 445 | * 未 446 | */ 447 | fun loadWei(): ListBean { 448 | val elevenInfo = mData.十二宫信息 449 | val wei = elevenInfo.未 450 | val startList = wei.星列表 451 | val starSmall = wei.星庙旺 452 | 453 | val stars = listOf(Stars(startList.七杀, starSmall.七杀.庙旺), 454 | Stars(startList.副截, ""), 455 | Stars(startList.大耗, ""), 456 | Stars(startList.天钺, ""), 457 | Stars(startList.廉贞, starSmall.廉贞.庙旺), 458 | Stars(startList.陀罗, starSmall.陀罗.庙旺), 459 | Stars(startList.龙德, "")) 460 | val bottomLeft = listOf(wei.生年博士, wei.生年将前, wei.生年岁前) 461 | val bottomRight = listOf("辛巳", wei.长生) 462 | val bottomCenter = listOf(wei.宫, wei.大限) 463 | val smallLimit = wei.小限.split(",") 464 | val limitSb = StringBuilder() 465 | for (index in smallLimit.indices) { 466 | when (index) { 467 | 2 -> { 468 | limitSb.append("${smallLimit[index]}\n") 469 | } 470 | smallLimit.size - 1 -> { 471 | limitSb.append(smallLimit[index]) 472 | } 473 | else -> { 474 | limitSb.append("${smallLimit[index]},") 475 | } 476 | } 477 | } 478 | return ListBean(stars, bottomLeft, bottomRight, bottomCenter, limitSb.toString()) 479 | } 480 | } 481 | 482 | } --------------------------------------------------------------------------------