├── 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 |
4 |
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 |
8 |
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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
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 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | xmlns:android
19 |
20 | ^$
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | xmlns:.*
30 |
31 | ^$
32 |
33 |
34 | BY_NAME
35 |
36 |
37 |
38 |
39 |
40 |
41 | .*:id
42 |
43 | http://schemas.android.com/apk/res/android
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | .*:name
53 |
54 | http://schemas.android.com/apk/res/android
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | name
64 |
65 | ^$
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | style
75 |
76 | ^$
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | .*
86 |
87 | ^$
88 |
89 |
90 | BY_NAME
91 |
92 |
93 |
94 |
95 |
96 |
97 | .*
98 |
99 | http://schemas.android.com/apk/res/android
100 |
101 |
102 | ANDROID_ATTRIBUTE_ORDER
103 |
104 |
105 |
106 |
107 |
108 |
109 | .*
110 |
111 | .*
112 |
113 |
114 | BY_NAME
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
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 | }
--------------------------------------------------------------------------------