commit f184b3ce434e4a76c0250af56a08f1bcd38c7245 Author: yuqian Date: Sun Jan 4 17:47:43 2026 +0800 接入Topon-liftoff diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..073bf60 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +keystore.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..1fec688 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Ar Drawing Space \ No newline at end of file diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..d0d4a7c --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..eb5c703 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..639c779 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..69e8615 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b2c751a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/DrawHelper b/app/DrawHelper new file mode 100644 index 0000000..f830945 Binary files /dev/null and b/app/DrawHelper differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..bde7d96 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,97 @@ + +import java.util.Date +import java.text.SimpleDateFormat +import java.util.Properties +import java.io.FileInputStream +plugins { + id("com.android.application") + id ("org.jetbrains.kotlin.android") + +} +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) + +// 加载 keystore 配置 +val keystorePropertiesFile = rootProject.file("keystore.properties") +val keystoreProperties = Properties() +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + +android { + namespace = "com.draw.painting.line" + compileSdk = 36 + + defaultConfig { + //com.draw.painting.helper + applicationId = "com.draw.painting.line" + minSdk = 24 + targetSdk = 36 + versionCode = 2 + versionName = "1.1" + setProperty("archivesBaseName", "Ar Drawing Space_V" + versionName + "(${versionCode})_$timestamp") + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + signingConfigs { + create("release") { + if (keystorePropertiesFile.exists()) { + storeFile = file(keystoreProperties["storeFile"]!!) + storePassword = keystoreProperties["storePassword"]!!.toString() + keyAlias = keystoreProperties["keyAlias"]!!.toString() + keyPassword = keystoreProperties["keyPassword"]!!.toString() + } + } + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + if (keystorePropertiesFile.exists()) { + signingConfig = signingConfigs.getByName("release") + } + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures{ + viewBinding = true + } +} + +dependencies { + + implementation("androidx.appcompat:appcompat:1.7.1") + implementation("androidx.activity:activity:1.8.2") + implementation("com.google.android.material:material:1.13.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + + val camerax_version = "1.5.1" + //noinspection GradleDependency + implementation ("androidx.camera:camera-core:${camerax_version}") + //noinspection GradleDependency + implementation ("androidx.camera:camera-camera2:${camerax_version}") + implementation ("androidx.camera:camera-lifecycle:${camerax_version}") + implementation ("androidx.camera:camera-view:${camerax_version}") + implementation ("androidx.camera:camera-extensions:${camerax_version}") + + + + + + + + + +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..cf50408 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,22 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + diff --git a/app/release/baselineProfiles/0/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm b/app/release/baselineProfiles/0/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm new file mode 100644 index 0000000..c587d4d Binary files /dev/null and b/app/release/baselineProfiles/0/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm differ diff --git a/app/release/baselineProfiles/1/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm b/app/release/baselineProfiles/1/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm new file mode 100644 index 0000000..4279350 Binary files /dev/null and b/app/release/baselineProfiles/1/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..d3f3a02 --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,37 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.draw.painting.line", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0", + "outputFile": "Ar Drawing Space_V1.0(1)_12_17_11_29-release.apk" + } + ], + "elementType": "File", + "baselineProfiles": [ + { + "minApi": 28, + "maxApi": 30, + "baselineProfiles": [ + "baselineProfiles/1/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm" + ] + }, + { + "minApi": 31, + "maxApi": 2147483647, + "baselineProfiles": [ + "baselineProfiles/0/Ar Drawing Space_V1.0(1)_12_17_11_29-release.dm" + ] + } + ], + "minSdkVersionForDexing": 24 +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/draw/painting/line/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/draw/painting/line/ExampleInstrumentedTest.java new file mode 100644 index 0000000..402fe1b --- /dev/null +++ b/app/src/androidTest/java/com/draw/painting/line/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.draw.painting.line; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.draw.painting.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ed0a7fb --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/Animals/1.jpg b/app/src/main/assets/Animals/1.jpg new file mode 100644 index 0000000..9488c65 Binary files /dev/null and b/app/src/main/assets/Animals/1.jpg differ diff --git a/app/src/main/assets/Animals/10.jpg b/app/src/main/assets/Animals/10.jpg new file mode 100644 index 0000000..78382a4 Binary files /dev/null and b/app/src/main/assets/Animals/10.jpg differ diff --git a/app/src/main/assets/Animals/11.jpg b/app/src/main/assets/Animals/11.jpg new file mode 100644 index 0000000..a4f7512 Binary files /dev/null and b/app/src/main/assets/Animals/11.jpg differ diff --git a/app/src/main/assets/Animals/12.jpg b/app/src/main/assets/Animals/12.jpg new file mode 100644 index 0000000..bab3cff Binary files /dev/null and b/app/src/main/assets/Animals/12.jpg differ diff --git a/app/src/main/assets/Animals/13.jpg b/app/src/main/assets/Animals/13.jpg new file mode 100644 index 0000000..5c3ef19 Binary files /dev/null and b/app/src/main/assets/Animals/13.jpg differ diff --git a/app/src/main/assets/Animals/14.jpg b/app/src/main/assets/Animals/14.jpg new file mode 100644 index 0000000..8b446f2 Binary files /dev/null and b/app/src/main/assets/Animals/14.jpg differ diff --git a/app/src/main/assets/Animals/15.jpg b/app/src/main/assets/Animals/15.jpg new file mode 100644 index 0000000..2f9dc4e Binary files /dev/null and b/app/src/main/assets/Animals/15.jpg differ diff --git a/app/src/main/assets/Animals/16.jpg b/app/src/main/assets/Animals/16.jpg new file mode 100644 index 0000000..aad9788 Binary files /dev/null and b/app/src/main/assets/Animals/16.jpg differ diff --git a/app/src/main/assets/Animals/17.jpg b/app/src/main/assets/Animals/17.jpg new file mode 100644 index 0000000..17c6f07 Binary files /dev/null and b/app/src/main/assets/Animals/17.jpg differ diff --git a/app/src/main/assets/Animals/18.jpg b/app/src/main/assets/Animals/18.jpg new file mode 100644 index 0000000..2ce93a7 Binary files /dev/null and b/app/src/main/assets/Animals/18.jpg differ diff --git a/app/src/main/assets/Animals/19.jpg b/app/src/main/assets/Animals/19.jpg new file mode 100644 index 0000000..2b24f31 Binary files /dev/null and b/app/src/main/assets/Animals/19.jpg differ diff --git a/app/src/main/assets/Animals/2.jpg b/app/src/main/assets/Animals/2.jpg new file mode 100644 index 0000000..0a0c2e7 Binary files /dev/null and b/app/src/main/assets/Animals/2.jpg differ diff --git a/app/src/main/assets/Animals/20.jpg b/app/src/main/assets/Animals/20.jpg new file mode 100644 index 0000000..347cddc Binary files /dev/null and b/app/src/main/assets/Animals/20.jpg differ diff --git a/app/src/main/assets/Animals/21.jpg b/app/src/main/assets/Animals/21.jpg new file mode 100644 index 0000000..5a04764 Binary files /dev/null and b/app/src/main/assets/Animals/21.jpg differ diff --git a/app/src/main/assets/Animals/22.jpg b/app/src/main/assets/Animals/22.jpg new file mode 100644 index 0000000..c18d8ad Binary files /dev/null and b/app/src/main/assets/Animals/22.jpg differ diff --git a/app/src/main/assets/Animals/23.jpg b/app/src/main/assets/Animals/23.jpg new file mode 100644 index 0000000..4270d19 Binary files /dev/null and b/app/src/main/assets/Animals/23.jpg differ diff --git a/app/src/main/assets/Animals/24.jpg b/app/src/main/assets/Animals/24.jpg new file mode 100644 index 0000000..355a944 Binary files /dev/null and b/app/src/main/assets/Animals/24.jpg differ diff --git a/app/src/main/assets/Animals/25.jpg b/app/src/main/assets/Animals/25.jpg new file mode 100644 index 0000000..c670943 Binary files /dev/null and b/app/src/main/assets/Animals/25.jpg differ diff --git a/app/src/main/assets/Animals/26.jpg b/app/src/main/assets/Animals/26.jpg new file mode 100644 index 0000000..4b95b01 Binary files /dev/null and b/app/src/main/assets/Animals/26.jpg differ diff --git a/app/src/main/assets/Animals/27.jpg b/app/src/main/assets/Animals/27.jpg new file mode 100644 index 0000000..87a8c12 Binary files /dev/null and b/app/src/main/assets/Animals/27.jpg differ diff --git a/app/src/main/assets/Animals/28.jpg b/app/src/main/assets/Animals/28.jpg new file mode 100644 index 0000000..770686a Binary files /dev/null and b/app/src/main/assets/Animals/28.jpg differ diff --git a/app/src/main/assets/Animals/29.jpg b/app/src/main/assets/Animals/29.jpg new file mode 100644 index 0000000..7127a11 Binary files /dev/null and b/app/src/main/assets/Animals/29.jpg differ diff --git a/app/src/main/assets/Animals/3.jpg b/app/src/main/assets/Animals/3.jpg new file mode 100644 index 0000000..4bf4897 Binary files /dev/null and b/app/src/main/assets/Animals/3.jpg differ diff --git a/app/src/main/assets/Animals/30.jpg b/app/src/main/assets/Animals/30.jpg new file mode 100644 index 0000000..f1d2047 Binary files /dev/null and b/app/src/main/assets/Animals/30.jpg differ diff --git a/app/src/main/assets/Animals/31.jpg b/app/src/main/assets/Animals/31.jpg new file mode 100644 index 0000000..0d08aa8 Binary files /dev/null and b/app/src/main/assets/Animals/31.jpg differ diff --git a/app/src/main/assets/Animals/4.jpg b/app/src/main/assets/Animals/4.jpg new file mode 100644 index 0000000..838c582 Binary files /dev/null and b/app/src/main/assets/Animals/4.jpg differ diff --git a/app/src/main/assets/Animals/5.jpg b/app/src/main/assets/Animals/5.jpg new file mode 100644 index 0000000..36bd2bf Binary files /dev/null and b/app/src/main/assets/Animals/5.jpg differ diff --git a/app/src/main/assets/Animals/6.jpg b/app/src/main/assets/Animals/6.jpg new file mode 100644 index 0000000..dceb49b Binary files /dev/null and b/app/src/main/assets/Animals/6.jpg differ diff --git a/app/src/main/assets/Animals/7.jpg b/app/src/main/assets/Animals/7.jpg new file mode 100644 index 0000000..ebd4694 Binary files /dev/null and b/app/src/main/assets/Animals/7.jpg differ diff --git a/app/src/main/assets/Animals/8.jpg b/app/src/main/assets/Animals/8.jpg new file mode 100644 index 0000000..e5e3c63 Binary files /dev/null and b/app/src/main/assets/Animals/8.jpg differ diff --git a/app/src/main/assets/Animals/9.jpg b/app/src/main/assets/Animals/9.jpg new file mode 100644 index 0000000..e7a1862 Binary files /dev/null and b/app/src/main/assets/Animals/9.jpg differ diff --git a/app/src/main/assets/Birds/1.jpg b/app/src/main/assets/Birds/1.jpg new file mode 100644 index 0000000..d235225 Binary files /dev/null and b/app/src/main/assets/Birds/1.jpg differ diff --git a/app/src/main/assets/Birds/10.jpg b/app/src/main/assets/Birds/10.jpg new file mode 100644 index 0000000..e348ffe Binary files /dev/null and b/app/src/main/assets/Birds/10.jpg differ diff --git a/app/src/main/assets/Birds/11.jpg b/app/src/main/assets/Birds/11.jpg new file mode 100644 index 0000000..921b5b9 Binary files /dev/null and b/app/src/main/assets/Birds/11.jpg differ diff --git a/app/src/main/assets/Birds/12.jpg b/app/src/main/assets/Birds/12.jpg new file mode 100644 index 0000000..7b4055b Binary files /dev/null and b/app/src/main/assets/Birds/12.jpg differ diff --git a/app/src/main/assets/Birds/13.jpg b/app/src/main/assets/Birds/13.jpg new file mode 100644 index 0000000..021b7a4 Binary files /dev/null and b/app/src/main/assets/Birds/13.jpg differ diff --git a/app/src/main/assets/Birds/14.jpg b/app/src/main/assets/Birds/14.jpg new file mode 100644 index 0000000..2074c6f Binary files /dev/null and b/app/src/main/assets/Birds/14.jpg differ diff --git a/app/src/main/assets/Birds/15.jpg b/app/src/main/assets/Birds/15.jpg new file mode 100644 index 0000000..59b0e47 Binary files /dev/null and b/app/src/main/assets/Birds/15.jpg differ diff --git a/app/src/main/assets/Birds/16.jpg b/app/src/main/assets/Birds/16.jpg new file mode 100644 index 0000000..fe950d1 Binary files /dev/null and b/app/src/main/assets/Birds/16.jpg differ diff --git a/app/src/main/assets/Birds/17.jpg b/app/src/main/assets/Birds/17.jpg new file mode 100644 index 0000000..484f39a Binary files /dev/null and b/app/src/main/assets/Birds/17.jpg differ diff --git a/app/src/main/assets/Birds/18.jpg b/app/src/main/assets/Birds/18.jpg new file mode 100644 index 0000000..2792ed1 Binary files /dev/null and b/app/src/main/assets/Birds/18.jpg differ diff --git a/app/src/main/assets/Birds/19.jpg b/app/src/main/assets/Birds/19.jpg new file mode 100644 index 0000000..9e9bb27 Binary files /dev/null and b/app/src/main/assets/Birds/19.jpg differ diff --git a/app/src/main/assets/Birds/2.jpg b/app/src/main/assets/Birds/2.jpg new file mode 100644 index 0000000..0929272 Binary files /dev/null and b/app/src/main/assets/Birds/2.jpg differ diff --git a/app/src/main/assets/Birds/3.jpg b/app/src/main/assets/Birds/3.jpg new file mode 100644 index 0000000..1376a50 Binary files /dev/null and b/app/src/main/assets/Birds/3.jpg differ diff --git a/app/src/main/assets/Birds/4.jpg b/app/src/main/assets/Birds/4.jpg new file mode 100644 index 0000000..1cd8f9c Binary files /dev/null and b/app/src/main/assets/Birds/4.jpg differ diff --git a/app/src/main/assets/Birds/5.jpg b/app/src/main/assets/Birds/5.jpg new file mode 100644 index 0000000..7637589 Binary files /dev/null and b/app/src/main/assets/Birds/5.jpg differ diff --git a/app/src/main/assets/Birds/6.jpg b/app/src/main/assets/Birds/6.jpg new file mode 100644 index 0000000..3bf16b6 Binary files /dev/null and b/app/src/main/assets/Birds/6.jpg differ diff --git a/app/src/main/assets/Birds/7.jpg b/app/src/main/assets/Birds/7.jpg new file mode 100644 index 0000000..076e51d Binary files /dev/null and b/app/src/main/assets/Birds/7.jpg differ diff --git a/app/src/main/assets/Birds/8.jpg b/app/src/main/assets/Birds/8.jpg new file mode 100644 index 0000000..71f5cf7 Binary files /dev/null and b/app/src/main/assets/Birds/8.jpg differ diff --git a/app/src/main/assets/Birds/9.jpg b/app/src/main/assets/Birds/9.jpg new file mode 100644 index 0000000..8767032 Binary files /dev/null and b/app/src/main/assets/Birds/9.jpg differ diff --git a/app/src/main/assets/Butterfly/1.jpg b/app/src/main/assets/Butterfly/1.jpg new file mode 100644 index 0000000..0d713b7 Binary files /dev/null and b/app/src/main/assets/Butterfly/1.jpg differ diff --git a/app/src/main/assets/Butterfly/10.jpg b/app/src/main/assets/Butterfly/10.jpg new file mode 100644 index 0000000..ae497c8 Binary files /dev/null and b/app/src/main/assets/Butterfly/10.jpg differ diff --git a/app/src/main/assets/Butterfly/11.jpg b/app/src/main/assets/Butterfly/11.jpg new file mode 100644 index 0000000..d2e39ef Binary files /dev/null and b/app/src/main/assets/Butterfly/11.jpg differ diff --git a/app/src/main/assets/Butterfly/12.jpg b/app/src/main/assets/Butterfly/12.jpg new file mode 100644 index 0000000..410af7c Binary files /dev/null and b/app/src/main/assets/Butterfly/12.jpg differ diff --git a/app/src/main/assets/Butterfly/13.jpg b/app/src/main/assets/Butterfly/13.jpg new file mode 100644 index 0000000..233a998 Binary files /dev/null and b/app/src/main/assets/Butterfly/13.jpg differ diff --git a/app/src/main/assets/Butterfly/14.jpg b/app/src/main/assets/Butterfly/14.jpg new file mode 100644 index 0000000..9545c0f Binary files /dev/null and b/app/src/main/assets/Butterfly/14.jpg differ diff --git a/app/src/main/assets/Butterfly/15.jpg b/app/src/main/assets/Butterfly/15.jpg new file mode 100644 index 0000000..aa0da5b Binary files /dev/null and b/app/src/main/assets/Butterfly/15.jpg differ diff --git a/app/src/main/assets/Butterfly/16.jpg b/app/src/main/assets/Butterfly/16.jpg new file mode 100644 index 0000000..4b118cf Binary files /dev/null and b/app/src/main/assets/Butterfly/16.jpg differ diff --git a/app/src/main/assets/Butterfly/17.jpg b/app/src/main/assets/Butterfly/17.jpg new file mode 100644 index 0000000..ebfdc2e Binary files /dev/null and b/app/src/main/assets/Butterfly/17.jpg differ diff --git a/app/src/main/assets/Butterfly/18.jpg b/app/src/main/assets/Butterfly/18.jpg new file mode 100644 index 0000000..7b81ca1 Binary files /dev/null and b/app/src/main/assets/Butterfly/18.jpg differ diff --git a/app/src/main/assets/Butterfly/19.jpg b/app/src/main/assets/Butterfly/19.jpg new file mode 100644 index 0000000..903fd82 Binary files /dev/null and b/app/src/main/assets/Butterfly/19.jpg differ diff --git a/app/src/main/assets/Butterfly/2.jpg b/app/src/main/assets/Butterfly/2.jpg new file mode 100644 index 0000000..f92c438 Binary files /dev/null and b/app/src/main/assets/Butterfly/2.jpg differ diff --git a/app/src/main/assets/Butterfly/20.jpg b/app/src/main/assets/Butterfly/20.jpg new file mode 100644 index 0000000..7d0dc2e Binary files /dev/null and b/app/src/main/assets/Butterfly/20.jpg differ diff --git a/app/src/main/assets/Butterfly/21.jpg b/app/src/main/assets/Butterfly/21.jpg new file mode 100644 index 0000000..ff82d93 Binary files /dev/null and b/app/src/main/assets/Butterfly/21.jpg differ diff --git a/app/src/main/assets/Butterfly/3.jpg b/app/src/main/assets/Butterfly/3.jpg new file mode 100644 index 0000000..5251134 Binary files /dev/null and b/app/src/main/assets/Butterfly/3.jpg differ diff --git a/app/src/main/assets/Butterfly/4.jpg b/app/src/main/assets/Butterfly/4.jpg new file mode 100644 index 0000000..01d5932 Binary files /dev/null and b/app/src/main/assets/Butterfly/4.jpg differ diff --git a/app/src/main/assets/Butterfly/5.jpg b/app/src/main/assets/Butterfly/5.jpg new file mode 100644 index 0000000..cc99ed5 Binary files /dev/null and b/app/src/main/assets/Butterfly/5.jpg differ diff --git a/app/src/main/assets/Butterfly/6.jpg b/app/src/main/assets/Butterfly/6.jpg new file mode 100644 index 0000000..6d02805 Binary files /dev/null and b/app/src/main/assets/Butterfly/6.jpg differ diff --git a/app/src/main/assets/Butterfly/7.jpg b/app/src/main/assets/Butterfly/7.jpg new file mode 100644 index 0000000..dd52dbd Binary files /dev/null and b/app/src/main/assets/Butterfly/7.jpg differ diff --git a/app/src/main/assets/Butterfly/8.jpg b/app/src/main/assets/Butterfly/8.jpg new file mode 100644 index 0000000..d519ca7 Binary files /dev/null and b/app/src/main/assets/Butterfly/8.jpg differ diff --git a/app/src/main/assets/Butterfly/9.jpg b/app/src/main/assets/Butterfly/9.jpg new file mode 100644 index 0000000..0cedb47 Binary files /dev/null and b/app/src/main/assets/Butterfly/9.jpg differ diff --git a/app/src/main/assets/Cafe/1.jpg b/app/src/main/assets/Cafe/1.jpg new file mode 100644 index 0000000..b347b44 Binary files /dev/null and b/app/src/main/assets/Cafe/1.jpg differ diff --git a/app/src/main/assets/Cafe/10.jpg b/app/src/main/assets/Cafe/10.jpg new file mode 100644 index 0000000..3728490 Binary files /dev/null and b/app/src/main/assets/Cafe/10.jpg differ diff --git a/app/src/main/assets/Cafe/11.jpg b/app/src/main/assets/Cafe/11.jpg new file mode 100644 index 0000000..bff21e1 Binary files /dev/null and b/app/src/main/assets/Cafe/11.jpg differ diff --git a/app/src/main/assets/Cafe/12.jpg b/app/src/main/assets/Cafe/12.jpg new file mode 100644 index 0000000..3966d4a Binary files /dev/null and b/app/src/main/assets/Cafe/12.jpg differ diff --git a/app/src/main/assets/Cafe/13.jpg b/app/src/main/assets/Cafe/13.jpg new file mode 100644 index 0000000..8200e12 Binary files /dev/null and b/app/src/main/assets/Cafe/13.jpg differ diff --git a/app/src/main/assets/Cafe/14.jpg b/app/src/main/assets/Cafe/14.jpg new file mode 100644 index 0000000..65ee383 Binary files /dev/null and b/app/src/main/assets/Cafe/14.jpg differ diff --git a/app/src/main/assets/Cafe/15.jpg b/app/src/main/assets/Cafe/15.jpg new file mode 100644 index 0000000..01df5e5 Binary files /dev/null and b/app/src/main/assets/Cafe/15.jpg differ diff --git a/app/src/main/assets/Cafe/16.jpg b/app/src/main/assets/Cafe/16.jpg new file mode 100644 index 0000000..ff679c1 Binary files /dev/null and b/app/src/main/assets/Cafe/16.jpg differ diff --git a/app/src/main/assets/Cafe/17.jpg b/app/src/main/assets/Cafe/17.jpg new file mode 100644 index 0000000..42fdf87 Binary files /dev/null and b/app/src/main/assets/Cafe/17.jpg differ diff --git a/app/src/main/assets/Cafe/18.jpg b/app/src/main/assets/Cafe/18.jpg new file mode 100644 index 0000000..06d300e Binary files /dev/null and b/app/src/main/assets/Cafe/18.jpg differ diff --git a/app/src/main/assets/Cafe/19.jpg b/app/src/main/assets/Cafe/19.jpg new file mode 100644 index 0000000..42aaa2c Binary files /dev/null and b/app/src/main/assets/Cafe/19.jpg differ diff --git a/app/src/main/assets/Cafe/2.jpg b/app/src/main/assets/Cafe/2.jpg new file mode 100644 index 0000000..14d9b25 Binary files /dev/null and b/app/src/main/assets/Cafe/2.jpg differ diff --git a/app/src/main/assets/Cafe/20.jpg b/app/src/main/assets/Cafe/20.jpg new file mode 100644 index 0000000..5dad84c Binary files /dev/null and b/app/src/main/assets/Cafe/20.jpg differ diff --git a/app/src/main/assets/Cafe/21.jpg b/app/src/main/assets/Cafe/21.jpg new file mode 100644 index 0000000..c019faa Binary files /dev/null and b/app/src/main/assets/Cafe/21.jpg differ diff --git a/app/src/main/assets/Cafe/22.jpg b/app/src/main/assets/Cafe/22.jpg new file mode 100644 index 0000000..28cdc4e Binary files /dev/null and b/app/src/main/assets/Cafe/22.jpg differ diff --git a/app/src/main/assets/Cafe/23.jpg b/app/src/main/assets/Cafe/23.jpg new file mode 100644 index 0000000..973a5c2 Binary files /dev/null and b/app/src/main/assets/Cafe/23.jpg differ diff --git a/app/src/main/assets/Cafe/24.jpg b/app/src/main/assets/Cafe/24.jpg new file mode 100644 index 0000000..3c36d8a Binary files /dev/null and b/app/src/main/assets/Cafe/24.jpg differ diff --git a/app/src/main/assets/Cafe/25.jpg b/app/src/main/assets/Cafe/25.jpg new file mode 100644 index 0000000..c7be496 Binary files /dev/null and b/app/src/main/assets/Cafe/25.jpg differ diff --git a/app/src/main/assets/Cafe/26.jpg b/app/src/main/assets/Cafe/26.jpg new file mode 100644 index 0000000..7229696 Binary files /dev/null and b/app/src/main/assets/Cafe/26.jpg differ diff --git a/app/src/main/assets/Cafe/27.jpg b/app/src/main/assets/Cafe/27.jpg new file mode 100644 index 0000000..f857542 Binary files /dev/null and b/app/src/main/assets/Cafe/27.jpg differ diff --git a/app/src/main/assets/Cafe/28.jpg b/app/src/main/assets/Cafe/28.jpg new file mode 100644 index 0000000..8cde6de Binary files /dev/null and b/app/src/main/assets/Cafe/28.jpg differ diff --git a/app/src/main/assets/Cafe/29.jpg b/app/src/main/assets/Cafe/29.jpg new file mode 100644 index 0000000..8affd30 Binary files /dev/null and b/app/src/main/assets/Cafe/29.jpg differ diff --git a/app/src/main/assets/Cafe/3.jpg b/app/src/main/assets/Cafe/3.jpg new file mode 100644 index 0000000..b1c3cfa Binary files /dev/null and b/app/src/main/assets/Cafe/3.jpg differ diff --git a/app/src/main/assets/Cafe/30.jpg b/app/src/main/assets/Cafe/30.jpg new file mode 100644 index 0000000..f71ce84 Binary files /dev/null and b/app/src/main/assets/Cafe/30.jpg differ diff --git a/app/src/main/assets/Cafe/31.jpg b/app/src/main/assets/Cafe/31.jpg new file mode 100644 index 0000000..a5d22ca Binary files /dev/null and b/app/src/main/assets/Cafe/31.jpg differ diff --git a/app/src/main/assets/Cafe/32.jpg b/app/src/main/assets/Cafe/32.jpg new file mode 100644 index 0000000..8513a5e Binary files /dev/null and b/app/src/main/assets/Cafe/32.jpg differ diff --git a/app/src/main/assets/Cafe/33.jpg b/app/src/main/assets/Cafe/33.jpg new file mode 100644 index 0000000..fcdcbcc Binary files /dev/null and b/app/src/main/assets/Cafe/33.jpg differ diff --git a/app/src/main/assets/Cafe/34.jpg b/app/src/main/assets/Cafe/34.jpg new file mode 100644 index 0000000..51bbf4b Binary files /dev/null and b/app/src/main/assets/Cafe/34.jpg differ diff --git a/app/src/main/assets/Cafe/35.jpg b/app/src/main/assets/Cafe/35.jpg new file mode 100644 index 0000000..e1067da Binary files /dev/null and b/app/src/main/assets/Cafe/35.jpg differ diff --git a/app/src/main/assets/Cafe/36.jpg b/app/src/main/assets/Cafe/36.jpg new file mode 100644 index 0000000..181a84a Binary files /dev/null and b/app/src/main/assets/Cafe/36.jpg differ diff --git a/app/src/main/assets/Cafe/37.jpg b/app/src/main/assets/Cafe/37.jpg new file mode 100644 index 0000000..d8ffb00 Binary files /dev/null and b/app/src/main/assets/Cafe/37.jpg differ diff --git a/app/src/main/assets/Cafe/38.jpg b/app/src/main/assets/Cafe/38.jpg new file mode 100644 index 0000000..abdba50 Binary files /dev/null and b/app/src/main/assets/Cafe/38.jpg differ diff --git a/app/src/main/assets/Cafe/4.jpg b/app/src/main/assets/Cafe/4.jpg new file mode 100644 index 0000000..8792f16 Binary files /dev/null and b/app/src/main/assets/Cafe/4.jpg differ diff --git a/app/src/main/assets/Cafe/5.jpg b/app/src/main/assets/Cafe/5.jpg new file mode 100644 index 0000000..89630aa Binary files /dev/null and b/app/src/main/assets/Cafe/5.jpg differ diff --git a/app/src/main/assets/Cafe/6.jpg b/app/src/main/assets/Cafe/6.jpg new file mode 100644 index 0000000..7e6832e Binary files /dev/null and b/app/src/main/assets/Cafe/6.jpg differ diff --git a/app/src/main/assets/Cafe/7.jpg b/app/src/main/assets/Cafe/7.jpg new file mode 100644 index 0000000..f4d2afb Binary files /dev/null and b/app/src/main/assets/Cafe/7.jpg differ diff --git a/app/src/main/assets/Cafe/8.jpg b/app/src/main/assets/Cafe/8.jpg new file mode 100644 index 0000000..78f5ccf Binary files /dev/null and b/app/src/main/assets/Cafe/8.jpg differ diff --git a/app/src/main/assets/Cafe/9.jpg b/app/src/main/assets/Cafe/9.jpg new file mode 100644 index 0000000..4038bb5 Binary files /dev/null and b/app/src/main/assets/Cafe/9.jpg differ diff --git a/app/src/main/assets/Cartoons/1.jpg b/app/src/main/assets/Cartoons/1.jpg new file mode 100644 index 0000000..74bf123 Binary files /dev/null and b/app/src/main/assets/Cartoons/1.jpg differ diff --git a/app/src/main/assets/Cartoons/10.jpg b/app/src/main/assets/Cartoons/10.jpg new file mode 100644 index 0000000..450fa6e Binary files /dev/null and b/app/src/main/assets/Cartoons/10.jpg differ diff --git a/app/src/main/assets/Cartoons/11.jpg b/app/src/main/assets/Cartoons/11.jpg new file mode 100644 index 0000000..1f2a904 Binary files /dev/null and b/app/src/main/assets/Cartoons/11.jpg differ diff --git a/app/src/main/assets/Cartoons/12.jpg b/app/src/main/assets/Cartoons/12.jpg new file mode 100644 index 0000000..86ef206 Binary files /dev/null and b/app/src/main/assets/Cartoons/12.jpg differ diff --git a/app/src/main/assets/Cartoons/13.jpg b/app/src/main/assets/Cartoons/13.jpg new file mode 100644 index 0000000..92e1d75 Binary files /dev/null and b/app/src/main/assets/Cartoons/13.jpg differ diff --git a/app/src/main/assets/Cartoons/14.jpg b/app/src/main/assets/Cartoons/14.jpg new file mode 100644 index 0000000..c82e897 Binary files /dev/null and b/app/src/main/assets/Cartoons/14.jpg differ diff --git a/app/src/main/assets/Cartoons/15.jpg b/app/src/main/assets/Cartoons/15.jpg new file mode 100644 index 0000000..bcd8678 Binary files /dev/null and b/app/src/main/assets/Cartoons/15.jpg differ diff --git a/app/src/main/assets/Cartoons/16.jpg b/app/src/main/assets/Cartoons/16.jpg new file mode 100644 index 0000000..18377bd Binary files /dev/null and b/app/src/main/assets/Cartoons/16.jpg differ diff --git a/app/src/main/assets/Cartoons/17.jpg b/app/src/main/assets/Cartoons/17.jpg new file mode 100644 index 0000000..45aafbb Binary files /dev/null and b/app/src/main/assets/Cartoons/17.jpg differ diff --git a/app/src/main/assets/Cartoons/18.jpg b/app/src/main/assets/Cartoons/18.jpg new file mode 100644 index 0000000..048d253 Binary files /dev/null and b/app/src/main/assets/Cartoons/18.jpg differ diff --git a/app/src/main/assets/Cartoons/19.jpg b/app/src/main/assets/Cartoons/19.jpg new file mode 100644 index 0000000..c2501b2 Binary files /dev/null and b/app/src/main/assets/Cartoons/19.jpg differ diff --git a/app/src/main/assets/Cartoons/2.jpg b/app/src/main/assets/Cartoons/2.jpg new file mode 100644 index 0000000..8baf95b Binary files /dev/null and b/app/src/main/assets/Cartoons/2.jpg differ diff --git a/app/src/main/assets/Cartoons/20.jpg b/app/src/main/assets/Cartoons/20.jpg new file mode 100644 index 0000000..fb7901c Binary files /dev/null and b/app/src/main/assets/Cartoons/20.jpg differ diff --git a/app/src/main/assets/Cartoons/21.jpg b/app/src/main/assets/Cartoons/21.jpg new file mode 100644 index 0000000..ed7104e Binary files /dev/null and b/app/src/main/assets/Cartoons/21.jpg differ diff --git a/app/src/main/assets/Cartoons/22.jpg b/app/src/main/assets/Cartoons/22.jpg new file mode 100644 index 0000000..cd003eb Binary files /dev/null and b/app/src/main/assets/Cartoons/22.jpg differ diff --git a/app/src/main/assets/Cartoons/23.jpg b/app/src/main/assets/Cartoons/23.jpg new file mode 100644 index 0000000..77b49a4 Binary files /dev/null and b/app/src/main/assets/Cartoons/23.jpg differ diff --git a/app/src/main/assets/Cartoons/24.jpg b/app/src/main/assets/Cartoons/24.jpg new file mode 100644 index 0000000..1c7dc65 Binary files /dev/null and b/app/src/main/assets/Cartoons/24.jpg differ diff --git a/app/src/main/assets/Cartoons/25.jpg b/app/src/main/assets/Cartoons/25.jpg new file mode 100644 index 0000000..442aec2 Binary files /dev/null and b/app/src/main/assets/Cartoons/25.jpg differ diff --git a/app/src/main/assets/Cartoons/26.jpg b/app/src/main/assets/Cartoons/26.jpg new file mode 100644 index 0000000..ec4a2ff Binary files /dev/null and b/app/src/main/assets/Cartoons/26.jpg differ diff --git a/app/src/main/assets/Cartoons/3.jpg b/app/src/main/assets/Cartoons/3.jpg new file mode 100644 index 0000000..e099902 Binary files /dev/null and b/app/src/main/assets/Cartoons/3.jpg differ diff --git a/app/src/main/assets/Cartoons/4.jpg b/app/src/main/assets/Cartoons/4.jpg new file mode 100644 index 0000000..a4c69ba Binary files /dev/null and b/app/src/main/assets/Cartoons/4.jpg differ diff --git a/app/src/main/assets/Cartoons/5.jpg b/app/src/main/assets/Cartoons/5.jpg new file mode 100644 index 0000000..b32485d Binary files /dev/null and b/app/src/main/assets/Cartoons/5.jpg differ diff --git a/app/src/main/assets/Cartoons/6.jpg b/app/src/main/assets/Cartoons/6.jpg new file mode 100644 index 0000000..0e0a7ef Binary files /dev/null and b/app/src/main/assets/Cartoons/6.jpg differ diff --git a/app/src/main/assets/Cartoons/7.jpg b/app/src/main/assets/Cartoons/7.jpg new file mode 100644 index 0000000..ecd8dc0 Binary files /dev/null and b/app/src/main/assets/Cartoons/7.jpg differ diff --git a/app/src/main/assets/Cartoons/8.jpg b/app/src/main/assets/Cartoons/8.jpg new file mode 100644 index 0000000..f6ea587 Binary files /dev/null and b/app/src/main/assets/Cartoons/8.jpg differ diff --git a/app/src/main/assets/Cartoons/9.jpg b/app/src/main/assets/Cartoons/9.jpg new file mode 100644 index 0000000..da4c151 Binary files /dev/null and b/app/src/main/assets/Cartoons/9.jpg differ diff --git a/app/src/main/assets/Christmas/1.jpg b/app/src/main/assets/Christmas/1.jpg new file mode 100644 index 0000000..cc1fafb Binary files /dev/null and b/app/src/main/assets/Christmas/1.jpg differ diff --git a/app/src/main/assets/Christmas/10.jpg b/app/src/main/assets/Christmas/10.jpg new file mode 100644 index 0000000..e5e63d6 Binary files /dev/null and b/app/src/main/assets/Christmas/10.jpg differ diff --git a/app/src/main/assets/Christmas/11.jpg b/app/src/main/assets/Christmas/11.jpg new file mode 100644 index 0000000..cae5d66 Binary files /dev/null and b/app/src/main/assets/Christmas/11.jpg differ diff --git a/app/src/main/assets/Christmas/12.jpg b/app/src/main/assets/Christmas/12.jpg new file mode 100644 index 0000000..13fd21f Binary files /dev/null and b/app/src/main/assets/Christmas/12.jpg differ diff --git a/app/src/main/assets/Christmas/13.jpg b/app/src/main/assets/Christmas/13.jpg new file mode 100644 index 0000000..1fa30fe Binary files /dev/null and b/app/src/main/assets/Christmas/13.jpg differ diff --git a/app/src/main/assets/Christmas/14.jpg b/app/src/main/assets/Christmas/14.jpg new file mode 100644 index 0000000..aec6dcf Binary files /dev/null and b/app/src/main/assets/Christmas/14.jpg differ diff --git a/app/src/main/assets/Christmas/15.jpg b/app/src/main/assets/Christmas/15.jpg new file mode 100644 index 0000000..647c8b6 Binary files /dev/null and b/app/src/main/assets/Christmas/15.jpg differ diff --git a/app/src/main/assets/Christmas/16.jpg b/app/src/main/assets/Christmas/16.jpg new file mode 100644 index 0000000..b36a79c Binary files /dev/null and b/app/src/main/assets/Christmas/16.jpg differ diff --git a/app/src/main/assets/Christmas/17.jpg b/app/src/main/assets/Christmas/17.jpg new file mode 100644 index 0000000..2655af2 Binary files /dev/null and b/app/src/main/assets/Christmas/17.jpg differ diff --git a/app/src/main/assets/Christmas/18.jpg b/app/src/main/assets/Christmas/18.jpg new file mode 100644 index 0000000..e784d64 Binary files /dev/null and b/app/src/main/assets/Christmas/18.jpg differ diff --git a/app/src/main/assets/Christmas/19.jpg b/app/src/main/assets/Christmas/19.jpg new file mode 100644 index 0000000..fcf2085 Binary files /dev/null and b/app/src/main/assets/Christmas/19.jpg differ diff --git a/app/src/main/assets/Christmas/2.jpg b/app/src/main/assets/Christmas/2.jpg new file mode 100644 index 0000000..326e86b Binary files /dev/null and b/app/src/main/assets/Christmas/2.jpg differ diff --git a/app/src/main/assets/Christmas/20.jpg b/app/src/main/assets/Christmas/20.jpg new file mode 100644 index 0000000..a9e3c89 Binary files /dev/null and b/app/src/main/assets/Christmas/20.jpg differ diff --git a/app/src/main/assets/Christmas/21.jpg b/app/src/main/assets/Christmas/21.jpg new file mode 100644 index 0000000..71b4150 Binary files /dev/null and b/app/src/main/assets/Christmas/21.jpg differ diff --git a/app/src/main/assets/Christmas/22.jpg b/app/src/main/assets/Christmas/22.jpg new file mode 100644 index 0000000..3c99d0d Binary files /dev/null and b/app/src/main/assets/Christmas/22.jpg differ diff --git a/app/src/main/assets/Christmas/23.jpg b/app/src/main/assets/Christmas/23.jpg new file mode 100644 index 0000000..32c3b03 Binary files /dev/null and b/app/src/main/assets/Christmas/23.jpg differ diff --git a/app/src/main/assets/Christmas/24.jpg b/app/src/main/assets/Christmas/24.jpg new file mode 100644 index 0000000..80fd836 Binary files /dev/null and b/app/src/main/assets/Christmas/24.jpg differ diff --git a/app/src/main/assets/Christmas/25.jpg b/app/src/main/assets/Christmas/25.jpg new file mode 100644 index 0000000..8e2bef6 Binary files /dev/null and b/app/src/main/assets/Christmas/25.jpg differ diff --git a/app/src/main/assets/Christmas/3.jpg b/app/src/main/assets/Christmas/3.jpg new file mode 100644 index 0000000..4c24cd2 Binary files /dev/null and b/app/src/main/assets/Christmas/3.jpg differ diff --git a/app/src/main/assets/Christmas/4.jpg b/app/src/main/assets/Christmas/4.jpg new file mode 100644 index 0000000..28fb1b0 Binary files /dev/null and b/app/src/main/assets/Christmas/4.jpg differ diff --git a/app/src/main/assets/Christmas/5.jpg b/app/src/main/assets/Christmas/5.jpg new file mode 100644 index 0000000..93ad555 Binary files /dev/null and b/app/src/main/assets/Christmas/5.jpg differ diff --git a/app/src/main/assets/Christmas/6.jpg b/app/src/main/assets/Christmas/6.jpg new file mode 100644 index 0000000..02fe302 Binary files /dev/null and b/app/src/main/assets/Christmas/6.jpg differ diff --git a/app/src/main/assets/Christmas/7.jpg b/app/src/main/assets/Christmas/7.jpg new file mode 100644 index 0000000..dc41982 Binary files /dev/null and b/app/src/main/assets/Christmas/7.jpg differ diff --git a/app/src/main/assets/Christmas/8.jpg b/app/src/main/assets/Christmas/8.jpg new file mode 100644 index 0000000..5f13019 Binary files /dev/null and b/app/src/main/assets/Christmas/8.jpg differ diff --git a/app/src/main/assets/Christmas/9.jpg b/app/src/main/assets/Christmas/9.jpg new file mode 100644 index 0000000..e556980 Binary files /dev/null and b/app/src/main/assets/Christmas/9.jpg differ diff --git a/app/src/main/assets/Festivals/1.jpg b/app/src/main/assets/Festivals/1.jpg new file mode 100644 index 0000000..125d632 Binary files /dev/null and b/app/src/main/assets/Festivals/1.jpg differ diff --git a/app/src/main/assets/Festivals/10.jpg b/app/src/main/assets/Festivals/10.jpg new file mode 100644 index 0000000..d17b9f1 Binary files /dev/null and b/app/src/main/assets/Festivals/10.jpg differ diff --git a/app/src/main/assets/Festivals/11.jpg b/app/src/main/assets/Festivals/11.jpg new file mode 100644 index 0000000..702f052 Binary files /dev/null and b/app/src/main/assets/Festivals/11.jpg differ diff --git a/app/src/main/assets/Festivals/12.jpg b/app/src/main/assets/Festivals/12.jpg new file mode 100644 index 0000000..6f231e1 Binary files /dev/null and b/app/src/main/assets/Festivals/12.jpg differ diff --git a/app/src/main/assets/Festivals/13.jpg b/app/src/main/assets/Festivals/13.jpg new file mode 100644 index 0000000..20556a1 Binary files /dev/null and b/app/src/main/assets/Festivals/13.jpg differ diff --git a/app/src/main/assets/Festivals/14.jpg b/app/src/main/assets/Festivals/14.jpg new file mode 100644 index 0000000..fb78127 Binary files /dev/null and b/app/src/main/assets/Festivals/14.jpg differ diff --git a/app/src/main/assets/Festivals/15.jpg b/app/src/main/assets/Festivals/15.jpg new file mode 100644 index 0000000..e74f47e Binary files /dev/null and b/app/src/main/assets/Festivals/15.jpg differ diff --git a/app/src/main/assets/Festivals/16.jpg b/app/src/main/assets/Festivals/16.jpg new file mode 100644 index 0000000..136f6e8 Binary files /dev/null and b/app/src/main/assets/Festivals/16.jpg differ diff --git a/app/src/main/assets/Festivals/17.jpg b/app/src/main/assets/Festivals/17.jpg new file mode 100644 index 0000000..fd50e67 Binary files /dev/null and b/app/src/main/assets/Festivals/17.jpg differ diff --git a/app/src/main/assets/Festivals/18.jpg b/app/src/main/assets/Festivals/18.jpg new file mode 100644 index 0000000..d3f7936 Binary files /dev/null and b/app/src/main/assets/Festivals/18.jpg differ diff --git a/app/src/main/assets/Festivals/19.jpg b/app/src/main/assets/Festivals/19.jpg new file mode 100644 index 0000000..9a4f1b8 Binary files /dev/null and b/app/src/main/assets/Festivals/19.jpg differ diff --git a/app/src/main/assets/Festivals/2.jpg b/app/src/main/assets/Festivals/2.jpg new file mode 100644 index 0000000..84aa31a Binary files /dev/null and b/app/src/main/assets/Festivals/2.jpg differ diff --git a/app/src/main/assets/Festivals/20.jpg b/app/src/main/assets/Festivals/20.jpg new file mode 100644 index 0000000..268c943 Binary files /dev/null and b/app/src/main/assets/Festivals/20.jpg differ diff --git a/app/src/main/assets/Festivals/21.jpg b/app/src/main/assets/Festivals/21.jpg new file mode 100644 index 0000000..614bffd Binary files /dev/null and b/app/src/main/assets/Festivals/21.jpg differ diff --git a/app/src/main/assets/Festivals/22.jpg b/app/src/main/assets/Festivals/22.jpg new file mode 100644 index 0000000..f81eb8d Binary files /dev/null and b/app/src/main/assets/Festivals/22.jpg differ diff --git a/app/src/main/assets/Festivals/3.jpg b/app/src/main/assets/Festivals/3.jpg new file mode 100644 index 0000000..5ca2b11 Binary files /dev/null and b/app/src/main/assets/Festivals/3.jpg differ diff --git a/app/src/main/assets/Festivals/4.jpg b/app/src/main/assets/Festivals/4.jpg new file mode 100644 index 0000000..1f8cc81 Binary files /dev/null and b/app/src/main/assets/Festivals/4.jpg differ diff --git a/app/src/main/assets/Festivals/5.jpg b/app/src/main/assets/Festivals/5.jpg new file mode 100644 index 0000000..7f1bd1a Binary files /dev/null and b/app/src/main/assets/Festivals/5.jpg differ diff --git a/app/src/main/assets/Festivals/6.jpg b/app/src/main/assets/Festivals/6.jpg new file mode 100644 index 0000000..9cf832a Binary files /dev/null and b/app/src/main/assets/Festivals/6.jpg differ diff --git a/app/src/main/assets/Festivals/7.jpg b/app/src/main/assets/Festivals/7.jpg new file mode 100644 index 0000000..dcd83f3 Binary files /dev/null and b/app/src/main/assets/Festivals/7.jpg differ diff --git a/app/src/main/assets/Festivals/8.jpg b/app/src/main/assets/Festivals/8.jpg new file mode 100644 index 0000000..1117f09 Binary files /dev/null and b/app/src/main/assets/Festivals/8.jpg differ diff --git a/app/src/main/assets/Festivals/9.jpg b/app/src/main/assets/Festivals/9.jpg new file mode 100644 index 0000000..39d8467 Binary files /dev/null and b/app/src/main/assets/Festivals/9.jpg differ diff --git a/app/src/main/assets/Flowers/1.jpg b/app/src/main/assets/Flowers/1.jpg new file mode 100644 index 0000000..217d9c8 Binary files /dev/null and b/app/src/main/assets/Flowers/1.jpg differ diff --git a/app/src/main/assets/Flowers/10.jpg b/app/src/main/assets/Flowers/10.jpg new file mode 100644 index 0000000..ba84e61 Binary files /dev/null and b/app/src/main/assets/Flowers/10.jpg differ diff --git a/app/src/main/assets/Flowers/11.jpg b/app/src/main/assets/Flowers/11.jpg new file mode 100644 index 0000000..e579753 Binary files /dev/null and b/app/src/main/assets/Flowers/11.jpg differ diff --git a/app/src/main/assets/Flowers/12.jpg b/app/src/main/assets/Flowers/12.jpg new file mode 100644 index 0000000..26092f9 Binary files /dev/null and b/app/src/main/assets/Flowers/12.jpg differ diff --git a/app/src/main/assets/Flowers/13.jpg b/app/src/main/assets/Flowers/13.jpg new file mode 100644 index 0000000..41d2df3 Binary files /dev/null and b/app/src/main/assets/Flowers/13.jpg differ diff --git a/app/src/main/assets/Flowers/14.jpg b/app/src/main/assets/Flowers/14.jpg new file mode 100644 index 0000000..c44df66 Binary files /dev/null and b/app/src/main/assets/Flowers/14.jpg differ diff --git a/app/src/main/assets/Flowers/15.jpg b/app/src/main/assets/Flowers/15.jpg new file mode 100644 index 0000000..ea34d36 Binary files /dev/null and b/app/src/main/assets/Flowers/15.jpg differ diff --git a/app/src/main/assets/Flowers/16.jpg b/app/src/main/assets/Flowers/16.jpg new file mode 100644 index 0000000..506beb1 Binary files /dev/null and b/app/src/main/assets/Flowers/16.jpg differ diff --git a/app/src/main/assets/Flowers/17.jpg b/app/src/main/assets/Flowers/17.jpg new file mode 100644 index 0000000..3764b21 Binary files /dev/null and b/app/src/main/assets/Flowers/17.jpg differ diff --git a/app/src/main/assets/Flowers/18.jpg b/app/src/main/assets/Flowers/18.jpg new file mode 100644 index 0000000..a759ab6 Binary files /dev/null and b/app/src/main/assets/Flowers/18.jpg differ diff --git a/app/src/main/assets/Flowers/19.jpg b/app/src/main/assets/Flowers/19.jpg new file mode 100644 index 0000000..e8c2a84 Binary files /dev/null and b/app/src/main/assets/Flowers/19.jpg differ diff --git a/app/src/main/assets/Flowers/2.jpg b/app/src/main/assets/Flowers/2.jpg new file mode 100644 index 0000000..fb7e56f Binary files /dev/null and b/app/src/main/assets/Flowers/2.jpg differ diff --git a/app/src/main/assets/Flowers/20.jpg b/app/src/main/assets/Flowers/20.jpg new file mode 100644 index 0000000..93e5408 Binary files /dev/null and b/app/src/main/assets/Flowers/20.jpg differ diff --git a/app/src/main/assets/Flowers/21.jpg b/app/src/main/assets/Flowers/21.jpg new file mode 100644 index 0000000..4fa3a77 Binary files /dev/null and b/app/src/main/assets/Flowers/21.jpg differ diff --git a/app/src/main/assets/Flowers/22.jpg b/app/src/main/assets/Flowers/22.jpg new file mode 100644 index 0000000..6f45df7 Binary files /dev/null and b/app/src/main/assets/Flowers/22.jpg differ diff --git a/app/src/main/assets/Flowers/23.jpg b/app/src/main/assets/Flowers/23.jpg new file mode 100644 index 0000000..46e806d Binary files /dev/null and b/app/src/main/assets/Flowers/23.jpg differ diff --git a/app/src/main/assets/Flowers/3.jpg b/app/src/main/assets/Flowers/3.jpg new file mode 100644 index 0000000..22a741c Binary files /dev/null and b/app/src/main/assets/Flowers/3.jpg differ diff --git a/app/src/main/assets/Flowers/4.jpg b/app/src/main/assets/Flowers/4.jpg new file mode 100644 index 0000000..dd0a30f Binary files /dev/null and b/app/src/main/assets/Flowers/4.jpg differ diff --git a/app/src/main/assets/Flowers/5.jpg b/app/src/main/assets/Flowers/5.jpg new file mode 100644 index 0000000..9dcb4f5 Binary files /dev/null and b/app/src/main/assets/Flowers/5.jpg differ diff --git a/app/src/main/assets/Flowers/6.jpg b/app/src/main/assets/Flowers/6.jpg new file mode 100644 index 0000000..cdf1f65 Binary files /dev/null and b/app/src/main/assets/Flowers/6.jpg differ diff --git a/app/src/main/assets/Flowers/7.jpg b/app/src/main/assets/Flowers/7.jpg new file mode 100644 index 0000000..caab990 Binary files /dev/null and b/app/src/main/assets/Flowers/7.jpg differ diff --git a/app/src/main/assets/Flowers/8.jpg b/app/src/main/assets/Flowers/8.jpg new file mode 100644 index 0000000..c43832b Binary files /dev/null and b/app/src/main/assets/Flowers/8.jpg differ diff --git a/app/src/main/assets/Flowers/9.jpg b/app/src/main/assets/Flowers/9.jpg new file mode 100644 index 0000000..5b78ee1 Binary files /dev/null and b/app/src/main/assets/Flowers/9.jpg differ diff --git a/app/src/main/assets/Fruits/1.jpg b/app/src/main/assets/Fruits/1.jpg new file mode 100644 index 0000000..767c0b4 Binary files /dev/null and b/app/src/main/assets/Fruits/1.jpg differ diff --git a/app/src/main/assets/Fruits/10.jpg b/app/src/main/assets/Fruits/10.jpg new file mode 100644 index 0000000..95bdbca Binary files /dev/null and b/app/src/main/assets/Fruits/10.jpg differ diff --git a/app/src/main/assets/Fruits/11.jpg b/app/src/main/assets/Fruits/11.jpg new file mode 100644 index 0000000..b0bb89a Binary files /dev/null and b/app/src/main/assets/Fruits/11.jpg differ diff --git a/app/src/main/assets/Fruits/12.jpg b/app/src/main/assets/Fruits/12.jpg new file mode 100644 index 0000000..c1d9bad Binary files /dev/null and b/app/src/main/assets/Fruits/12.jpg differ diff --git a/app/src/main/assets/Fruits/13.jpg b/app/src/main/assets/Fruits/13.jpg new file mode 100644 index 0000000..f44fb86 Binary files /dev/null and b/app/src/main/assets/Fruits/13.jpg differ diff --git a/app/src/main/assets/Fruits/14.jpg b/app/src/main/assets/Fruits/14.jpg new file mode 100644 index 0000000..459a60c Binary files /dev/null and b/app/src/main/assets/Fruits/14.jpg differ diff --git a/app/src/main/assets/Fruits/15.jpg b/app/src/main/assets/Fruits/15.jpg new file mode 100644 index 0000000..a4e4abe Binary files /dev/null and b/app/src/main/assets/Fruits/15.jpg differ diff --git a/app/src/main/assets/Fruits/16.jpg b/app/src/main/assets/Fruits/16.jpg new file mode 100644 index 0000000..33a7a9a Binary files /dev/null and b/app/src/main/assets/Fruits/16.jpg differ diff --git a/app/src/main/assets/Fruits/17.jpg b/app/src/main/assets/Fruits/17.jpg new file mode 100644 index 0000000..c193b1e Binary files /dev/null and b/app/src/main/assets/Fruits/17.jpg differ diff --git a/app/src/main/assets/Fruits/18.jpg b/app/src/main/assets/Fruits/18.jpg new file mode 100644 index 0000000..f0ca248 Binary files /dev/null and b/app/src/main/assets/Fruits/18.jpg differ diff --git a/app/src/main/assets/Fruits/19.jpg b/app/src/main/assets/Fruits/19.jpg new file mode 100644 index 0000000..d93dfde Binary files /dev/null and b/app/src/main/assets/Fruits/19.jpg differ diff --git a/app/src/main/assets/Fruits/2.jpg b/app/src/main/assets/Fruits/2.jpg new file mode 100644 index 0000000..b32f9f5 Binary files /dev/null and b/app/src/main/assets/Fruits/2.jpg differ diff --git a/app/src/main/assets/Fruits/20.jpg b/app/src/main/assets/Fruits/20.jpg new file mode 100644 index 0000000..cc3fe93 Binary files /dev/null and b/app/src/main/assets/Fruits/20.jpg differ diff --git a/app/src/main/assets/Fruits/21.jpg b/app/src/main/assets/Fruits/21.jpg new file mode 100644 index 0000000..c1813eb Binary files /dev/null and b/app/src/main/assets/Fruits/21.jpg differ diff --git a/app/src/main/assets/Fruits/22.jpg b/app/src/main/assets/Fruits/22.jpg new file mode 100644 index 0000000..47387e1 Binary files /dev/null and b/app/src/main/assets/Fruits/22.jpg differ diff --git a/app/src/main/assets/Fruits/23.jpg b/app/src/main/assets/Fruits/23.jpg new file mode 100644 index 0000000..7f173ec Binary files /dev/null and b/app/src/main/assets/Fruits/23.jpg differ diff --git a/app/src/main/assets/Fruits/24.jpg b/app/src/main/assets/Fruits/24.jpg new file mode 100644 index 0000000..a7ae235 Binary files /dev/null and b/app/src/main/assets/Fruits/24.jpg differ diff --git a/app/src/main/assets/Fruits/25.jpg b/app/src/main/assets/Fruits/25.jpg new file mode 100644 index 0000000..dd664bb Binary files /dev/null and b/app/src/main/assets/Fruits/25.jpg differ diff --git a/app/src/main/assets/Fruits/26.jpg b/app/src/main/assets/Fruits/26.jpg new file mode 100644 index 0000000..c8e4723 Binary files /dev/null and b/app/src/main/assets/Fruits/26.jpg differ diff --git a/app/src/main/assets/Fruits/27.jpg b/app/src/main/assets/Fruits/27.jpg new file mode 100644 index 0000000..816337d Binary files /dev/null and b/app/src/main/assets/Fruits/27.jpg differ diff --git a/app/src/main/assets/Fruits/28.jpg b/app/src/main/assets/Fruits/28.jpg new file mode 100644 index 0000000..29973d5 Binary files /dev/null and b/app/src/main/assets/Fruits/28.jpg differ diff --git a/app/src/main/assets/Fruits/29.jpg b/app/src/main/assets/Fruits/29.jpg new file mode 100644 index 0000000..4f0750f Binary files /dev/null and b/app/src/main/assets/Fruits/29.jpg differ diff --git a/app/src/main/assets/Fruits/3.jpg b/app/src/main/assets/Fruits/3.jpg new file mode 100644 index 0000000..f57893b Binary files /dev/null and b/app/src/main/assets/Fruits/3.jpg differ diff --git a/app/src/main/assets/Fruits/30.jpg b/app/src/main/assets/Fruits/30.jpg new file mode 100644 index 0000000..cfd117a Binary files /dev/null and b/app/src/main/assets/Fruits/30.jpg differ diff --git a/app/src/main/assets/Fruits/31.jpg b/app/src/main/assets/Fruits/31.jpg new file mode 100644 index 0000000..b59a7c5 Binary files /dev/null and b/app/src/main/assets/Fruits/31.jpg differ diff --git a/app/src/main/assets/Fruits/32.jpg b/app/src/main/assets/Fruits/32.jpg new file mode 100644 index 0000000..8f70790 Binary files /dev/null and b/app/src/main/assets/Fruits/32.jpg differ diff --git a/app/src/main/assets/Fruits/33.jpg b/app/src/main/assets/Fruits/33.jpg new file mode 100644 index 0000000..373b142 Binary files /dev/null and b/app/src/main/assets/Fruits/33.jpg differ diff --git a/app/src/main/assets/Fruits/34.jpg b/app/src/main/assets/Fruits/34.jpg new file mode 100644 index 0000000..c5beb91 Binary files /dev/null and b/app/src/main/assets/Fruits/34.jpg differ diff --git a/app/src/main/assets/Fruits/35.jpg b/app/src/main/assets/Fruits/35.jpg new file mode 100644 index 0000000..79cd667 Binary files /dev/null and b/app/src/main/assets/Fruits/35.jpg differ diff --git a/app/src/main/assets/Fruits/36.jpg b/app/src/main/assets/Fruits/36.jpg new file mode 100644 index 0000000..c0cb185 Binary files /dev/null and b/app/src/main/assets/Fruits/36.jpg differ diff --git a/app/src/main/assets/Fruits/37.jpg b/app/src/main/assets/Fruits/37.jpg new file mode 100644 index 0000000..ba1b245 Binary files /dev/null and b/app/src/main/assets/Fruits/37.jpg differ diff --git a/app/src/main/assets/Fruits/38.jpg b/app/src/main/assets/Fruits/38.jpg new file mode 100644 index 0000000..c7eccb8 Binary files /dev/null and b/app/src/main/assets/Fruits/38.jpg differ diff --git a/app/src/main/assets/Fruits/39.jpg b/app/src/main/assets/Fruits/39.jpg new file mode 100644 index 0000000..bc95aaa Binary files /dev/null and b/app/src/main/assets/Fruits/39.jpg differ diff --git a/app/src/main/assets/Fruits/4.jpg b/app/src/main/assets/Fruits/4.jpg new file mode 100644 index 0000000..2d7465d Binary files /dev/null and b/app/src/main/assets/Fruits/4.jpg differ diff --git a/app/src/main/assets/Fruits/5.jpg b/app/src/main/assets/Fruits/5.jpg new file mode 100644 index 0000000..8ed633f Binary files /dev/null and b/app/src/main/assets/Fruits/5.jpg differ diff --git a/app/src/main/assets/Fruits/6.jpg b/app/src/main/assets/Fruits/6.jpg new file mode 100644 index 0000000..06ce330 Binary files /dev/null and b/app/src/main/assets/Fruits/6.jpg differ diff --git a/app/src/main/assets/Fruits/7.jpg b/app/src/main/assets/Fruits/7.jpg new file mode 100644 index 0000000..6153618 Binary files /dev/null and b/app/src/main/assets/Fruits/7.jpg differ diff --git a/app/src/main/assets/Fruits/8.jpg b/app/src/main/assets/Fruits/8.jpg new file mode 100644 index 0000000..e333f0f Binary files /dev/null and b/app/src/main/assets/Fruits/8.jpg differ diff --git a/app/src/main/assets/Fruits/9.jpg b/app/src/main/assets/Fruits/9.jpg new file mode 100644 index 0000000..d549d15 Binary files /dev/null and b/app/src/main/assets/Fruits/9.jpg differ diff --git a/app/src/main/assets/General/1.jpg b/app/src/main/assets/General/1.jpg new file mode 100644 index 0000000..eb7c14b Binary files /dev/null and b/app/src/main/assets/General/1.jpg differ diff --git a/app/src/main/assets/General/10.jpg b/app/src/main/assets/General/10.jpg new file mode 100644 index 0000000..eacd298 Binary files /dev/null and b/app/src/main/assets/General/10.jpg differ diff --git a/app/src/main/assets/General/11.jpg b/app/src/main/assets/General/11.jpg new file mode 100644 index 0000000..273a876 Binary files /dev/null and b/app/src/main/assets/General/11.jpg differ diff --git a/app/src/main/assets/General/12.jpg b/app/src/main/assets/General/12.jpg new file mode 100644 index 0000000..5d786c5 Binary files /dev/null and b/app/src/main/assets/General/12.jpg differ diff --git a/app/src/main/assets/General/13.jpg b/app/src/main/assets/General/13.jpg new file mode 100644 index 0000000..486441a Binary files /dev/null and b/app/src/main/assets/General/13.jpg differ diff --git a/app/src/main/assets/General/14.jpg b/app/src/main/assets/General/14.jpg new file mode 100644 index 0000000..c36516b Binary files /dev/null and b/app/src/main/assets/General/14.jpg differ diff --git a/app/src/main/assets/General/15.jpg b/app/src/main/assets/General/15.jpg new file mode 100644 index 0000000..9d19fdf Binary files /dev/null and b/app/src/main/assets/General/15.jpg differ diff --git a/app/src/main/assets/General/2.jpg b/app/src/main/assets/General/2.jpg new file mode 100644 index 0000000..090d5d5 Binary files /dev/null and b/app/src/main/assets/General/2.jpg differ diff --git a/app/src/main/assets/General/3.jpg b/app/src/main/assets/General/3.jpg new file mode 100644 index 0000000..a17f1b2 Binary files /dev/null and b/app/src/main/assets/General/3.jpg differ diff --git a/app/src/main/assets/General/4.jpg b/app/src/main/assets/General/4.jpg new file mode 100644 index 0000000..2f4d8a2 Binary files /dev/null and b/app/src/main/assets/General/4.jpg differ diff --git a/app/src/main/assets/General/5.jpg b/app/src/main/assets/General/5.jpg new file mode 100644 index 0000000..8ac1cdb Binary files /dev/null and b/app/src/main/assets/General/5.jpg differ diff --git a/app/src/main/assets/General/6.jpg b/app/src/main/assets/General/6.jpg new file mode 100644 index 0000000..95cc582 Binary files /dev/null and b/app/src/main/assets/General/6.jpg differ diff --git a/app/src/main/assets/General/7.jpg b/app/src/main/assets/General/7.jpg new file mode 100644 index 0000000..91cbcfd Binary files /dev/null and b/app/src/main/assets/General/7.jpg differ diff --git a/app/src/main/assets/General/8.jpg b/app/src/main/assets/General/8.jpg new file mode 100644 index 0000000..af8da73 Binary files /dev/null and b/app/src/main/assets/General/8.jpg differ diff --git a/app/src/main/assets/General/9.jpg b/app/src/main/assets/General/9.jpg new file mode 100644 index 0000000..d5cfb72 Binary files /dev/null and b/app/src/main/assets/General/9.jpg differ diff --git a/app/src/main/assets/Mehndi/1.jpg b/app/src/main/assets/Mehndi/1.jpg new file mode 100644 index 0000000..8dd8843 Binary files /dev/null and b/app/src/main/assets/Mehndi/1.jpg differ diff --git a/app/src/main/assets/Mehndi/10.jpg b/app/src/main/assets/Mehndi/10.jpg new file mode 100644 index 0000000..2432a79 Binary files /dev/null and b/app/src/main/assets/Mehndi/10.jpg differ diff --git a/app/src/main/assets/Mehndi/11.jpg b/app/src/main/assets/Mehndi/11.jpg new file mode 100644 index 0000000..aba85bf Binary files /dev/null and b/app/src/main/assets/Mehndi/11.jpg differ diff --git a/app/src/main/assets/Mehndi/12.jpg b/app/src/main/assets/Mehndi/12.jpg new file mode 100644 index 0000000..f71ae22 Binary files /dev/null and b/app/src/main/assets/Mehndi/12.jpg differ diff --git a/app/src/main/assets/Mehndi/2.jpg b/app/src/main/assets/Mehndi/2.jpg new file mode 100644 index 0000000..0f56bf7 Binary files /dev/null and b/app/src/main/assets/Mehndi/2.jpg differ diff --git a/app/src/main/assets/Mehndi/3.jpg b/app/src/main/assets/Mehndi/3.jpg new file mode 100644 index 0000000..2bc7b69 Binary files /dev/null and b/app/src/main/assets/Mehndi/3.jpg differ diff --git a/app/src/main/assets/Mehndi/4.jpg b/app/src/main/assets/Mehndi/4.jpg new file mode 100644 index 0000000..6fc3f70 Binary files /dev/null and b/app/src/main/assets/Mehndi/4.jpg differ diff --git a/app/src/main/assets/Mehndi/5.jpg b/app/src/main/assets/Mehndi/5.jpg new file mode 100644 index 0000000..dccb5cf Binary files /dev/null and b/app/src/main/assets/Mehndi/5.jpg differ diff --git a/app/src/main/assets/Mehndi/6.jpg b/app/src/main/assets/Mehndi/6.jpg new file mode 100644 index 0000000..4e052dd Binary files /dev/null and b/app/src/main/assets/Mehndi/6.jpg differ diff --git a/app/src/main/assets/Mehndi/7.jpg b/app/src/main/assets/Mehndi/7.jpg new file mode 100644 index 0000000..021e789 Binary files /dev/null and b/app/src/main/assets/Mehndi/7.jpg differ diff --git a/app/src/main/assets/Mehndi/8.jpg b/app/src/main/assets/Mehndi/8.jpg new file mode 100644 index 0000000..dd45b50 Binary files /dev/null and b/app/src/main/assets/Mehndi/8.jpg differ diff --git a/app/src/main/assets/Mehndi/9.jpg b/app/src/main/assets/Mehndi/9.jpg new file mode 100644 index 0000000..6ff2300 Binary files /dev/null and b/app/src/main/assets/Mehndi/9.jpg differ diff --git a/app/src/main/assets/Nature/1.jpg b/app/src/main/assets/Nature/1.jpg new file mode 100644 index 0000000..22c00e3 Binary files /dev/null and b/app/src/main/assets/Nature/1.jpg differ diff --git a/app/src/main/assets/Nature/10.jpg b/app/src/main/assets/Nature/10.jpg new file mode 100644 index 0000000..65aab09 Binary files /dev/null and b/app/src/main/assets/Nature/10.jpg differ diff --git a/app/src/main/assets/Nature/11.jpg b/app/src/main/assets/Nature/11.jpg new file mode 100644 index 0000000..23c6653 Binary files /dev/null and b/app/src/main/assets/Nature/11.jpg differ diff --git a/app/src/main/assets/Nature/12.jpg b/app/src/main/assets/Nature/12.jpg new file mode 100644 index 0000000..36e1835 Binary files /dev/null and b/app/src/main/assets/Nature/12.jpg differ diff --git a/app/src/main/assets/Nature/13.jpg b/app/src/main/assets/Nature/13.jpg new file mode 100644 index 0000000..5816b61 Binary files /dev/null and b/app/src/main/assets/Nature/13.jpg differ diff --git a/app/src/main/assets/Nature/14.jpg b/app/src/main/assets/Nature/14.jpg new file mode 100644 index 0000000..b4e5dc6 Binary files /dev/null and b/app/src/main/assets/Nature/14.jpg differ diff --git a/app/src/main/assets/Nature/15.jpg b/app/src/main/assets/Nature/15.jpg new file mode 100644 index 0000000..5424ac4 Binary files /dev/null and b/app/src/main/assets/Nature/15.jpg differ diff --git a/app/src/main/assets/Nature/16.jpg b/app/src/main/assets/Nature/16.jpg new file mode 100644 index 0000000..fd00791 Binary files /dev/null and b/app/src/main/assets/Nature/16.jpg differ diff --git a/app/src/main/assets/Nature/17.jpg b/app/src/main/assets/Nature/17.jpg new file mode 100644 index 0000000..38410e8 Binary files /dev/null and b/app/src/main/assets/Nature/17.jpg differ diff --git a/app/src/main/assets/Nature/18.jpg b/app/src/main/assets/Nature/18.jpg new file mode 100644 index 0000000..5ae5028 Binary files /dev/null and b/app/src/main/assets/Nature/18.jpg differ diff --git a/app/src/main/assets/Nature/19.jpg b/app/src/main/assets/Nature/19.jpg new file mode 100644 index 0000000..e49b4f1 Binary files /dev/null and b/app/src/main/assets/Nature/19.jpg differ diff --git a/app/src/main/assets/Nature/2.jpg b/app/src/main/assets/Nature/2.jpg new file mode 100644 index 0000000..3b5ec4c Binary files /dev/null and b/app/src/main/assets/Nature/2.jpg differ diff --git a/app/src/main/assets/Nature/20.jpg b/app/src/main/assets/Nature/20.jpg new file mode 100644 index 0000000..cc94724 Binary files /dev/null and b/app/src/main/assets/Nature/20.jpg differ diff --git a/app/src/main/assets/Nature/21.jpg b/app/src/main/assets/Nature/21.jpg new file mode 100644 index 0000000..dfa6c09 Binary files /dev/null and b/app/src/main/assets/Nature/21.jpg differ diff --git a/app/src/main/assets/Nature/22.jpg b/app/src/main/assets/Nature/22.jpg new file mode 100644 index 0000000..c05e638 Binary files /dev/null and b/app/src/main/assets/Nature/22.jpg differ diff --git a/app/src/main/assets/Nature/23.jpg b/app/src/main/assets/Nature/23.jpg new file mode 100644 index 0000000..6f932ec Binary files /dev/null and b/app/src/main/assets/Nature/23.jpg differ diff --git a/app/src/main/assets/Nature/3.jpg b/app/src/main/assets/Nature/3.jpg new file mode 100644 index 0000000..1423546 Binary files /dev/null and b/app/src/main/assets/Nature/3.jpg differ diff --git a/app/src/main/assets/Nature/4.jpg b/app/src/main/assets/Nature/4.jpg new file mode 100644 index 0000000..5499510 Binary files /dev/null and b/app/src/main/assets/Nature/4.jpg differ diff --git a/app/src/main/assets/Nature/5.jpg b/app/src/main/assets/Nature/5.jpg new file mode 100644 index 0000000..434261a Binary files /dev/null and b/app/src/main/assets/Nature/5.jpg differ diff --git a/app/src/main/assets/Nature/6.jpg b/app/src/main/assets/Nature/6.jpg new file mode 100644 index 0000000..f50166b Binary files /dev/null and b/app/src/main/assets/Nature/6.jpg differ diff --git a/app/src/main/assets/Nature/7.jpg b/app/src/main/assets/Nature/7.jpg new file mode 100644 index 0000000..96e178c Binary files /dev/null and b/app/src/main/assets/Nature/7.jpg differ diff --git a/app/src/main/assets/Nature/8.jpg b/app/src/main/assets/Nature/8.jpg new file mode 100644 index 0000000..c68f4f1 Binary files /dev/null and b/app/src/main/assets/Nature/8.jpg differ diff --git a/app/src/main/assets/Nature/9.jpg b/app/src/main/assets/Nature/9.jpg new file mode 100644 index 0000000..6b8ccb4 Binary files /dev/null and b/app/src/main/assets/Nature/9.jpg differ diff --git a/app/src/main/assets/Properties/1.jpg b/app/src/main/assets/Properties/1.jpg new file mode 100644 index 0000000..3289a38 Binary files /dev/null and b/app/src/main/assets/Properties/1.jpg differ diff --git a/app/src/main/assets/Properties/10.jpg b/app/src/main/assets/Properties/10.jpg new file mode 100644 index 0000000..b065539 Binary files /dev/null and b/app/src/main/assets/Properties/10.jpg differ diff --git a/app/src/main/assets/Properties/11.jpg b/app/src/main/assets/Properties/11.jpg new file mode 100644 index 0000000..12d28b1 Binary files /dev/null and b/app/src/main/assets/Properties/11.jpg differ diff --git a/app/src/main/assets/Properties/12.jpg b/app/src/main/assets/Properties/12.jpg new file mode 100644 index 0000000..182879f Binary files /dev/null and b/app/src/main/assets/Properties/12.jpg differ diff --git a/app/src/main/assets/Properties/13.jpg b/app/src/main/assets/Properties/13.jpg new file mode 100644 index 0000000..4263530 Binary files /dev/null and b/app/src/main/assets/Properties/13.jpg differ diff --git a/app/src/main/assets/Properties/14.jpg b/app/src/main/assets/Properties/14.jpg new file mode 100644 index 0000000..42e4ab3 Binary files /dev/null and b/app/src/main/assets/Properties/14.jpg differ diff --git a/app/src/main/assets/Properties/15.jpg b/app/src/main/assets/Properties/15.jpg new file mode 100644 index 0000000..b529436 Binary files /dev/null and b/app/src/main/assets/Properties/15.jpg differ diff --git a/app/src/main/assets/Properties/16.jpg b/app/src/main/assets/Properties/16.jpg new file mode 100644 index 0000000..85caef0 Binary files /dev/null and b/app/src/main/assets/Properties/16.jpg differ diff --git a/app/src/main/assets/Properties/17.jpg b/app/src/main/assets/Properties/17.jpg new file mode 100644 index 0000000..6295f58 Binary files /dev/null and b/app/src/main/assets/Properties/17.jpg differ diff --git a/app/src/main/assets/Properties/18.jpg b/app/src/main/assets/Properties/18.jpg new file mode 100644 index 0000000..f8e4e87 Binary files /dev/null and b/app/src/main/assets/Properties/18.jpg differ diff --git a/app/src/main/assets/Properties/19.jpg b/app/src/main/assets/Properties/19.jpg new file mode 100644 index 0000000..c476493 Binary files /dev/null and b/app/src/main/assets/Properties/19.jpg differ diff --git a/app/src/main/assets/Properties/2.jpg b/app/src/main/assets/Properties/2.jpg new file mode 100644 index 0000000..084fa51 Binary files /dev/null and b/app/src/main/assets/Properties/2.jpg differ diff --git a/app/src/main/assets/Properties/3.jpg b/app/src/main/assets/Properties/3.jpg new file mode 100644 index 0000000..4ee71c4 Binary files /dev/null and b/app/src/main/assets/Properties/3.jpg differ diff --git a/app/src/main/assets/Properties/4.jpg b/app/src/main/assets/Properties/4.jpg new file mode 100644 index 0000000..25912f1 Binary files /dev/null and b/app/src/main/assets/Properties/4.jpg differ diff --git a/app/src/main/assets/Properties/5.jpg b/app/src/main/assets/Properties/5.jpg new file mode 100644 index 0000000..77c2aa8 Binary files /dev/null and b/app/src/main/assets/Properties/5.jpg differ diff --git a/app/src/main/assets/Properties/6.jpg b/app/src/main/assets/Properties/6.jpg new file mode 100644 index 0000000..75b1e32 Binary files /dev/null and b/app/src/main/assets/Properties/6.jpg differ diff --git a/app/src/main/assets/Properties/7.jpg b/app/src/main/assets/Properties/7.jpg new file mode 100644 index 0000000..f059989 Binary files /dev/null and b/app/src/main/assets/Properties/7.jpg differ diff --git a/app/src/main/assets/Properties/8.jpg b/app/src/main/assets/Properties/8.jpg new file mode 100644 index 0000000..6be97eb Binary files /dev/null and b/app/src/main/assets/Properties/8.jpg differ diff --git a/app/src/main/assets/Properties/9.jpg b/app/src/main/assets/Properties/9.jpg new file mode 100644 index 0000000..626cab9 Binary files /dev/null and b/app/src/main/assets/Properties/9.jpg differ diff --git a/app/src/main/assets/Rangoli/1.jpg b/app/src/main/assets/Rangoli/1.jpg new file mode 100644 index 0000000..e628714 Binary files /dev/null and b/app/src/main/assets/Rangoli/1.jpg differ diff --git a/app/src/main/assets/Rangoli/10.jpg b/app/src/main/assets/Rangoli/10.jpg new file mode 100644 index 0000000..f6e9d09 Binary files /dev/null and b/app/src/main/assets/Rangoli/10.jpg differ diff --git a/app/src/main/assets/Rangoli/13.jpg b/app/src/main/assets/Rangoli/13.jpg new file mode 100644 index 0000000..9741d57 Binary files /dev/null and b/app/src/main/assets/Rangoli/13.jpg differ diff --git a/app/src/main/assets/Rangoli/14.jpg b/app/src/main/assets/Rangoli/14.jpg new file mode 100644 index 0000000..3ca4970 Binary files /dev/null and b/app/src/main/assets/Rangoli/14.jpg differ diff --git a/app/src/main/assets/Rangoli/15.jpg b/app/src/main/assets/Rangoli/15.jpg new file mode 100644 index 0000000..98abac3 Binary files /dev/null and b/app/src/main/assets/Rangoli/15.jpg differ diff --git a/app/src/main/assets/Rangoli/16.jpg b/app/src/main/assets/Rangoli/16.jpg new file mode 100644 index 0000000..150dfdc Binary files /dev/null and b/app/src/main/assets/Rangoli/16.jpg differ diff --git a/app/src/main/assets/Rangoli/17.jpg b/app/src/main/assets/Rangoli/17.jpg new file mode 100644 index 0000000..4127115 Binary files /dev/null and b/app/src/main/assets/Rangoli/17.jpg differ diff --git a/app/src/main/assets/Rangoli/18.jpg b/app/src/main/assets/Rangoli/18.jpg new file mode 100644 index 0000000..6ae96e9 Binary files /dev/null and b/app/src/main/assets/Rangoli/18.jpg differ diff --git a/app/src/main/assets/Rangoli/19.jpg b/app/src/main/assets/Rangoli/19.jpg new file mode 100644 index 0000000..ffcbd6a Binary files /dev/null and b/app/src/main/assets/Rangoli/19.jpg differ diff --git a/app/src/main/assets/Rangoli/2.jpg b/app/src/main/assets/Rangoli/2.jpg new file mode 100644 index 0000000..7329109 Binary files /dev/null and b/app/src/main/assets/Rangoli/2.jpg differ diff --git a/app/src/main/assets/Rangoli/20.jpg b/app/src/main/assets/Rangoli/20.jpg new file mode 100644 index 0000000..b7be138 Binary files /dev/null and b/app/src/main/assets/Rangoli/20.jpg differ diff --git a/app/src/main/assets/Rangoli/21.jpg b/app/src/main/assets/Rangoli/21.jpg new file mode 100644 index 0000000..eaa5fdf Binary files /dev/null and b/app/src/main/assets/Rangoli/21.jpg differ diff --git a/app/src/main/assets/Rangoli/22.jpg b/app/src/main/assets/Rangoli/22.jpg new file mode 100644 index 0000000..28aca48 Binary files /dev/null and b/app/src/main/assets/Rangoli/22.jpg differ diff --git a/app/src/main/assets/Rangoli/23.jpg b/app/src/main/assets/Rangoli/23.jpg new file mode 100644 index 0000000..057d2d4 Binary files /dev/null and b/app/src/main/assets/Rangoli/23.jpg differ diff --git a/app/src/main/assets/Rangoli/24.jpg b/app/src/main/assets/Rangoli/24.jpg new file mode 100644 index 0000000..e933061 Binary files /dev/null and b/app/src/main/assets/Rangoli/24.jpg differ diff --git a/app/src/main/assets/Rangoli/25.jpg b/app/src/main/assets/Rangoli/25.jpg new file mode 100644 index 0000000..569a74c Binary files /dev/null and b/app/src/main/assets/Rangoli/25.jpg differ diff --git a/app/src/main/assets/Rangoli/3.jpg b/app/src/main/assets/Rangoli/3.jpg new file mode 100644 index 0000000..569342c Binary files /dev/null and b/app/src/main/assets/Rangoli/3.jpg differ diff --git a/app/src/main/assets/Rangoli/4.jpg b/app/src/main/assets/Rangoli/4.jpg new file mode 100644 index 0000000..7c5d0de Binary files /dev/null and b/app/src/main/assets/Rangoli/4.jpg differ diff --git a/app/src/main/assets/Rangoli/5.jpg b/app/src/main/assets/Rangoli/5.jpg new file mode 100644 index 0000000..5a3228f Binary files /dev/null and b/app/src/main/assets/Rangoli/5.jpg differ diff --git a/app/src/main/assets/Rangoli/6.jpg b/app/src/main/assets/Rangoli/6.jpg new file mode 100644 index 0000000..270f078 Binary files /dev/null and b/app/src/main/assets/Rangoli/6.jpg differ diff --git a/app/src/main/assets/Rangoli/7.jpg b/app/src/main/assets/Rangoli/7.jpg new file mode 100644 index 0000000..241beac Binary files /dev/null and b/app/src/main/assets/Rangoli/7.jpg differ diff --git a/app/src/main/assets/Rangoli/8.jpg b/app/src/main/assets/Rangoli/8.jpg new file mode 100644 index 0000000..c62e0d7 Binary files /dev/null and b/app/src/main/assets/Rangoli/8.jpg differ diff --git a/app/src/main/assets/Rangoli/9.jpg b/app/src/main/assets/Rangoli/9.jpg new file mode 100644 index 0000000..bcd14a7 Binary files /dev/null and b/app/src/main/assets/Rangoli/9.jpg differ diff --git a/app/src/main/assets/Sports/1.jpg b/app/src/main/assets/Sports/1.jpg new file mode 100644 index 0000000..cd1cb09 Binary files /dev/null and b/app/src/main/assets/Sports/1.jpg differ diff --git a/app/src/main/assets/Sports/10.jpg b/app/src/main/assets/Sports/10.jpg new file mode 100644 index 0000000..2ec81a5 Binary files /dev/null and b/app/src/main/assets/Sports/10.jpg differ diff --git a/app/src/main/assets/Sports/11.jpg b/app/src/main/assets/Sports/11.jpg new file mode 100644 index 0000000..f00ecb5 Binary files /dev/null and b/app/src/main/assets/Sports/11.jpg differ diff --git a/app/src/main/assets/Sports/12.jpg b/app/src/main/assets/Sports/12.jpg new file mode 100644 index 0000000..b004929 Binary files /dev/null and b/app/src/main/assets/Sports/12.jpg differ diff --git a/app/src/main/assets/Sports/13.jpg b/app/src/main/assets/Sports/13.jpg new file mode 100644 index 0000000..73fa886 Binary files /dev/null and b/app/src/main/assets/Sports/13.jpg differ diff --git a/app/src/main/assets/Sports/14.jpg b/app/src/main/assets/Sports/14.jpg new file mode 100644 index 0000000..3d9069e Binary files /dev/null and b/app/src/main/assets/Sports/14.jpg differ diff --git a/app/src/main/assets/Sports/15.jpg b/app/src/main/assets/Sports/15.jpg new file mode 100644 index 0000000..a090c83 Binary files /dev/null and b/app/src/main/assets/Sports/15.jpg differ diff --git a/app/src/main/assets/Sports/16.jpg b/app/src/main/assets/Sports/16.jpg new file mode 100644 index 0000000..185d6e3 Binary files /dev/null and b/app/src/main/assets/Sports/16.jpg differ diff --git a/app/src/main/assets/Sports/17.jpg b/app/src/main/assets/Sports/17.jpg new file mode 100644 index 0000000..b8193fa Binary files /dev/null and b/app/src/main/assets/Sports/17.jpg differ diff --git a/app/src/main/assets/Sports/18.jpg b/app/src/main/assets/Sports/18.jpg new file mode 100644 index 0000000..ba4fcea Binary files /dev/null and b/app/src/main/assets/Sports/18.jpg differ diff --git a/app/src/main/assets/Sports/19.jpg b/app/src/main/assets/Sports/19.jpg new file mode 100644 index 0000000..617c2af Binary files /dev/null and b/app/src/main/assets/Sports/19.jpg differ diff --git a/app/src/main/assets/Sports/2.jpg b/app/src/main/assets/Sports/2.jpg new file mode 100644 index 0000000..59890e5 Binary files /dev/null and b/app/src/main/assets/Sports/2.jpg differ diff --git a/app/src/main/assets/Sports/20.jpg b/app/src/main/assets/Sports/20.jpg new file mode 100644 index 0000000..4032ff4 Binary files /dev/null and b/app/src/main/assets/Sports/20.jpg differ diff --git a/app/src/main/assets/Sports/21.jpg b/app/src/main/assets/Sports/21.jpg new file mode 100644 index 0000000..23979ba Binary files /dev/null and b/app/src/main/assets/Sports/21.jpg differ diff --git a/app/src/main/assets/Sports/22.jpg b/app/src/main/assets/Sports/22.jpg new file mode 100644 index 0000000..c61e91e Binary files /dev/null and b/app/src/main/assets/Sports/22.jpg differ diff --git a/app/src/main/assets/Sports/23.jpg b/app/src/main/assets/Sports/23.jpg new file mode 100644 index 0000000..7bf0806 Binary files /dev/null and b/app/src/main/assets/Sports/23.jpg differ diff --git a/app/src/main/assets/Sports/24.jpg b/app/src/main/assets/Sports/24.jpg new file mode 100644 index 0000000..23cbc17 Binary files /dev/null and b/app/src/main/assets/Sports/24.jpg differ diff --git a/app/src/main/assets/Sports/25.jpg b/app/src/main/assets/Sports/25.jpg new file mode 100644 index 0000000..06d992e Binary files /dev/null and b/app/src/main/assets/Sports/25.jpg differ diff --git a/app/src/main/assets/Sports/26.jpg b/app/src/main/assets/Sports/26.jpg new file mode 100644 index 0000000..26af61e Binary files /dev/null and b/app/src/main/assets/Sports/26.jpg differ diff --git a/app/src/main/assets/Sports/27.jpg b/app/src/main/assets/Sports/27.jpg new file mode 100644 index 0000000..91bf104 Binary files /dev/null and b/app/src/main/assets/Sports/27.jpg differ diff --git a/app/src/main/assets/Sports/28.jpg b/app/src/main/assets/Sports/28.jpg new file mode 100644 index 0000000..8c790e7 Binary files /dev/null and b/app/src/main/assets/Sports/28.jpg differ diff --git a/app/src/main/assets/Sports/3.jpg b/app/src/main/assets/Sports/3.jpg new file mode 100644 index 0000000..8315af5 Binary files /dev/null and b/app/src/main/assets/Sports/3.jpg differ diff --git a/app/src/main/assets/Sports/4.jpg b/app/src/main/assets/Sports/4.jpg new file mode 100644 index 0000000..8070e68 Binary files /dev/null and b/app/src/main/assets/Sports/4.jpg differ diff --git a/app/src/main/assets/Sports/5.jpg b/app/src/main/assets/Sports/5.jpg new file mode 100644 index 0000000..5bcb837 Binary files /dev/null and b/app/src/main/assets/Sports/5.jpg differ diff --git a/app/src/main/assets/Sports/6.jpg b/app/src/main/assets/Sports/6.jpg new file mode 100644 index 0000000..038521f Binary files /dev/null and b/app/src/main/assets/Sports/6.jpg differ diff --git a/app/src/main/assets/Sports/7.jpg b/app/src/main/assets/Sports/7.jpg new file mode 100644 index 0000000..73bf0de Binary files /dev/null and b/app/src/main/assets/Sports/7.jpg differ diff --git a/app/src/main/assets/Sports/8.jpg b/app/src/main/assets/Sports/8.jpg new file mode 100644 index 0000000..6c565f8 Binary files /dev/null and b/app/src/main/assets/Sports/8.jpg differ diff --git a/app/src/main/assets/Sports/9.jpg b/app/src/main/assets/Sports/9.jpg new file mode 100644 index 0000000..130cd94 Binary files /dev/null and b/app/src/main/assets/Sports/9.jpg differ diff --git a/app/src/main/assets/Vehicles/1.jpg b/app/src/main/assets/Vehicles/1.jpg new file mode 100644 index 0000000..da449f7 Binary files /dev/null and b/app/src/main/assets/Vehicles/1.jpg differ diff --git a/app/src/main/assets/Vehicles/10.jpg b/app/src/main/assets/Vehicles/10.jpg new file mode 100644 index 0000000..0084613 Binary files /dev/null and b/app/src/main/assets/Vehicles/10.jpg differ diff --git a/app/src/main/assets/Vehicles/11.jpg b/app/src/main/assets/Vehicles/11.jpg new file mode 100644 index 0000000..ba5f4d4 Binary files /dev/null and b/app/src/main/assets/Vehicles/11.jpg differ diff --git a/app/src/main/assets/Vehicles/12.jpg b/app/src/main/assets/Vehicles/12.jpg new file mode 100644 index 0000000..32c7908 Binary files /dev/null and b/app/src/main/assets/Vehicles/12.jpg differ diff --git a/app/src/main/assets/Vehicles/13.jpg b/app/src/main/assets/Vehicles/13.jpg new file mode 100644 index 0000000..dd47e76 Binary files /dev/null and b/app/src/main/assets/Vehicles/13.jpg differ diff --git a/app/src/main/assets/Vehicles/14.jpg b/app/src/main/assets/Vehicles/14.jpg new file mode 100644 index 0000000..8b886e6 Binary files /dev/null and b/app/src/main/assets/Vehicles/14.jpg differ diff --git a/app/src/main/assets/Vehicles/15.jpg b/app/src/main/assets/Vehicles/15.jpg new file mode 100644 index 0000000..cf78752 Binary files /dev/null and b/app/src/main/assets/Vehicles/15.jpg differ diff --git a/app/src/main/assets/Vehicles/16.jpg b/app/src/main/assets/Vehicles/16.jpg new file mode 100644 index 0000000..87f8a19 Binary files /dev/null and b/app/src/main/assets/Vehicles/16.jpg differ diff --git a/app/src/main/assets/Vehicles/17.jpg b/app/src/main/assets/Vehicles/17.jpg new file mode 100644 index 0000000..011b53b Binary files /dev/null and b/app/src/main/assets/Vehicles/17.jpg differ diff --git a/app/src/main/assets/Vehicles/18.jpg b/app/src/main/assets/Vehicles/18.jpg new file mode 100644 index 0000000..c4433c8 Binary files /dev/null and b/app/src/main/assets/Vehicles/18.jpg differ diff --git a/app/src/main/assets/Vehicles/19.jpg b/app/src/main/assets/Vehicles/19.jpg new file mode 100644 index 0000000..b9361f1 Binary files /dev/null and b/app/src/main/assets/Vehicles/19.jpg differ diff --git a/app/src/main/assets/Vehicles/2.jpg b/app/src/main/assets/Vehicles/2.jpg new file mode 100644 index 0000000..ff06675 Binary files /dev/null and b/app/src/main/assets/Vehicles/2.jpg differ diff --git a/app/src/main/assets/Vehicles/20.jpg b/app/src/main/assets/Vehicles/20.jpg new file mode 100644 index 0000000..3e22c5c Binary files /dev/null and b/app/src/main/assets/Vehicles/20.jpg differ diff --git a/app/src/main/assets/Vehicles/21.jpg b/app/src/main/assets/Vehicles/21.jpg new file mode 100644 index 0000000..f93b99a Binary files /dev/null and b/app/src/main/assets/Vehicles/21.jpg differ diff --git a/app/src/main/assets/Vehicles/22.jpg b/app/src/main/assets/Vehicles/22.jpg new file mode 100644 index 0000000..952afa9 Binary files /dev/null and b/app/src/main/assets/Vehicles/22.jpg differ diff --git a/app/src/main/assets/Vehicles/23.jpg b/app/src/main/assets/Vehicles/23.jpg new file mode 100644 index 0000000..a6e1c25 Binary files /dev/null and b/app/src/main/assets/Vehicles/23.jpg differ diff --git a/app/src/main/assets/Vehicles/24.jpg b/app/src/main/assets/Vehicles/24.jpg new file mode 100644 index 0000000..83c706a Binary files /dev/null and b/app/src/main/assets/Vehicles/24.jpg differ diff --git a/app/src/main/assets/Vehicles/25.jpg b/app/src/main/assets/Vehicles/25.jpg new file mode 100644 index 0000000..6ebdbf7 Binary files /dev/null and b/app/src/main/assets/Vehicles/25.jpg differ diff --git a/app/src/main/assets/Vehicles/26.jpg b/app/src/main/assets/Vehicles/26.jpg new file mode 100644 index 0000000..3805357 Binary files /dev/null and b/app/src/main/assets/Vehicles/26.jpg differ diff --git a/app/src/main/assets/Vehicles/27.jpg b/app/src/main/assets/Vehicles/27.jpg new file mode 100644 index 0000000..0849027 Binary files /dev/null and b/app/src/main/assets/Vehicles/27.jpg differ diff --git a/app/src/main/assets/Vehicles/28.jpg b/app/src/main/assets/Vehicles/28.jpg new file mode 100644 index 0000000..019baa9 Binary files /dev/null and b/app/src/main/assets/Vehicles/28.jpg differ diff --git a/app/src/main/assets/Vehicles/29.jpg b/app/src/main/assets/Vehicles/29.jpg new file mode 100644 index 0000000..c7e0d3a Binary files /dev/null and b/app/src/main/assets/Vehicles/29.jpg differ diff --git a/app/src/main/assets/Vehicles/3.jpg b/app/src/main/assets/Vehicles/3.jpg new file mode 100644 index 0000000..eb33365 Binary files /dev/null and b/app/src/main/assets/Vehicles/3.jpg differ diff --git a/app/src/main/assets/Vehicles/30.jpg b/app/src/main/assets/Vehicles/30.jpg new file mode 100644 index 0000000..3820102 Binary files /dev/null and b/app/src/main/assets/Vehicles/30.jpg differ diff --git a/app/src/main/assets/Vehicles/31.jpg b/app/src/main/assets/Vehicles/31.jpg new file mode 100644 index 0000000..bba9999 Binary files /dev/null and b/app/src/main/assets/Vehicles/31.jpg differ diff --git a/app/src/main/assets/Vehicles/32.jpg b/app/src/main/assets/Vehicles/32.jpg new file mode 100644 index 0000000..6d64a3f Binary files /dev/null and b/app/src/main/assets/Vehicles/32.jpg differ diff --git a/app/src/main/assets/Vehicles/4.jpg b/app/src/main/assets/Vehicles/4.jpg new file mode 100644 index 0000000..968f0ad Binary files /dev/null and b/app/src/main/assets/Vehicles/4.jpg differ diff --git a/app/src/main/assets/Vehicles/5.jpg b/app/src/main/assets/Vehicles/5.jpg new file mode 100644 index 0000000..abdd96c Binary files /dev/null and b/app/src/main/assets/Vehicles/5.jpg differ diff --git a/app/src/main/assets/Vehicles/6.jpg b/app/src/main/assets/Vehicles/6.jpg new file mode 100644 index 0000000..7eeb870 Binary files /dev/null and b/app/src/main/assets/Vehicles/6.jpg differ diff --git a/app/src/main/assets/Vehicles/7.jpg b/app/src/main/assets/Vehicles/7.jpg new file mode 100644 index 0000000..c5e6294 Binary files /dev/null and b/app/src/main/assets/Vehicles/7.jpg differ diff --git a/app/src/main/assets/Vehicles/8.jpg b/app/src/main/assets/Vehicles/8.jpg new file mode 100644 index 0000000..6628782 Binary files /dev/null and b/app/src/main/assets/Vehicles/8.jpg differ diff --git a/app/src/main/assets/Vehicles/9.jpg b/app/src/main/assets/Vehicles/9.jpg new file mode 100644 index 0000000..367b772 Binary files /dev/null and b/app/src/main/assets/Vehicles/9.jpg differ diff --git a/app/src/main/java/com/draw/painting/line/DrawingApp.java b/app/src/main/java/com/draw/painting/line/DrawingApp.java new file mode 100644 index 0000000..4ef7dab --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/DrawingApp.java @@ -0,0 +1,25 @@ +package com.draw.painting.line; + +import android.app.Application; + +public class DrawingApp extends Application { + + public static String Key_ViewDir = "pre_dir"; + + public static String Key_Camera = "camera_data"; + + + + + + @Override + public void onCreate() { + super.onCreate(); + + + } + + + + +} diff --git a/app/src/main/java/com/draw/painting/line/adapter/CategoryListAdapter.java b/app/src/main/java/com/draw/painting/line/adapter/CategoryListAdapter.java new file mode 100644 index 0000000..f0f97cb --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/adapter/CategoryListAdapter.java @@ -0,0 +1,149 @@ +package com.draw.painting.line.adapter; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.graphics.drawable.Drawable; + +import com.draw.painting.line.R; +import com.draw.painting.line.manager.CategoryConfig; +import com.draw.painting.line.onClickListener; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CategoryListAdapter extends RecyclerView.Adapter { + + private List nameList = CategoryConfig.getAllDir(); + private onClickListener listener; + private Context mCon; + + // 分类图标和描述映射 + private static final Map categoryInfo = new HashMap() {{ + put("Animals", new String[]{"🐶", "Cute Animals", "Cute animals to draw!"}); + put("Birds", new String[]{"🐦", "Birds", "Let them fly!"}); + put("Butterfly", new String[]{"🦋", "Butterfly", "So pretty!"}); + put("Cafe", new String[]{"☕", "Cafe", "Yummy drawings!"}); + put("Cartoons", new String[]{"🎭", "Cartoons", "Fun characters!"}); + put("Christmas", new String[]{"🎄", "Christmas", "Holiday fun!"}); + put("Festivals", new String[]{"🎉", "Festivals", "Celebrate!"}); + put("Flowers", new String[]{"🌸", "Flowers", "Beautiful blooms!"}); + put("Fruits", new String[]{"🍎", "Fruits", "Sweet and juicy!"}); + put("General", new String[]{"🎨", "General", "All kinds of fun!"}); + put("Mehndi", new String[]{"✋", "Mehndi", "Beautiful patterns!"}); + put("Nature", new String[]{"🌳", "Nature", "Explore outdoors!"}); + put("Properties", new String[]{"🏠", "Properties", "Build and create!"}); + put("Rangoli", new String[]{"🪷", "Rangoli", "Colorful designs!"}); + put("Sports", new String[]{"⚽", "Sports", "Let's play!"}); + put("Vehicles", new String[]{"🚗", "Vehicles", "Zoom zoom!"}); + }}; + + public void setListener(onClickListener listener) { + this.listener = listener; + } + + public CategoryListAdapter(Context mCon) { + this.mCon = mCon; + } + + @NonNull + @Override + public CategoryVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_category, parent, false); + return new CategoryVH(view); + } + + @Override + public void onBindViewHolder(@NonNull CategoryVH holder, int position) { + String dir = nameList.get(position); + Log.d("-------------tt", "------------dir=" + dir); + + // 获取分类信息 + String[] info = categoryInfo.get(dir); + if (info != null) { + holder.tvIcon.setText(info[0]); + holder.tvName.setText(info[1]); + holder.tvDescription.setText(info[2]); + } else { + // 默认值 + String categoryName = dir.substring(dir.lastIndexOf("_") + 1); + holder.tvIcon.setText("🎨"); + holder.tvName.setText(categoryName); + holder.tvDescription.setText(R.string.let_s_draw); + } + + // 第一个分类卡片更突出(降低饱和度,作为推荐分类而非主行动) + boolean isFirst = position == 0; + CardView cardView = (CardView) holder.itemView; + if (isFirst) { + // 标题字号更大 + holder.tvName.setTextSize(22); + // 卡片背景:使用带描边的highlight背景 + Drawable highlightBg = ContextCompat.getDrawable(mCon, R.drawable.card_bg_highlight); + cardView.setBackground(highlightBg); + // 增加最小高度 + View constraintLayout = cardView.findViewById(R.id.constraint_layout); + if (constraintLayout != null) { + constraintLayout.setMinimumHeight((int) (180 * 1.1)); // 增加10%高度 + } + } else { + // 普通卡片样式:使用带描边的普通背景 + holder.tvName.setTextSize(20); + Drawable normalBg = ContextCompat.getDrawable(mCon, R.drawable.card_bg); + cardView.setBackground(normalBg); + } + + // 装饰线稿(半透明) + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mCon); + linearLayoutManager.setOrientation(RecyclerView.HORIZONTAL); + holder.preRecycler.setLayoutManager(linearLayoutManager); + CategoryThumbAdapter categoryThumbAdapter = new CategoryThumbAdapter(mCon, dir); + categoryThumbAdapter.setListener(listener); + holder.preRecycler.setAdapter(categoryThumbAdapter); + + // 整个卡片可点击 + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onClickItem(true, dir); + } + } + }); + } + + @Override + public int getItemCount() { + return nameList.size(); + } + + public static class CategoryVH extends RecyclerView.ViewHolder { + private TextView tvIcon; + private TextView tvName; + private TextView tvDescription; + private ImageView ivArrow; + private RecyclerView preRecycler; + + public CategoryVH(@NonNull View itemView) { + super(itemView); + tvIcon = itemView.findViewById(R.id.tv_icon); + tvName = itemView.findViewById(R.id.tv_name); + tvDescription = itemView.findViewById(R.id.tv_description); + ivArrow = itemView.findViewById(R.id.iv_arrow); + preRecycler = itemView.findViewById(R.id.pre_recycler); + } + } +} + diff --git a/app/src/main/java/com/draw/painting/line/adapter/CategoryThumbAdapter.java b/app/src/main/java/com/draw/painting/line/adapter/CategoryThumbAdapter.java new file mode 100644 index 0000000..90d0626 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/adapter/CategoryThumbAdapter.java @@ -0,0 +1,81 @@ +package com.draw.painting.line.adapter; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.draw.painting.line.R; +import com.draw.painting.line.manager.AppHelper; +import com.draw.painting.line.onClickListener; + +public class CategoryThumbAdapter extends RecyclerView.Adapter { + + + private Context mCon; + private String dir; + + private int count = 4; + private onClickListener listener; + public CategoryThumbAdapter(Context mCon, String dirStr) { + this.mCon = mCon; + dir = dirStr; + } + + public void setListener(onClickListener listener) { + this.listener = listener; + } + + @NonNull + @Override + public ThumbVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_category_thumb, parent, false); + return new ThumbVH(view); + } + + @Override + public void onBindViewHolder(@NonNull ThumbVH holder, int position) { + String filePath = dir + "/" + (position+1) + ".jpg"; + + Log.d("---------tt","---------filePath="+filePath); + Bitmap bitmap = AppHelper.loadImageFromAssets(mCon, filePath); + holder.previewIm.setImageBitmap(bitmap); + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(listener!= null){ + listener.onClickItem(false,filePath); + } + + } + }); + + + } + + @Override + public int getItemCount() { + return count; + } + + public static class ThumbVH extends RecyclerView.ViewHolder { + private ImageView previewIm; + private CardView cardView; + + public ThumbVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card); + } + + + } +} + diff --git a/app/src/main/java/com/draw/painting/line/adapter/ImageListAdapter.java b/app/src/main/java/com/draw/painting/line/adapter/ImageListAdapter.java new file mode 100644 index 0000000..495b0c9 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/adapter/ImageListAdapter.java @@ -0,0 +1,94 @@ +package com.draw.painting.line.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.draw.painting.line.DrawingApp; +import com.draw.painting.line.R; +import com.draw.painting.line.manager.AppHelper; +import com.draw.painting.line.ui.DrawActivity; + +import java.util.List; + +public class ImageListAdapter extends RecyclerView.Adapter { + + + private Context mCon; + private List data; + + + public ImageListAdapter(Context mCon, List bitmapList) { + this.mCon = mCon; + data = bitmapList; + } + + @NonNull + @Override + public ImageVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_image, parent, false); + return new ImageVH(view); + } + + @Override + public void onBindViewHolder(@NonNull ImageVH holder, int position) { + + String name = data.get(position); + Log.d("---------tt","---------name="+name); + Bitmap bitmap = AppHelper.loadImageFromAssets(mCon, name); + holder.previewIm.setImageBitmap(bitmap); + + // 重置选中状态 + holder.cardView.setSelected(false); + + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // 设置选中状态,显示反馈 + holder.cardView.setSelected(true); + + // 延迟重置,让用户看到反馈 + holder.cardView.postDelayed(new Runnable() { + @Override + public void run() { + holder.cardView.setSelected(false); + } + }, 300); + + Intent intent = new Intent(mCon, DrawActivity.class); + intent.putExtra(DrawingApp.Key_Camera,name); + mCon.startActivity(intent); + } + }); + + + } + + @Override + public int getItemCount() { + return data.size(); + } + + public static class ImageVH extends RecyclerView.ViewHolder { + private ImageView previewIm; + private CardView cardView; + + public ImageVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card_view); + } + + + } +} + diff --git a/app/src/main/java/com/draw/painting/line/manager/AppHelper.java b/app/src/main/java/com/draw/painting/line/manager/AppHelper.java new file mode 100644 index 0000000..2766506 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/manager/AppHelper.java @@ -0,0 +1,247 @@ +package com.draw.painting.line.manager; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.Point; +import android.os.Build; +import android.util.DisplayMetrics; +import android.util.Range; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import androidx.activity.ComponentActivity; +import androidx.activity.EdgeToEdge; +import androidx.annotation.NonNull; +import androidx.camera.core.Camera; +import androidx.core.app.ActivityCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.core.view.WindowInsetsControllerCompat; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class AppHelper { + + public static int getRange(Camera camera) { + Range exposureCompensationRange = camera.getCameraInfo().getExposureState().getExposureCompensationRange(); + Integer upper = exposureCompensationRange.getUpper(); + Integer lower = exposureCompensationRange.getLower(); + return upper; + } + + public static void setStatusBarTextColor(Activity activity, boolean dark) { + View decor = activity.getWindow().getDecorView(); + if (dark) { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } else { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + } + + /** + * 启用边缘到边缘显示(EdgeToEdge) + * @param activity ComponentActivity + */ + public static void enableEdgeToEdge(ComponentActivity activity) { + EdgeToEdge.enable(activity); + Window window = activity.getWindow(); + // 状态栏透明 + window.setStatusBarColor(Color.TRANSPARENT); + // 导航栏不透明,使用白色背景 + window.setNavigationBarColor(Color.WHITE); + } + + /** + * 为根视图设置 WindowInsets 监听器,自动处理系统栏间距(只处理顶部和左右) + * @param rootView 根视图 + */ + public static void setupWindowInsetsListener(View rootView) { + ViewCompat.setOnApplyWindowInsetsListener(rootView, new OnApplyWindowInsetsListener() { + @Override + public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, 0); + return insets; + } + }); + } + + /** + * 为底部导航栏设置 WindowInsets 监听器,处理底部系统栏间距 + * @param bottomNav 底部导航栏视图 + */ + public static void setupBottomNavigationInsets(View bottomNav) { + ViewCompat.setOnApplyWindowInsetsListener(bottomNav, new OnApplyWindowInsetsListener() { + @Override + public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), systemBars.bottom); + return insets; + } + }); + } + + /** + * 为内容容器设置底部导航栏的 padding,避免内容被遮挡 + * @param contentView 内容容器视图 + */ + public static void setupBottomNavPadding(View contentView) { + ViewCompat.setOnApplyWindowInsetsListener(contentView, new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, + systemBars.bottom); + return insets; + } + }); + } + + /** + * 为视图设置状态栏高度的 margin,用于全屏界面中需要避开状态栏的元素 + * @param view 需要设置 margin 的视图 + */ + public static void setupStatusBarMargin(View view) { + ViewCompat.setOnApplyWindowInsetsListener(view, new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + android.view.ViewGroup.MarginLayoutParams params = + (android.view.ViewGroup.MarginLayoutParams) v.getLayoutParams(); + params.topMargin = systemBars.top + 12; // 状态栏高度 + 额外间距 + v.setLayoutParams(params); + return insets; + } + }); + } + + /** + * 为视图设置底部导航栏高度的 margin,用于全屏界面中需要避开底部导航栏的元素 + * @param view 需要设置 margin 的视图 + * @param extraMarginDp 额外的底部间距(dp) + */ + public static void setupBottomNavMargin(View view, int extraMarginDp) { + ViewCompat.setOnApplyWindowInsetsListener(view, new OnApplyWindowInsetsListener() { + @Override + public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + android.view.ViewGroup.MarginLayoutParams params = + (android.view.ViewGroup.MarginLayoutParams) v.getLayoutParams(); + // 将 dp 转换为 px + float density = v.getContext().getResources().getDisplayMetrics().density; + int extraMarginPx = (int) (extraMarginDp * density); + params.bottomMargin = systemBars.bottom + extraMarginPx; + v.setLayoutParams(params); + return insets; + } + }); + } + + public static Point getScreen(Context context) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + windowManager.getDefaultDisplay().getMetrics(displayMetrics); + int width = displayMetrics.widthPixels; + int height = displayMetrics.heightPixels; + Point point = new Point(); + point.x = width; + point.y = height; + return point; + } + public static boolean checkPermission(Context context,String[] permissions) { + boolean result = true; + for (String per : permissions) { + if (ActivityCompat.checkSelfPermission(context, per) != PackageManager.PERMISSION_GRANTED) { + result = false; + } + } + return result; + + } + public static Bitmap loadImageFromAssets(Context context, String fileName) { + Bitmap bitmap = null; + AssetManager assetManager = context.getAssets(); + try (InputStream is = assetManager.open(fileName)) { + bitmap = BitmapFactory.decodeStream(is); + } catch (IOException e) { + return bitmap; + } + + return bitmap; + + } + + public static List fileExistsInAssets(Context context, String dir) { + + List pathList = new ArrayList(); + try { + AssetManager assetManager = context.getAssets(); + String[] files = assetManager.list(dir); + + if (files != null) { + for (String name : files) { + pathList.add(dir + "/" + name); + } + return pathList; + } + } catch (IOException e) { + + return pathList; + } + return pathList; + } + + + public static List getAnimalsName(Context context, String dir) { + List list = new ArrayList<>(); + for (int i = 0; i < 40; i++) { + + Bitmap bitmap = loadImageFromAssets(context, dir + "/" + (i + 1) + ".jpg"); + if (bitmap == null) { + break; + } else { + list.add(bitmap); + } + + } + return list; + } + + public static PackageInfo getInfo(Context context) { + PackageInfo packageInfo; + try { + packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + } catch (PackageManager.NameNotFoundException exception) { + + return null; + } + return packageInfo; + } + + + public static float getDistance(MotionEvent event) { + float x = event.getX(0) - event.getX(1); + float y = event.getY(0) - event.getY(1); + return (float) Math.sqrt(x * x + y * y); + } + +} + diff --git a/app/src/main/java/com/draw/painting/line/manager/CategoryConfig.java b/app/src/main/java/com/draw/painting/line/manager/CategoryConfig.java new file mode 100644 index 0000000..3c3597f --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/manager/CategoryConfig.java @@ -0,0 +1,49 @@ +package com.draw.painting.line.manager; + +import java.util.ArrayList; +import java.util.List; + +public class CategoryConfig { + + public static String Class_Animals = "Animals"; + public static String Class_birds = "Birds"; + public static String Class_butterfly = "Butterfly"; + public static String Class_cafe = "Cafe"; + public static String Class_cartoons = "Cartoons"; + public static String Class_christmas = "Christmas"; + public static String Class_festivals = "Festivals"; + public static String Class_flowers = "Flowers"; + public static String Class_fruits = "Fruits"; + public static String Class_general = "General"; + + public static String Class_mehndi = "Mehndi"; + public static String Class_nature = "Nature"; + public static String Class_properties = "Properties"; + public static String Class_rangoli = "Rangoli"; + public static String Class_sports = "Sports"; + public static String Class_vehicles = "Vehicles"; + + public static List getAllDir() { + ArrayList list = new ArrayList<>(); + list.add(Class_Animals); + list.add(Class_birds); + list.add(Class_butterfly); + list.add(Class_cafe); + list.add(Class_cartoons); + list.add(Class_christmas); + list.add(Class_festivals); + list.add(Class_flowers); + list.add(Class_fruits); + list.add(Class_general); + list.add(Class_mehndi); + list.add(Class_nature); + list.add(Class_properties); + list.add(Class_rangoli); + list.add(Class_sports); + list.add(Class_vehicles); + return list; + + + } +} + diff --git a/app/src/main/java/com/draw/painting/line/manager/TouchHandler.java b/app/src/main/java/com/draw/painting/line/manager/TouchHandler.java new file mode 100644 index 0000000..ad110e4 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/manager/TouchHandler.java @@ -0,0 +1,79 @@ +package com.draw.painting.line.manager; + +import android.graphics.Matrix; +import android.graphics.PointF; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +/* loaded from: classes.dex */ +public class TouchHandler implements View.OnTouchListener { + private static final int DRAG = 1; + private static final int NONE = 0; + private static final int ZOOM = 2; + private float k; + ImageView view; + float[] lastEvent = null; + float d = 1.0f; + float newRot = 0.0f; + private Matrix matrix = new Matrix(); + private Matrix savedMatrix = new Matrix(); + private PointF start = new PointF(); + private PointF mid = new PointF(); + float oldDist = 1.0f; + private int mode = 0; + + public TouchHandler(ImageView imageview, float ScaleW, float ScaleH, float x, float y) { + this.view = imageview; + Log.e("Pos..........", String.valueOf(x) + "..............." + String.valueOf(y)); + this.matrix.postScale(ScaleW, ScaleH, this.mid.x, this.mid.y); + this.matrix.postTranslate(x, y); + this.view.setImageMatrix(this.matrix); + } + + private float a(MotionEvent paramMotionEvent) { + float x = paramMotionEvent.getX(0) - paramMotionEvent.getX(1); + float y = paramMotionEvent.getY(0) - paramMotionEvent.getY(1); + return (float) Math.sqrt((x * x) + (y * y)); + } + + private void a(PointF paramPointF, MotionEvent paramMotionEvent) { + paramPointF.set((paramMotionEvent.getX(0) + paramMotionEvent.getX(1)) / 2.0f, (paramMotionEvent.getY(0) + paramMotionEvent.getY(1)) / 2.0f); + } + + private float b(MotionEvent paramMotionEvent) { + return (float) Math.toDegrees(Math.atan2(paramMotionEvent.getY(0) - paramMotionEvent.getY(1), paramMotionEvent.getX(0) - paramMotionEvent.getX(1))); + } + + /* JADX WARN: Code restructure failed: missing block: B:11:0x0016, code lost: + if (r7 != 6) goto L11; + */ + @Override // android.view.View.OnTouchListener + /* + Code decompiled incorrectly, please refer to instructions dump. + To view partially-correct code enable 'Show inconsistent code' option in preferences + */ + public boolean onTouch(View r7, MotionEvent r8) { + /* + Method dump skipped, instructions count: 240 + To view this dump change 'Code comments level' option to 'DEBUG' + */ + throw new UnsupportedOperationException("Method not decompiled: com.appmania.tracephoto.drawonpaper.apputils.MultiTouch.onTouch(android.view.View, android.view.MotionEvent):boolean"); + } + + private float rotation(MotionEvent event) { + return (float) Math.toDegrees(Math.atan2(event.getY(0) - event.getY(1), event.getX(0) - event.getX(1))); + } + + private float spacing(MotionEvent event) { + float x = event.getX(0) - event.getX(1); + float y = event.getY(0) - event.getY(1); + return (float) Math.sqrt((x * x) + (y * y)); + } + + private void midPoint(PointF point, MotionEvent event) { + point.set((event.getX(0) + event.getX(1)) / 2.0f, (event.getY(0) + event.getY(1)) / 2.0f); + } +} + diff --git a/app/src/main/java/com/draw/painting/line/onClickListener.java b/app/src/main/java/com/draw/painting/line/onClickListener.java new file mode 100644 index 0000000..38a0521 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/onClickListener.java @@ -0,0 +1,6 @@ +package com.draw.painting.line; + +public interface onClickListener { + + void onClickItem(boolean viewAll,String dir); +} diff --git a/app/src/main/java/com/draw/painting/line/ui/CategoryFragment.java b/app/src/main/java/com/draw/painting/line/ui/CategoryFragment.java new file mode 100644 index 0000000..3417ebd --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/CategoryFragment.java @@ -0,0 +1,102 @@ +package com.draw.painting.line.ui; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.draw.painting.line.DrawingApp; +import com.draw.painting.line.adapter.CategoryListAdapter; +import com.draw.painting.line.databinding.FragmentCategoryBinding; +import com.draw.painting.line.onClickListener; + +public class CategoryFragment extends Fragment implements onClickListener { + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + + + private FragmentCategoryBinding fragmentHomeBinding; + + public CategoryFragment() { + + } + + public static CategoryFragment newInstance() { + CategoryFragment fragment = new CategoryFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + fragmentHomeBinding = FragmentCategoryBinding.inflate(getLayoutInflater()); + onInitRecycler(); + onInitRandomButton(); + return fragmentHomeBinding.getRoot(); + } + + private void onInitRecycler() { + CategoryListAdapter categoryListAdapter = new CategoryListAdapter(requireContext()); + categoryListAdapter.setListener(this::onClickItem); + fragmentHomeBinding.recyclerview.setAdapter(categoryListAdapter); + fragmentHomeBinding.recyclerview.setLayoutManager(new LinearLayoutManager(requireContext())); + } + + private void onInitRandomButton() { + View.OnClickListener randomSketchListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + // 随机选择一个分类和图片 + java.util.List allDirs = com.draw.painting.line.manager.CategoryConfig.getAllDir(); + if (!allDirs.isEmpty()) { + java.util.Random random = new java.util.Random(); + String randomDir = allDirs.get(random.nextInt(allDirs.size())); + + // 获取该分类下的所有图片 + java.util.List images = com.draw.painting.line.manager.AppHelper.fileExistsInAssets(requireContext(), randomDir); + if (!images.isEmpty()) { + String randomImage = images.get(random.nextInt(images.size())); + Intent intent = new Intent(requireContext(), DrawActivity.class); + intent.putExtra(DrawingApp.Key_Camera, randomImage); + startActivity(intent); + } + } + } + }; + + // 设置整个卡片的点击事件 + fragmentHomeBinding.btnRandomSketch.setOnClickListener(randomSketchListener); + + // 设置 Start 按钮的点击事件(确保能响应) + fragmentHomeBinding.btnStart.setOnClickListener(randomSketchListener); + } + + + + @Override + public void onClickItem(boolean viewAll,String dir) { + Intent intent; + if(viewAll){ + intent = new Intent(requireContext(), GalleryActivity.class); + intent.putExtra(DrawingApp.Key_ViewDir, dir); + }else { + intent = new Intent(requireContext(), DrawActivity.class); + intent.putExtra(DrawingApp.Key_Camera,dir); + } + startActivity(intent); + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/DeerDrawView.java b/app/src/main/java/com/draw/painting/line/ui/DeerDrawView.java new file mode 100644 index 0000000..5d767f2 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/DeerDrawView.java @@ -0,0 +1,235 @@ +package com.draw.painting.line.ui; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathMeasure; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +import androidx.annotation.Nullable; + +public class DeerDrawView extends View { + + private Paint paint; + private Path bodyPath; + private Path legsPath; + private Path headPath; + private Path antlersPath; + private Path detailsPath; // 眼睛和鼻子 + + private float bodyProgress = 0f; + private float legsProgress = 0f; + private float headProgress = 0f; + private float antlersProgress = 0f; + private float detailsProgress = 0f; + + private boolean isAnimating = false; + + public DeerDrawView(Context context) { + super(context); + init(); + } + + public DeerDrawView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public DeerDrawView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setStyle(Paint.Style.STROKE); + paint.setColor(0xFF2F3A3A); // 深灰色 + float density = getContext().getResources().getDisplayMetrics().density; + paint.setStrokeWidth(2f * density); // 2px + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStrokeJoin(Paint.Join.ROUND); + + createDeerPaths(); + } + + private void createDeerPaths() { + // Layer 1: 身体主轮廓(第一个画,定形态、定情绪) + // M60 140 C90 120, 140 120, 165 135 C175 140, 175 155, 160 160 C130 170, 90 165, 70 155 + bodyPath = new Path(); + bodyPath.moveTo(60, 140); + bodyPath.cubicTo(90, 120, 140, 120, 165, 135); + bodyPath.cubicTo(175, 140, 175, 155, 160, 160); + bodyPath.cubicTo(130, 170, 90, 165, 70, 155); + bodyPath.close(); + + // Layer 2: 腿部(第二阶段,前腿 → 后腿) + // front leg: M90 155 L85 185, M100 155 L95 185 + // back leg: M140 155 L135 185, M150 155 L145 185 + legsPath = new Path(); + // 前腿 + legsPath.moveTo(90, 155); + legsPath.lineTo(85, 185); + legsPath.moveTo(100, 155); + legsPath.lineTo(95, 185); + // 后腿 + legsPath.moveTo(140, 155); + legsPath.lineTo(135, 185); + legsPath.moveTo(150, 155); + legsPath.lineTo(145, 185); + + // Layer 3: 头部 + 脖子(第三阶段,头微微向前) + // M165 135 C175 120, 190 110, 205 112 C215 115, 215 130, 200 135 C190 138, 180 140, 170 145 + headPath = new Path(); + headPath.moveTo(165, 135); + headPath.cubicTo(175, 120, 190, 110, 205, 112); + headPath.cubicTo(215, 115, 215, 130, 200, 135); + headPath.cubicTo(190, 138, 180, 140, 170, 145); + + // Layer 4: 鹿角(第四阶段,简化2-3分叉) + // M195 108 C190 90, 180 80, 170 75 + // M195 108 C200 90, 210 85, 220 80 + antlersPath = new Path(); + // 左角 + antlersPath.moveTo(195, 108); + antlersPath.cubicTo(190, 90, 180, 80, 170, 75); + // 右角 + antlersPath.moveTo(195, 108); + antlersPath.cubicTo(200, 90, 210, 85, 220, 80); + + // Layer 5: 面部细节(最后出现,情绪点) + // eye: M198 125 C199 124, 201 124, 202 125 + // nose: M205 130 C206 132, 208 132, 209 130 + detailsPath = new Path(); + // 眼睛(小弧线) + detailsPath.moveTo(198, 125); + detailsPath.cubicTo(199, 124, 201, 124, 202, 125); + // 鼻子(小弧线) + detailsPath.moveTo(205, 130); + detailsPath.cubicTo(206, 132, 208, 132, 209, 130); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + // 路径已经在createDeerPaths中创建,在绘制时会居中缩放 + } + + public void startAnimation() { + if (isAnimating) return; + isAnimating = true; + + // body: 0s, 0.6s duration + animatePath(bodyPath, 0, 600, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + bodyProgress = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + + // legs: 0.3s delay, 0.6s duration + animatePath(legsPath, 300, 600, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + legsProgress = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + + // head: 0.7s delay, 0.6s duration + animatePath(headPath, 700, 600, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + headProgress = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + + // antlers: 1.1s delay, 0.6s duration + animatePath(antlersPath, 1100, 600, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + antlersProgress = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + + // face: 1.5s delay, 0.6s duration (稍慢,治愈感) + animatePath(detailsPath, 1500, 600, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + detailsProgress = (float) animation.getAnimatedValue(); + invalidate(); + } + }); + } + + private void animatePath(Path path, long delay, long duration, ValueAnimator.AnimatorUpdateListener listener) { + ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); + animator.setDuration(duration); + animator.setStartDelay(delay); + animator.setInterpolator(new AccelerateDecelerateInterpolator()); + animator.addUpdateListener(listener); + animator.start(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (getWidth() == 0 || getHeight() == 0) return; + + // 居中绘制,根据View大小缩放 + canvas.save(); + float centerX = getWidth() / 2f; + float centerY = getHeight() / 2f; + + // 原始路径基于约220x110的尺寸(从60到约220宽,从75到约185高),进行缩放 + float scaleX = getWidth() / 220f; + float scaleY = getHeight() / 110f; + float scale = Math.min(scaleX, scaleY) * 0.9f; // 留出边距 + + canvas.translate(centerX, centerY); + canvas.scale(scale, scale); + canvas.translate(-140, -130); // 原始路径中心偏移(约140, 130) + + // 绘制身体 + drawPathWithProgress(canvas, bodyPath, bodyProgress); + + // 绘制腿部 + drawPathWithProgress(canvas, legsPath, legsProgress); + + // 绘制头部 + drawPathWithProgress(canvas, headPath, headProgress); + + // 绘制鹿角 + drawPathWithProgress(canvas, antlersPath, antlersProgress); + + // 绘制细节(眼睛和鼻子,带透明度效果) + if (detailsProgress > 0) { + float alpha = detailsProgress < 0.5f ? detailsProgress * 2f : 1f; + paint.setAlpha((int) (255 * alpha)); + drawPathWithProgress(canvas, detailsPath, detailsProgress); + paint.setAlpha(255); + } + + canvas.restore(); + } + + private void drawPathWithProgress(Canvas canvas, Path path, float progress) { + if (progress <= 0) return; + + PathMeasure pathMeasure = new PathMeasure(path, false); + float length = pathMeasure.getLength(); + float distance = length * progress; + + Path drawPath = new Path(); + pathMeasure.getSegment(0, distance, drawPath, true); + canvas.drawPath(drawPath, paint); + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/DeerVectorDrawView.java b/app/src/main/java/com/draw/painting/line/ui/DeerVectorDrawView.java new file mode 100644 index 0000000..fc71c11 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/DeerVectorDrawView.java @@ -0,0 +1,453 @@ +package com.draw.painting.line.ui; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathMeasure; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class DeerVectorDrawView extends View { + + // 线条画笔 + private Paint strokePaint; + private Paint strokePaintThin; + private Paint strokePaintMedium; + + // 填充画笔 + private Paint fillPaint; + private Paint eyeFillPaint; + private Paint noseFillPaint; + private Paint blushPaint; + + // 路径列表(按动画顺序) + private List allPaths = new ArrayList<>(); + + // 动画进度 + private float animationProgress = 0f; + private boolean isAnimating = false; + private ValueAnimator mainAnimator; + + // 原始 SVG viewBox: 0 0 400 500 + private static final float SVG_WIDTH = 400f; + private static final float SVG_HEIGHT = 500f; + + public DeerVectorDrawView(Context context) { + super(context); + init(); + } + + public DeerVectorDrawView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public DeerVectorDrawView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + float density = getContext().getResources().getDisplayMetrics().density; + + // 主线条画笔 (stroke-width="4" -> 4 * density) + strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + strokePaint.setStyle(Paint.Style.STROKE); + strokePaint.setColor(0xFF3D3028); // #3d3028 + strokePaint.setStrokeWidth(4f * density); + strokePaint.setStrokeCap(Paint.Cap.ROUND); + strokePaint.setStrokeJoin(Paint.Join.ROUND); + + // 细线条画笔 (stroke-width="2.5") + strokePaintMedium = new Paint(strokePaint); + strokePaintMedium.setStrokeWidth(2.5f * density); + + // 更细线条画笔 (stroke-width="1.5") + strokePaintThin = new Paint(strokePaint); + strokePaintThin.setStrokeWidth(1.5f * density); + + // 填充画笔(背景色) + fillPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + fillPaint.setStyle(Paint.Style.FILL); + fillPaint.setColor(0xFFFFFEFA); // #fffefa + + // 眼睛/鼻子填充 + eyeFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + eyeFillPaint.setStyle(Paint.Style.FILL); + eyeFillPaint.setColor(0xFF3D3028); // #3d3028 + + noseFillPaint = new Paint(eyeFillPaint); + + // 腮红画笔 + blushPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + blushPaint.setStyle(Paint.Style.FILL); + blushPaint.setColor(0x99F5B5B5); // #f5b5b5 with opacity 0.6 + + createPaths(); + } + + private void createPaths() { + allPaths.clear(); + + // ========== 1. 鹿角 (最先画) ========== + // 左鹿角 - 主幹 + Path leftAntlerMain = new Path(); + leftAntlerMain.moveTo(145, 120); + leftAntlerMain.quadTo(140, 100, 130, 75); + leftAntlerMain.quadTo(125, 55, 115, 35); + allPaths.add(new PathData(leftAntlerMain, strokePaint, PathType.STROKE, 0f)); + + // 左鹿角 - 分叉1 + Path leftAntlerBranch1 = new Path(); + leftAntlerBranch1.moveTo(130, 75); + leftAntlerBranch1.quadTo(115, 70, 100, 55); + allPaths.add(new PathData(leftAntlerBranch1, createStrokePaint(3.5f), PathType.STROKE, 0.05f)); + + // 左鹿角 - 分叉2 + Path leftAntlerBranch2 = new Path(); + leftAntlerBranch2.moveTo(125, 60); + leftAntlerBranch2.quadTo(110, 50, 95, 35); + allPaths.add(new PathData(leftAntlerBranch2, createStrokePaint(3f), PathType.STROKE, 0.08f)); + + // 左鹿角 - 分叉3 + Path leftAntlerBranch3 = new Path(); + leftAntlerBranch3.moveTo(135, 85); + leftAntlerBranch3.quadTo(120, 88, 105, 80); + allPaths.add(new PathData(leftAntlerBranch3, createStrokePaint(3f), PathType.STROKE, 0.1f)); + + // 右鹿角 - 主幹 + Path rightAntlerMain = new Path(); + rightAntlerMain.moveTo(255, 120); + rightAntlerMain.quadTo(260, 100, 270, 75); + rightAntlerMain.quadTo(275, 55, 285, 35); + allPaths.add(new PathData(rightAntlerMain, strokePaint, PathType.STROKE, 0.12f)); + + // 右鹿角 - 分叉1 + Path rightAntlerBranch1 = new Path(); + rightAntlerBranch1.moveTo(270, 75); + rightAntlerBranch1.quadTo(285, 70, 300, 55); + allPaths.add(new PathData(rightAntlerBranch1, createStrokePaint(3.5f), PathType.STROKE, 0.15f)); + + // 右鹿角 - 分叉2 + Path rightAntlerBranch2 = new Path(); + rightAntlerBranch2.moveTo(275, 60); + rightAntlerBranch2.quadTo(290, 50, 305, 35); + allPaths.add(new PathData(rightAntlerBranch2, createStrokePaint(3f), PathType.STROKE, 0.18f)); + + // 右鹿角 - 分叉3 + Path rightAntlerBranch3 = new Path(); + rightAntlerBranch3.moveTo(265, 85); + rightAntlerBranch3.quadTo(280, 88, 295, 80); + allPaths.add(new PathData(rightAntlerBranch3, createStrokePaint(3f), PathType.STROKE, 0.2f)); + + // ========== 2. 耳朵 ========== + // 左耳 + Path leftEar = new Path(); + leftEar.moveTo(135, 130); + leftEar.quadTo(115, 120, 100, 135); + leftEar.quadTo(110, 150, 130, 155); + allPaths.add(new PathData(leftEar, strokePaintMedium, PathType.STROKE, 0.25f)); + + // 左耳内部 + Path leftEarInner = new Path(); + leftEarInner.moveTo(125, 135); + leftEarInner.quadTo(115, 135, 112, 142); + Paint leftEarInnerPaint = createStrokePaint(1.5f); + leftEarInnerPaint.setAlpha(153); // 0.6 opacity + allPaths.add(new PathData(leftEarInner, leftEarInnerPaint, PathType.STROKE, 0.28f)); + + // 右耳 + Path rightEar = new Path(); + rightEar.moveTo(265, 130); + rightEar.quadTo(285, 120, 300, 135); + rightEar.quadTo(290, 150, 270, 155); + allPaths.add(new PathData(rightEar, strokePaintMedium, PathType.STROKE, 0.3f)); + + // 右耳内部 + Path rightEarInner = new Path(); + rightEarInner.moveTo(275, 135); + rightEarInner.quadTo(285, 135, 288, 142); + Paint rightEarInnerPaint = createStrokePaint(1.5f); + rightEarInnerPaint.setAlpha(153); + allPaths.add(new PathData(rightEarInner, rightEarInnerPaint, PathType.STROKE, 0.33f)); + + // ========== 3. 头部轮廓 ========== + Path head = new Path(); + head.moveTo(130, 155); + head.quadTo(125, 175, 130, 200); + head.quadTo(135, 230, 150, 255); + head.quadTo(165, 280, 175, 300); + head.quadTo(185, 315, 200, 320); + head.quadTo(215, 315, 225, 300); + head.quadTo(235, 280, 250, 255); + head.quadTo(265, 230, 270, 200); + head.quadTo(275, 175, 270, 155); + head.quadTo(260, 135, 240, 125); + head.quadTo(220, 118, 200, 118); + head.quadTo(180, 118, 160, 125); + head.quadTo(140, 135, 130, 155); + allPaths.add(new PathData(head, strokePaintMedium, PathType.STROKE, 0.35f)); + + // ========== 4. 脸部细节 ========== + // 眉毛 - 左 + Path leftBrow = new Path(); + leftBrow.moveTo(155, 172); + leftBrow.quadTo(165, 168, 175, 172); + Paint browPaint = createStrokePaint(1.5f); + browPaint.setAlpha(102); // 0.4 opacity + allPaths.add(new PathData(leftBrow, browPaint, PathType.STROKE, 0.55f)); + + // 眉毛 - 右 + Path rightBrow = new Path(); + rightBrow.moveTo(225, 172); + rightBrow.quadTo(235, 168, 245, 172); + allPaths.add(new PathData(rightBrow, browPaint, PathType.STROKE, 0.58f)); + + // 眼睛 - 左 (圆形填充) + allPaths.add(new PathData(null, eyeFillPaint, PathType.CIRCLE, 0.6f, 165, 185, 5)); + + // 眼睛 - 右 + allPaths.add(new PathData(null, eyeFillPaint, PathType.CIRCLE, 0.63f, 235, 185, 5)); + + // 腮红 - 左 (椭圆填充) + allPaths.add(new PathData(null, blushPaint, PathType.OVAL, 0.7f, 150, 220, 12, 8)); + + // 腮红 - 右 + allPaths.add(new PathData(null, blushPaint, PathType.OVAL, 0.72f, 250, 220, 12, 8)); + + // 鼻子 (椭圆填充) + allPaths.add(new PathData(null, noseFillPaint, PathType.OVAL, 0.75f, 200, 290, 8, 6)); + + // ========== 5. 脖子 ========== + // 左边脖子线 + Path leftNeck = new Path(); + leftNeck.moveTo(175, 320); + leftNeck.quadTo(170, 360, 165, 400); + leftNeck.quadTo(162, 440, 160, 480); + allPaths.add(new PathData(leftNeck, strokePaintMedium, PathType.STROKE, 0.8f)); + + // 右边脖子线 + Path rightNeck = new Path(); + rightNeck.moveTo(225, 320); + rightNeck.quadTo(230, 360, 235, 400); + rightNeck.quadTo(238, 440, 240, 480); + allPaths.add(new PathData(rightNeck, strokePaintMedium, PathType.STROKE, 0.85f)); + + // 脖子中间线 + Path neckCenter = new Path(); + neckCenter.moveTo(200, 330); + neckCenter.lineTo(200, 380); + Paint neckCenterPaint = createStrokePaint(1f); + neckCenterPaint.setAlpha(77); // 0.3 opacity + allPaths.add(new PathData(neckCenter, neckCenterPaint, PathType.STROKE, 0.9f)); + } + + private Paint createStrokePaint(float strokeWidth) { + float density = getContext().getResources().getDisplayMetrics().density; + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setStyle(Paint.Style.STROKE); + paint.setColor(0xFF3D3028); + paint.setStrokeWidth(strokeWidth * density); + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStrokeJoin(Paint.Join.ROUND); + return paint; + } + + public void startAnimation() { + if (isAnimating) return; + isAnimating = true; + + mainAnimator = ValueAnimator.ofFloat(0f, 1f); + mainAnimator.setDuration(2200); // 总时长 2.2 秒 + mainAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); + mainAnimator.addUpdateListener(animation -> { + animationProgress = (float) animation.getAnimatedValue(); + invalidate(); + }); + mainAnimator.start(); + } + + public void stopAnimation() { + if (mainAnimator != null) { + mainAnimator.cancel(); + } + isAnimating = false; + } + + public float getAnimationProgress() { + return animationProgress; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (getWidth() == 0 || getHeight() == 0) return; + + canvas.save(); + + // 计算缩放比例,让鹿居中且适应View大小 + float scaleX = getWidth() / SVG_WIDTH; + float scaleY = getHeight() / SVG_HEIGHT; + float scale = Math.min(scaleX, scaleY) * 0.85f; + + float centerX = getWidth() / 2f; + float centerY = getHeight() / 2f; + + canvas.translate(centerX, centerY); + canvas.scale(scale, scale); + canvas.translate(-SVG_WIDTH / 2f, -SVG_HEIGHT / 2f); + + // 绘制所有路径 + for (PathData pathData : allPaths) { + drawPathData(canvas, pathData); + } + + canvas.restore(); + } + + private void drawPathData(Canvas canvas, PathData pathData) { + // 计算这个路径的绘制进度 + float pathProgress = calculatePathProgress(pathData.startTime); + if (pathProgress <= 0) return; + + switch (pathData.type) { + case STROKE: + if (pathData.path != null) { + drawPathWithProgress(canvas, pathData.path, pathData.paint, pathProgress); + } + break; + case CIRCLE: + if (pathProgress >= 1f) { + canvas.drawCircle(pathData.cx, pathData.cy, pathData.rx, pathData.paint); + } else { + // 淡入效果 + Paint fadePaint = new Paint(pathData.paint); + fadePaint.setAlpha((int) (pathData.paint.getAlpha() * pathProgress)); + canvas.drawCircle(pathData.cx, pathData.cy, pathData.rx * pathProgress, fadePaint); + } + break; + case OVAL: + RectF oval = new RectF( + pathData.cx - pathData.rx, + pathData.cy - pathData.ry, + pathData.cx + pathData.rx, + pathData.cy + pathData.ry + ); + if (pathProgress >= 1f) { + canvas.drawOval(oval, pathData.paint); + } else { + // 淡入效果 + Paint fadePaint = new Paint(pathData.paint); + fadePaint.setAlpha((int) (pathData.paint.getAlpha() * pathProgress)); + float scaleProgress = 0.5f + 0.5f * pathProgress; + RectF scaledOval = new RectF( + pathData.cx - pathData.rx * scaleProgress, + pathData.cy - pathData.ry * scaleProgress, + pathData.cx + pathData.rx * scaleProgress, + pathData.cy + pathData.ry * scaleProgress + ); + canvas.drawOval(scaledOval, fadePaint); + } + break; + } + } + + private float calculatePathProgress(float startTime) { + // 每个路径有 0.15 的绘制时间窗口 + float pathDuration = 0.15f; + if (animationProgress < startTime) return 0f; + if (animationProgress >= startTime + pathDuration) return 1f; + return (animationProgress - startTime) / pathDuration; + } + + private void drawPathWithProgress(Canvas canvas, Path path, Paint paint, float progress) { + if (progress <= 0 || path == null) return; + + PathMeasure pathMeasure = new PathMeasure(path, false); + float totalLength = 0; + + // 计算所有子路径的总长度 + do { + totalLength += pathMeasure.getLength(); + } while (pathMeasure.nextContour()); + + // 重置 PathMeasure + pathMeasure = new PathMeasure(path, false); + float drawnLength = totalLength * progress; + float currentLength = 0; + + Path drawPath = new Path(); + do { + float segmentLength = pathMeasure.getLength(); + if (currentLength + segmentLength <= drawnLength) { + // 完全绘制这个子路径 + Path segment = new Path(); + pathMeasure.getSegment(0, segmentLength, segment, true); + drawPath.addPath(segment); + } else if (currentLength < drawnLength) { + // 部分绘制这个子路径 + float remainingLength = drawnLength - currentLength; + Path segment = new Path(); + pathMeasure.getSegment(0, remainingLength, segment, true); + drawPath.addPath(segment); + } + currentLength += segmentLength; + } while (pathMeasure.nextContour() && currentLength < drawnLength); + + canvas.drawPath(drawPath, paint); + } + + // 路径类型枚举 + private enum PathType { + STROKE, // 描边路径 + CIRCLE, // 圆形填充 + OVAL // 椭圆填充 + } + + // 路径数据类 + private static class PathData { + Path path; + Paint paint; + PathType type; + float startTime; // 0-1 之间,表示开始绘制的时间点 + float cx, cy; // 圆心/椭圆中心 + float rx, ry; // 半径 + + // 描边路径构造函数 + PathData(Path path, Paint paint, PathType type, float startTime) { + this.path = path; + this.paint = paint; + this.type = type; + this.startTime = startTime; + } + + // 圆形构造函数 + PathData(Path path, Paint paint, PathType type, float startTime, float cx, float cy, float r) { + this(path, paint, type, startTime); + this.cx = cx; + this.cy = cy; + this.rx = r; + this.ry = r; + } + + // 椭圆构造函数 + PathData(Path path, Paint paint, PathType type, float startTime, float cx, float cy, float rx, float ry) { + this(path, paint, type, startTime); + this.cx = cx; + this.cy = cy; + this.rx = rx; + this.ry = ry; + } + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/DrawActivity.java b/app/src/main/java/com/draw/painting/line/ui/DrawActivity.java new file mode 100644 index 0000000..537093c --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/DrawActivity.java @@ -0,0 +1,358 @@ +package com.draw.painting.line.ui; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.PickVisualMediaRequest; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.camera.core.Camera; +import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageCapture; +import androidx.camera.core.Preview; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.camera.view.PreviewView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import android.Manifest; +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.Point; +import android.graphics.PointF; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.ParcelFileDescriptor; +import android.provider.MediaStore; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.SeekBar; +import android.widget.Toast; + +import com.google.common.util.concurrent.ListenableFuture; +import com.draw.painting.line.DrawingApp; +import com.draw.painting.line.R; +import com.draw.painting.line.manager.AppHelper; + +import java.io.File; +import java.io.IOException; +import java.util.Objects; + +public class DrawActivity extends AppCompatActivity implements View.OnTouchListener, View.OnClickListener { + private CameraSelector cameraSelector; + private String[] permissions; + private int range; + private Camera camera; + private ImageCapture imageCapture; + private PreviewView previewView; + private ImageView imageView; + private SeekBar seekBar; + + private Double d; + + + private int MODE;//当前状态 + public static final int MODE_NONE = 0;//无操作 + public static final int MODE_DRAG = 1;//单指操作 + public static final int MODE_SCALE = 2;//双指操作 + + private Matrix startMatrix; + private Matrix endMatrix = new Matrix();//变化后的矩阵 + private PointF startPointF = new PointF();//初始坐标 + private float distance;//初始距离 + private float scaleMultiple;//缩放倍数 + + private ImageView flashIm, imZoom, imBack; + private ImageView imPhoto; + private View llTool; + + private String curBitmapPath; + private boolean hasPermission = false; + + private ActivityResultLauncher pickImageLauncher; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AppHelper.enableEdgeToEdge(this); + setContentView(R.layout.activity_draw); + previewView = findViewById(R.id.preview); + imageView = findViewById(R.id.image); + imBack = findViewById(R.id.back); + AppHelper.setupStatusBarMargin(imBack); + + seekBar = findViewById(R.id.seekbar); + flashIm = findViewById(R.id.im_flash); + imPhoto = findViewById(R.id.im_photo); + imZoom = findViewById(R.id.im_zoom); + llTool = findViewById(R.id.ll_tool); + AppHelper.setupBottomNavMargin(llTool, 24); // 24dp 额外间距 + curBitmapPath = getIntent().getStringExtra(DrawingApp.Key_Camera); + + pickImageLauncher = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), imageUri -> { + if (imageUri == null) { + Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show(); + Log.d("-------------------tt", "-------imageUri-111-null"); + return; + } + double uriFileSize = getUriFileSize(DrawActivity.this, imageUri); + if (uriFileSize >= 4) { + Toast.makeText(this, getString(R.string.file_fail), Toast.LENGTH_SHORT).show(); + Log.d("-------------tt", "-------imageUri---222-uriFileSize=" + uriFileSize); + return; + } +// Log.d("--------------tt","------bitmap-----width="+width+"-----height="+height); + Log.d("-------------tt", "-------imageUri---333-uriFileSize=" + uriFileSize); + imageView.setImageURI(imageUri); + }); + + init(); + initClick(); + } + + private void onInitIm(float imW, float imH) { + Point screen = AppHelper.getScreen(this); + float newX = screen.x / 2f - imW / 2; + float newY = screen.y / 2f - imH / 2; + startMatrix = new Matrix(); + startMatrix.postTranslate(newX, newY); + imageView.setImageMatrix(startMatrix); + + Log.d("---------------tt", "------startMatrix-----x=" + newX + "------y=" + newY); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction() & event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + + startMatrix.set(imageView.getImageMatrix()); + endMatrix.set(imageView.getImageMatrix()); + + startPointF.set(event.getX(), event.getY()); + + + Log.d("---------------tt", "------ACTION_DOWN-----x=" + event.getX() + "------y=" + event.getY()); + + MODE = MODE_DRAG; + + break; + case MotionEvent.ACTION_POINTER_DOWN: + + startMatrix.set(endMatrix); + + distance = AppHelper.getDistance(event); + + MODE = MODE_SCALE; + + break; + case MotionEvent.ACTION_MOVE://滑动(单+双) + if (MODE == MODE_DRAG) {//单指滑动时 + + endMatrix.set(startMatrix); + //向矩阵传入位移距离 + endMatrix.postTranslate(event.getX() - startPointF.x, event.getY() - startPointF.y); + Log.d("---------------tt", "------ACTION_MOVE-----x=" + event.getX() + "------y=" + event.getY()); + } else if (MODE == MODE_SCALE) {//双指滑动时 + //计算缩放倍数 + scaleMultiple = AppHelper.getDistance(event) / distance; + //获取初始矩阵 + endMatrix.set(startMatrix); + //向矩阵传入缩放倍数 + endMatrix.postScale(scaleMultiple, scaleMultiple, startPointF.x, startPointF.y); + } + break; + case MotionEvent.ACTION_UP://单指离开 + case MotionEvent.ACTION_POINTER_UP://双指离开 + //手指离开后,重置状态 + MODE = MODE_NONE; + + break; + } + //事件结束后,把矩阵的变化同步到ImageView上 + imageView.setImageMatrix(endMatrix); + return true; + } + + @Override + public void onClick(View v) { + if (v.equals(imBack)) { + finish(); + } else { + if (!hasPermission) { + showNoPermission(); + return; + } + if (v.equals(flashIm)) { + if (camera == null) { + return; + } + boolean selected = flashIm.isSelected(); + flashIm.setSelected(!selected); + camera.getCameraControl().enableTorch(!selected); + } else if (v.equals(imPhoto)) { + pickImageLauncher.launch( + new PickVisualMediaRequest.Builder() + .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE) + .build() + ); + } else if (v.equals(imZoom)) { + if (seekBar.getVisibility() == View.VISIBLE) { + seekBar.setVisibility(View.GONE); + imZoom.setSelected(false); + } else if (seekBar.getVisibility() == View.GONE) { + seekBar.setVisibility(View.VISIBLE); + imZoom.setSelected(true); + } + } + } + + } + + private void initClick() { + imBack.setOnClickListener(this); + flashIm.setOnClickListener(this); + imPhoto.setOnClickListener(this); + imZoom.setOnClickListener(this); + seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + float v = (seekBar.getMax() - progress) / 10.0f; + imageView.setAlpha(v); + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + } + + private void init() { + cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA; + permissions = new String[]{android.Manifest.permission.CAMERA}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissions = new String[]{android.Manifest.permission.CAMERA}; + } else { + permissions = new String[]{android.Manifest.permission.CAMERA}; + } + if (!checkPermission()) { + hasPermission = false; + imageView.setOnTouchListener(null); + ActivityCompat.requestPermissions(this, permissions, 0); + } else { + hasPermission = true; + imageView.setOnTouchListener(this); + startCamera(); + } + } + + private void startCamera() { + ListenableFuture future = ProcessCameraProvider.getInstance(this); + future.addListener(() -> { + try { + ProcessCameraProvider cameraProvider = future.get(); + + Preview preview = new Preview.Builder().build(); + cameraProvider.unbindAll(); + ImageCapture.Builder builder1 = new ImageCapture.Builder(); + imageCapture = builder1.build(); + camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture); + if (camera != null) { + range = AppHelper.getRange(camera); + } + preview.setSurfaceProvider(previewView.getSurfaceProvider()); + + if (curBitmapPath != null) { + Bitmap bitmap = AppHelper.loadImageFromAssets(this, curBitmapPath); + imageView.setImageBitmap(bitmap); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + onInitIm(width, height); + + + } + + } catch (Exception e) { + e.printStackTrace(); + } + }, ContextCompat.getMainExecutor(this)); + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == 0) { + if (checkPermission()) { + hasPermission = true; + imageView.setOnTouchListener(this); + startCamera(); + } else { + hasPermission = false; + imageView.setOnTouchListener(null); + } + + } + } + + + private boolean checkPermission() { + boolean result = true; + for (String per : permissions) { + if (ActivityCompat.checkSelfPermission(this, per) != PackageManager.PERMISSION_GRANTED) { + result = false; + } + } + return result; + + } + + private void showNoPermission() { + Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show(); + } + + public static double getUriFileSize(Context context, Uri uri) { + double fileSize = 0.0; + ContentResolver contentResolver = context.getContentResolver(); + if ("file".equals(uri.getScheme())) { + File file = new File(Objects.requireNonNull(uri.getPath())); + if (file.exists()) { + fileSize = (double) file.length(); + } + } else { + ParcelFileDescriptor pfd = null; + try { + pfd = contentResolver.openFileDescriptor(uri, "r"); + if (pfd != null) { + fileSize = (double) pfd.getStatSize(); + } + } catch (Exception e) { + Log.e("UriUtils", "Error while retrieving file size: " + e.getMessage(), e); + } finally { + if (pfd != null) { + try { + pfd.close(); + } catch (IOException e) { + // ignore + } + } + } + } + return fileSize / 1048576.0; + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/GalleryActivity.java b/app/src/main/java/com/draw/painting/line/ui/GalleryActivity.java new file mode 100644 index 0000000..2ab3578 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/GalleryActivity.java @@ -0,0 +1,125 @@ +package com.draw.painting.line.ui; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.view.View; + +import com.draw.painting.line.DrawingApp; +import com.draw.painting.line.adapter.ImageListAdapter; +import com.draw.painting.line.databinding.ActivityGalleryBinding; +import com.draw.painting.line.manager.AppHelper; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GalleryActivity extends AppCompatActivity { + + private ActivityGalleryBinding preViewBinding; + + private String dirStr; + + // 分类名称映射(儿童友好) + private static final Map categoryNames = new HashMap() {{ + put("Animals", "Cute Animals"); + put("Birds", "Birds"); + put("Butterfly", "Butterfly"); + put("Cafe", "Cafe"); + put("Cartoons", "Cartoons"); + put("Christmas", "Christmas"); + put("Festivals", "Festivals"); + put("Flowers", "Flowers"); + put("Fruits", "Fruits"); + put("General", "General"); + put("Mehndi", "Mehndi"); + put("Nature", "Nature"); + put("Properties", "Properties"); + put("Rangoli", "Rangoli"); + put("Sports", "Sports"); + put("Vehicles", "Vehicles"); + }}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AppHelper.enableEdgeToEdge(this); + preViewBinding = ActivityGalleryBinding.inflate(getLayoutInflater()); + setContentView(preViewBinding.getRoot()); +// AppHelper.setupWindowInsetsListener(preViewBinding.getRoot()); + + AppHelper.setupBottomNavPadding(preViewBinding.getRoot()); + + dirStr = getIntent().getStringExtra(DrawingApp.Key_ViewDir); + + // 设置儿童友好的标题 + String categoryName = categoryNames.get(dirStr); + if (categoryName == null) { + categoryName = dirStr.substring(dirStr.lastIndexOf("_")+1); + } + preViewBinding.categoryName.setText(categoryName); + + onInitRecommended(); + onInitList(); + onInitClick(); + } + + private void onInitRecommended() { + List allList = AppHelper.fileExistsInAssets(this, dirStr); + if (!allList.isEmpty()) { + // 显示第一张作为推荐 + String recommendedPath = allList.get(0); + Bitmap bitmap = AppHelper.loadImageFromAssets(this, recommendedPath); + if (bitmap != null) { + preViewBinding.imRecommended.setImageBitmap(bitmap); + } + + // 推荐卡片点击 + preViewBinding.cardRecommended.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(GalleryActivity.this, DrawActivity.class); + intent.putExtra(DrawingApp.Key_Camera, recommendedPath); + startActivity(intent); + } + }); + } + } + + private void onInitList() { + List allList = AppHelper.fileExistsInAssets(this, dirStr); + + if (allList.isEmpty()) { + return; + } + + // 将列表分为Easy和Fun两组 + int midPoint = allList.size() / 2; + List easyList = new ArrayList<>(allList.subList(0, midPoint)); + List funList = new ArrayList<>(allList.subList(midPoint, allList.size())); + + // Easy组 + ImageListAdapter easyAdapter = new ImageListAdapter(this, easyList); + preViewBinding.recyclerviewEasy.setAdapter(easyAdapter); + preViewBinding.recyclerviewEasy.setLayoutManager(new GridLayoutManager(this, 3)); + + // Fun组 + ImageListAdapter funAdapter = new ImageListAdapter(this, funList); + preViewBinding.recyclerview.setAdapter(funAdapter); + preViewBinding.recyclerview.setLayoutManager(new GridLayoutManager(this, 3)); + } + + private void onInitClick() { + preViewBinding.back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/MainActivity.java b/app/src/main/java/com/draw/painting/line/ui/MainActivity.java new file mode 100644 index 0000000..74fd101 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/MainActivity.java @@ -0,0 +1,99 @@ +package com.draw.painting.line.ui; + +import android.Manifest; +import android.os.Build; +import android.os.Bundle; +import android.view.MenuItem; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import com.draw.painting.line.R; +import com.draw.painting.line.databinding.ActivityMainBinding; +import com.draw.painting.line.manager.AppHelper; +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import java.util.ArrayList; +import java.util.List; + +public class MainActivity extends AppCompatActivity { + + private ActivityMainBinding binding; + + private List listFragment = new ArrayList<>(); + + private String[] permissions; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AppHelper.enableEdgeToEdge(this); + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + AppHelper.setupWindowInsetsListener(binding.getRoot()); + AppHelper.setupBottomNavigationInsets(binding.bottomNavigation); + + // 初始化Fragment列表 + listFragment.add(CategoryFragment.newInstance()); // 0: Draw + listFragment.add(SettingsFragment.newInstance()); // 1: Parents + + binding.viewPager2.setUserInputEnabled(false); + binding.viewPager2.setAdapter(new FragmentStateAdapter(this) { + @NonNull + @Override + public Fragment createFragment(int position) { + return listFragment.get(position); + } + + @Override + public int getItemCount() { + return listFragment.size(); + } + }); + + initBottomNavigation(); + } + + + + private void initBottomNavigation() { + binding.bottomNavigation.setOnItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.id.nav_draw) { + binding.viewPager2.setCurrentItem(0, false); + return true; + } else if (itemId == R.id.nav_parents) { + binding.viewPager2.setCurrentItem(1, false); + return true; + } + return false; + } + }); + + binding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + switch (position) { + case 0: + binding.bottomNavigation.setSelectedItemId(R.id.nav_draw); + break; + case 1: + binding.bottomNavigation.setSelectedItemId(R.id.nav_parents); + break; + } + } + }); + } + + + +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/RatingDialog.java b/app/src/main/java/com/draw/painting/line/ui/RatingDialog.java new file mode 100644 index 0000000..273105c --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/RatingDialog.java @@ -0,0 +1,114 @@ +package com.draw.painting.line.ui; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; + +import com.draw.painting.line.R; + +public class RatingDialog extends Dialog { + private Context context; + private int selectedRating = 0; + private ImageView[] stars; + private TextView btnRateIt; + + public RatingDialog(Context context) { + super(context); + this.context = context; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.dialog_rating); + + // 设置弹框样式 + Window window = getWindow(); + if (window != null) { + WindowManager.LayoutParams params = window.getAttributes(); + params.width = (int) (context.getResources().getDisplayMetrics().widthPixels * 0.85); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + window.setBackgroundDrawableResource(android.R.color.transparent); + } + + initViews(); + setupStars(); + setupButtons(); + } + + private void initViews() { + stars = new ImageView[5]; + stars[0] = findViewById(R.id.star1); + stars[1] = findViewById(R.id.star2); + stars[2] = findViewById(R.id.star3); + stars[3] = findViewById(R.id.star4); + stars[4] = findViewById(R.id.star5); + btnRateIt = findViewById(R.id.btnRateIt); + + // 初始化星星为未选中状态 + for (ImageView star : stars) { + star.setImageResource(R.drawable.ic_star_off); + } + } + + private void setupStars() { + for (int i = 0; i < stars.length; i++) { + final int rating = i + 1; + stars[i].setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + selectedRating = rating; + updateStars(); + updateRateButton(); + } + }); + } + } + + private void updateStars() { + for (int i = 0; i < stars.length; i++) { + if (i < selectedRating) { + stars[i].setImageResource(R.drawable.ic_star_on); + } else { + stars[i].setImageResource(R.drawable.ic_star_off); + } + } + } + + private void updateRateButton() { + if (selectedRating > 0) { + btnRateIt.setTextColor(Color.parseColor("#FFFFFF")); + } else { + btnRateIt.setTextColor(Color.parseColor("#CCCCCC")); + } + } + + private void setupButtons() { + TextView btnCancel = findViewById(R.id.btnCancel); + btnCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + btnRateIt.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dismiss(); + } + }); + } + + +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/SettingsFragment.java b/app/src/main/java/com/draw/painting/line/ui/SettingsFragment.java new file mode 100644 index 0000000..1b13484 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/SettingsFragment.java @@ -0,0 +1,75 @@ +package com.draw.painting.line.ui; + +import android.content.pm.PackageInfo; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; + +import com.draw.painting.line.R; +import com.draw.painting.line.databinding.FragmentSettingsBinding; +import com.draw.painting.line.manager.AppHelper; + +public class SettingsFragment extends Fragment { + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + + private String mParam1; + private String mParam2; + private FragmentSettingsBinding fragmentSettingBinding; + + public SettingsFragment() { + + } + public static SettingsFragment newInstance() { + SettingsFragment fragment = new SettingsFragment(); + Bundle args = new Bundle(); + + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + fragmentSettingBinding = FragmentSettingsBinding.inflate(getLayoutInflater()); + onInit(); + return fragmentSettingBinding.getRoot(); + } + + private void onInit(){ + String version = "1.0"; + PackageInfo info = AppHelper.getInfo(requireContext()); + if(info!=null){ + version = info.versionName; + } + String format = String.format(getString(R.string.version_code), version); + fragmentSettingBinding.textAppVersion.setText(format); + + // 设置Rate Us点击事件 + fragmentSettingBinding.rlRateUs.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showRateUsDialog(); + } + }); + } + + private void showRateUsDialog() { + RatingDialog dialog = new RatingDialog(requireContext()); + dialog.show(); + } +} + diff --git a/app/src/main/java/com/draw/painting/line/ui/SplashActivity.java b/app/src/main/java/com/draw/painting/line/ui/SplashActivity.java new file mode 100644 index 0000000..2e53e10 --- /dev/null +++ b/app/src/main/java/com/draw/painting/line/ui/SplashActivity.java @@ -0,0 +1,148 @@ +package com.draw.painting.line.ui; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.view.ViewGroup; + +import androidx.appcompat.app.AppCompatActivity; + +import com.draw.painting.line.databinding.ActivitySplashBinding; +import com.draw.painting.line.manager.AppHelper; + +public class SplashActivity extends AppCompatActivity { + + private ActivitySplashBinding binding; + private Handler handler = new Handler(); + private boolean isAnimationComplete = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + AppHelper.enableEdgeToEdge(this); + binding = ActivitySplashBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + AppHelper.setupWindowInsetsListener(binding.getRoot()); + + // 等待布局完成后再启动动画 + binding.getRoot().post(new Runnable() { + @Override + public void run() { + startLaunchAnimation(); + } + }); + } + + private void startLaunchAnimation() { + // 启动鹿的绘制动画(使用XML Vector Drawable路径) + binding.deerView.startAnimation(); + + // 同步加载条:0-80% 与鹿的动画同步 + // 新版可爱小鹿动画总时长 2.2s,加载条在鹿画到约80%时到达80% + animateProgressBar(0f, 0.8f, 2200, new Runnable() { + @Override + public void run() { + // 等待真实加载完成(这里可以添加实际的加载逻辑) + waitForLoading(); + } + }); + } + + private void animateProgressBar(float from, float to, long duration, Runnable onComplete) { + ViewGroup.LayoutParams params = binding.progressBar.getLayoutParams(); + int maxWidth = binding.progressContainer.getWidth(); + + ValueAnimator animator = ValueAnimator.ofFloat(from, to); + animator.setDuration(duration); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float progress = (float) animation.getAnimatedValue(); + params.width = (int) (maxWidth * progress); + binding.progressBar.setLayoutParams(params); + } + }); + + if (onComplete != null) { + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onComplete.run(); + } + }); + } + + animator.start(); + } + + private void waitForLoading() { + // 模拟等待真实加载(实际项目中这里应该是真实的加载逻辑) + handler.postDelayed(new Runnable() { + @Override + public void run() { + completeLoading(); + } + }, 500); // 等待500ms + } + + private void completeLoading() { + if (isAnimationComplete) return; + isAnimationComplete = true; + + // 快速完成加载条到100% + ViewGroup.LayoutParams params = binding.progressBar.getLayoutParams(); + int maxWidth = binding.progressContainer.getWidth(); + + ValueAnimator animator = ValueAnimator.ofFloat(0.8f, 1.0f); + animator.setDuration(200); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float progress = (float) animation.getAnimatedValue(); + params.width = (int) (maxWidth * progress); + binding.progressBar.setLayoutParams(params); + } + }); + + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + // 0.2s 淡出 + fadeOutAndEnter(); + } + }); + + animator.start(); + } + + private void fadeOutAndEnter() { + ObjectAnimator fadeOut = ObjectAnimator.ofFloat(binding.getRoot(), "alpha", 1f, 0f); + fadeOut.setDuration(200); + fadeOut.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + enterMain(); + } + }); + fadeOut.start(); + } + + private void enterMain() { + Intent intent = new Intent(SplashActivity.this, MainActivity.class); + startActivity(intent); + finish(); + overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + handler.removeCallbacksAndMessages(null); + } +} + diff --git a/app/src/main/res/color/bottom_nav_selector.xml b/app/src/main/res/color/bottom_nav_selector.xml new file mode 100644 index 0000000..5a59d99 --- /dev/null +++ b/app/src/main/res/color/bottom_nav_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/arrow_bg.xml b/app/src/main/res/drawable/arrow_bg.xml new file mode 100644 index 0000000..406fc7e --- /dev/null +++ b/app/src/main/res/drawable/arrow_bg.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/btn_cancel_bg.xml b/app/src/main/res/drawable/btn_cancel_bg.xml new file mode 100644 index 0000000..28e2097 --- /dev/null +++ b/app/src/main/res/drawable/btn_cancel_bg.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app/src/main/res/drawable/btn_rate_bg.xml b/app/src/main/res/drawable/btn_rate_bg.xml new file mode 100644 index 0000000..813f27f --- /dev/null +++ b/app/src/main/res/drawable/btn_rate_bg.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/card_bg.xml b/app/src/main/res/drawable/card_bg.xml new file mode 100644 index 0000000..cd1584a --- /dev/null +++ b/app/src/main/res/drawable/card_bg.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/card_bg_clicked.xml b/app/src/main/res/drawable/card_bg_clicked.xml new file mode 100644 index 0000000..0bcad9f --- /dev/null +++ b/app/src/main/res/drawable/card_bg_clicked.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/card_bg_highlight.xml b/app/src/main/res/drawable/card_bg_highlight.xml new file mode 100644 index 0000000..bb66367 --- /dev/null +++ b/app/src/main/res/drawable/card_bg_highlight.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/card_bg_selector.xml b/app/src/main/res/drawable/card_bg_selector.xml new file mode 100644 index 0000000..b6825f9 --- /dev/null +++ b/app/src/main/res/drawable/card_bg_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/card_recommended_bg.xml b/app/src/main/res/drawable/card_recommended_bg.xml new file mode 100644 index 0000000..7cac40d --- /dev/null +++ b/app/src/main/res/drawable/card_recommended_bg.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/circle_bg.xml b/app/src/main/res/drawable/circle_bg.xml new file mode 100644 index 0000000..a456c1f --- /dev/null +++ b/app/src/main/res/drawable/circle_bg.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/flash_selector.xml b/app/src/main/res/drawable/flash_selector.xml new file mode 100644 index 0000000..4357cc7 --- /dev/null +++ b/app/src/main/res/drawable/flash_selector.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_flash_off.xml b/app/src/main/res/drawable/ic_flash_off.xml new file mode 100644 index 0000000..848a137 --- /dev/null +++ b/app/src/main/res/drawable/ic_flash_off.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_flash_on.xml b/app/src/main/res/drawable/ic_flash_on.xml new file mode 100644 index 0000000..7a0447f --- /dev/null +++ b/app/src/main/res/drawable/ic_flash_on.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_opacity_off.xml b/app/src/main/res/drawable/ic_opacity_off.xml new file mode 100644 index 0000000..fbf4d56 --- /dev/null +++ b/app/src/main/res/drawable/ic_opacity_off.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_opacity_on.xml b/app/src/main/res/drawable/ic_opacity_on.xml new file mode 100644 index 0000000..61b734d --- /dev/null +++ b/app/src/main/res/drawable/ic_opacity_on.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_photo.xml b/app/src/main/res/drawable/ic_photo.xml new file mode 100644 index 0000000..20c7c59 --- /dev/null +++ b/app/src/main/res/drawable/ic_photo.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_star_off.xml b/app/src/main/res/drawable/ic_star_off.xml new file mode 100644 index 0000000..67de43c --- /dev/null +++ b/app/src/main/res/drawable/ic_star_off.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_star_on.xml b/app/src/main/res/drawable/ic_star_on.xml new file mode 100644 index 0000000..96806ad --- /dev/null +++ b/app/src/main/res/drawable/ic_star_on.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/opacity_selector.xml b/app/src/main/res/drawable/opacity_selector.xml new file mode 100644 index 0000000..d749b63 --- /dev/null +++ b/app/src/main/res/drawable/opacity_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/progress_bg.xml b/app/src/main/res/drawable/progress_bg.xml new file mode 100644 index 0000000..4cb8c3f --- /dev/null +++ b/app/src/main/res/drawable/progress_bg.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/progress_fill.xml b/app/src/main/res/drawable/progress_fill.xml new file mode 100644 index 0000000..0ed4505 --- /dev/null +++ b/app/src/main/res/drawable/progress_fill.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/random_btn_shadow.xml b/app/src/main/res/drawable/random_btn_shadow.xml new file mode 100644 index 0000000..6f83c74 --- /dev/null +++ b/app/src/main/res/drawable/random_btn_shadow.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/rating_dialog_bg.xml b/app/src/main/res/drawable/rating_dialog_bg.xml new file mode 100644 index 0000000..7362c91 --- /dev/null +++ b/app/src/main/res/drawable/rating_dialog_bg.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/recommended_label_enhanced.xml b/app/src/main/res/drawable/recommended_label_enhanced.xml new file mode 100644 index 0000000..9e077b9 --- /dev/null +++ b/app/src/main/res/drawable/recommended_label_enhanced.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app/src/main/res/drawable/seekbar_progress.xml b/app/src/main/res/drawable/seekbar_progress.xml new file mode 100644 index 0000000..a6e501f --- /dev/null +++ b/app/src/main/res/drawable/seekbar_progress.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_thumb.xml b/app/src/main/res/drawable/seekbar_thumb.xml new file mode 100644 index 0000000..216b1ce --- /dev/null +++ b/app/src/main/res/drawable/seekbar_thumb.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_item_bg.xml b/app/src/main/res/drawable/setting_item_bg.xml new file mode 100644 index 0000000..96c00ec --- /dev/null +++ b/app/src/main/res/drawable/setting_item_bg.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/start_btn.xml b/app/src/main/res/drawable/start_btn.xml new file mode 100644 index 0000000..313a61c --- /dev/null +++ b/app/src/main/res/drawable/start_btn.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/start_btn_pressed.xml b/app/src/main/res/drawable/start_btn_pressed.xml new file mode 100644 index 0000000..0ea92d8 --- /dev/null +++ b/app/src/main/res/drawable/start_btn_pressed.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/main/res/drawable/start_btn_selector.xml b/app/src/main/res/drawable/start_btn_selector.xml new file mode 100644 index 0000000..f17b9b7 --- /dev/null +++ b/app/src/main/res/drawable/start_btn_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/toolbar_shape.xml b/app/src/main/res/drawable/toolbar_shape.xml new file mode 100644 index 0000000..1b16c29 --- /dev/null +++ b/app/src/main/res/drawable/toolbar_shape.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_draw.xml b/app/src/main/res/layout/activity_draw.xml new file mode 100644 index 0000000..4cd5e61 --- /dev/null +++ b/app/src/main/res/layout/activity_draw.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_gallery.xml b/app/src/main/res/layout/activity_gallery.xml new file mode 100644 index 0000000..9ef0d2d --- /dev/null +++ b/app/src/main/res/layout/activity_gallery.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..e55fbd8 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..05859bd --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/adapter_category.xml b/app/src/main/res/layout/adapter_category.xml new file mode 100644 index 0000000..94c412f --- /dev/null +++ b/app/src/main/res/layout/adapter_category.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/adapter_category_thumb.xml b/app/src/main/res/layout/adapter_category_thumb.xml new file mode 100644 index 0000000..62f7712 --- /dev/null +++ b/app/src/main/res/layout/adapter_category_thumb.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/adapter_image.xml b/app/src/main/res/layout/adapter_image.xml new file mode 100644 index 0000000..fdce00a --- /dev/null +++ b/app/src/main/res/layout/adapter_image.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_rating.xml b/app/src/main/res/layout/dialog_rating.xml new file mode 100644 index 0000000..ac749bb --- /dev/null +++ b/app/src/main/res/layout/dialog_rating.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_category.xml b/app/src/main/res/layout/fragment_category.xml new file mode 100644 index 0000000..52e635f --- /dev/null +++ b/app/src/main/res/layout/fragment_category.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 0000000..a5501b2 --- /dev/null +++ b/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/bottom_navigation_menu.xml b/app/src/main/res/menu/bottom_navigation_menu.xml new file mode 100644 index 0000000..cea7ade --- /dev/null +++ b/app/src/main/res/menu/bottom_navigation_menu.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/logo.png b/app/src/main/res/mipmap-hdpi/logo.png new file mode 100644 index 0000000..b8046b8 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/logo.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/arrow_lef.png b/app/src/main/res/mipmap-xxxhdpi/arrow_lef.png new file mode 100644 index 0000000..99593a4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/arrow_lef.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/arrow_left_white.png b/app/src/main/res/mipmap-xxxhdpi/arrow_left_white.png new file mode 100644 index 0000000..01d12db Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/arrow_left_white.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_about.png b/app/src/main/res/mipmap-xxxhdpi/icon_about.png new file mode 100644 index 0000000..80c1d52 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_about.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_set_on.png b/app/src/main/res/mipmap-xxxhdpi/icon_set_on.png new file mode 100644 index 0000000..2491f94 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_set_on.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_trace_draw_on.png b/app/src/main/res/mipmap-xxxhdpi/icon_trace_draw_on.png new file mode 100644 index 0000000..ab8c320 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_trace_draw_on.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/right.png b/app/src/main/res/mipmap-xxxhdpi/right.png new file mode 100644 index 0000000..880a44d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/right.png differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..71efee4 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..75bef65 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,24 @@ + + + + #FFFFFFFF + + + #3A3938 + + #B8E0D6 + #4ECDC4 + + + #F3FBF8 + #FAFEFD + #CDEEE4 + #D7F3EC + #E3F1EC + + + #2C3E50 + #7F8C8D + #4ECDC4 + #6BA896 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..51103bd --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,43 @@ + + Ar Drawing Space + + + 👋 Hi, Let\'s Draw! + Ready to have fun? 🎨 + 🎲 Random Sketch + Surprise me! ✨ + + + + Settings + + Version + V%s + Rate Us + Rate Us + We hope this app is useful for you, if it does, would you please give us a 5 star and a nice review on Google Play, it really helps! + CANCEL + RATE IT + Please grant the relevant permissions and try again. + The file must not exceed 4 MB, please try again. + + + + + Draw + + Setting + + + 🌟 Pick for You + ✏️ Let\'s Start Easy! + 🐯 Fun + Easy & Fun ⭐ + Preparing your sketchbook… + Cute Animals + 🐶 + Animals + Cute animals to draw! + Start → + Let\'s draw! + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..e0b5109 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,11 @@ + + + + +