diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a577c76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.gradle +/local.properties +.DS_Store +/build +/.idea +*.iml diff --git a/ConvertScript.jsx b/ConvertScript.jsx new file mode 100644 index 0000000..29cf7cf --- /dev/null +++ b/ConvertScript.jsx @@ -0,0 +1 @@ +var pathName = "path"; var DX = 1000; var PX_NUM = 100; var document = app.activeDocument; var pathItems = document.selection; var itemsLen = pathItems.length; if(itemsLen > 1 || itemsLen < 1) { alert('Please be sure to select one'); } else { printPoint(); } function printPoint() { var pathItem = pathItems[0]; var isClosed = pathItem.closed; var pathPoints = pathItem.pathPoints; var pathLen = pathPoints.length; var endPoint; var text = ''; $.writeln('public static Path getHogePath(float width, float[] centerPoint){ \n Path path = new Path();\n'); for(var j = 0; j < pathLen; j++) { var anchorPoint = round(pathPoints[j].anchor); var leftHandlePoint = round(pathPoints[j].leftDirection); var c = (j != 0) ? j - 1 : pathLen - 1; var rightHandlePoint = round(pathPoints[c].rightDirection); if (j == 0) { $.writeln(moveTo(anchorPoint)); text += moveTo(anchorPoint); if (isClosed) { endPoint = cubicTo(anchorPoint, leftHandlePoint, rightHandlePoint); } } else { $.writeln(cubicTo(anchorPoint, leftHandlePoint, rightHandlePoint)); text += cubicTo(anchorPoint, leftHandlePoint, rightHandlePoint); } } if (endPoint) { $.writeln(endPoint); text += endPoint; } $.writeln('return path;\n\n}'); $.writeln('******************************************************************************\n\n\n\n\n\n\n'); } function moveTo(anchor) { return pathName + '.moveTo(' + point(anchor) + ');' } function cubicTo(anchor, leftDirection, rightDirection) { return pathName +'.cubicTo(\n ' + point(rightDirection) + ',\n ' + point(leftDirection) + ',\n ' + point(anchor) + '\n);' } //centerPoint[0] - width / 2 + 0.275f * width, centerPoint[1] - width / 2 + 0.008f * width function point(point) { return 'centerPoint[0] - width / 2 + ' + (point[0]) + 'f * width, centerPoint[1] - width / 2 + ' + (-1 * point[1]) + 'f * width' } function round(point) { var p = []; var len = point.length; for(var i=0; i < len; i++) { p.push(Math.round(point[i] / PX_NUM * DX) / DX); } return p; } \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ec53d01 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 RECRUIT LIFESTYLE CO., LTD. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..674dadc --- /dev/null +++ b/README.md @@ -0,0 +1,118 @@ +# ColoringLoading + +[![Release](https://img.shields.io/github/release/recruit-lifestyle/ColoringLoading.svg?label=maven version)](https://github.com/recruit-lifestyle/ColoringLoading) +[![License](https://img.shields.io/hexpm/l/plug.svg)]() +This project provide Coloring Loading View for Android. +And this project is not using the image file! + +Even if this works fine with API.13 or less, we support only for API.14 or more. + + +## Screenshots +*Watch YouTube video [here](https://www.youtube.com/watch?v=ZIBP56GboX0).* +![](./sc/animation.gif) + +| NINJA | BUTTERFLY | VIOLIN | +|:------------------------------------|:-----------------------------------|:-----------------------------------| +| ||| + +| RIFLE | HEAR STYLE | TOOTH | +|:------------------------------------|:-----------------------------------|:-----------------------------------| +| ||| + +| CUCUMBER | STORM | DOGEZA | +|:------------------------------------|:-----------------------------------|:-----------------------------------| +| ||| + +| CAT | | | +|:------------------------------------|:------------------------------------|:------------------------------------| +| | | | + + +## Requirements +Target Sdk Version : 21 +Min Sdk Version : 14 + +## How to use +1) Add this to your **build.gradle**. +```java +repositories { + maven { + url "https://jitpack.io" + } +} + +dependencies { + compile 'com.github.recruit-lifestyle:ColoringLoading:1.0' +} +``` + +2) Add ```java jp.co.recruit_lifestyle.android.widget.ColoringLoadingView ```. +```xml + +``` + +3) Select Character. +```java +loadingView.setCharacter(ColoringLoadingView.Character.BUTTERFLY); +``` + +4) Call ```java ColoringLoadingView#startDrawAnimation``` +```java +loadingView.startDrawAnimation(); +``` + +5) When finished, call setVisibility(GONE) +```java +loadingView.setVisibility(View.GONE); +``` + +## Custom +If you need another Character, you can make new Character very easy. + +1) Make 100pt * 100pt Canvas with Illustrator + +2) Draw new Character + + + +3) Open ExtendScript ToolKit and import ConvertScript.jsx + +4) Select new Character, Run ConvertScript.jsx + + + +5) Copy the results outputted to CharacterPath.java + +6) Update ColoringLoadingView.java +Update Character + + +Add new case and put in CharacterPath variable + + +## Credits + +ColoringLoading is owned and maintained by [RECRUIT LIFESTYLE CO., LTD.](http://www.recruit-lifestyle.co.jp/) + +ColoringLoading was originally created by [Yuki Mima](https://github.com/amyu) + + +## License + + Copyright 2015 RECRUIT LIFESTYLE CO., LTD. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..935d590 --- /dev/null +++ b/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + maven { url "https://jitpack.io" } + jcenter() + } +} + +ext { + compileSdkVersion = 21 + buildToolsVersion = '21.1.1' + targetSdkVersion = 21 + minSdkVersion = 14 + versionCode = 1 + versionName = "0.1" +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..1d3591c --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..8c0fb64 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..dd2c2bc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Aug 07 12:38:21 JST 2015 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/library/.gitignore b/library/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/library/.gitignore @@ -0,0 +1 @@ +/build diff --git a/library/build.gradle b/library/build.gradle new file mode 100644 index 0000000..a19d2e2 --- /dev/null +++ b/library/build.gradle @@ -0,0 +1,42 @@ +apply plugin: 'com.android.library' +apply plugin: 'com.github.dcendents.android-maven' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion as Integer + buildToolsVersion rootProject.ext.buildToolsVersion as String + + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion as Integer + targetSdkVersion rootProject.ext.targetSdkVersion as Integer + versionCode rootProject.ext.versionCode as Integer + versionName rootProject.ext.versionName as String + } +} + +dependencies { + compile 'com.android.support:appcompat-v7:22.2.0' +} + +// build a jar with source files +task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' +} + +task javadoc(type: Javadoc) { + failOnError false + source = android.sourceSets.main.java.sourceFiles + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) +} + +// build a jar with javadoc +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives sourcesJar + archives javadocJar +} + diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro new file mode 100644 index 0000000..ccf7e55 --- /dev/null +++ b/library/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/amyu/opt/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 *; +#} diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1583706 --- /dev/null +++ b/library/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/BackgroundPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/BackgroundPath.java new file mode 100644 index 0000000..f496efa --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/BackgroundPath.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class BackgroundPath { + + private Path mBackgroundPath; + + private Path mShadowPath; + + public BackgroundPath() { + mBackgroundPath = new Path(); + mShadowPath = new Path(); + } + + public void setWidth(float width){ + mBackgroundPath.moveTo(0.038f * width, 0.025f * width); + mBackgroundPath.cubicTo(0.038f * width, 0.025f * width, 0.993f * width, 0.024f * width, + 0.993f * width, 0.024f * width); + mBackgroundPath.cubicTo( + 0.994f * width, 0.117f * width, + 1f * width, 0.147f * width, + 0.988f * width, 0.511f * width + ); + mBackgroundPath.cubicTo( + 0.977f * width, 0.861f * width, + 0.953f * width, 0.898f * width, + 0.948f * width, 0.957f * width + ); + mBackgroundPath.cubicTo( + 0.948f * width, 0.957f * width, + 0.248f * width, 0.947f * width, + 0.003f * width, 0.932f * width + ); + mBackgroundPath.cubicTo( + 0.003f * width, 0.932f * width, + 0.023f * width, 0.807f * width, + 0.031f * width, 0.539f * width + ); + mBackgroundPath.cubicTo( + 0.041f * width, 0.196f * width, + 0.03f * width, 0.136f * width, + 0.038f * width, 0.025f * width + ); + + mShadowPath.moveTo(0.03f * width, 0.03f * width); + mShadowPath.lineTo(0.03f * width, 0.97f * width); + mShadowPath.lineTo(0.98f * width, 0.97f * width); + mShadowPath.lineTo(0.98f * width, 0.03f * width); + mShadowPath.close(); + } + + public Path getBackgroundPath() { + return mBackgroundPath; + } + + + public Path getShadowPath() { + return mShadowPath; + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/ColoringLoadingView.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/ColoringLoadingView.java new file mode 100644 index 0000000..51905a2 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/ColoringLoadingView.java @@ -0,0 +1,406 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget; + +import android.content.Context; +import android.graphics.BlurMaskFilter; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.CornerPathEffect; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathMeasure; +import android.graphics.RectF; +import android.graphics.Region; +import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.v4.view.ViewCompat; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import jp.co.recruit_lifestyle.android.widget.character.AkPath; +import jp.co.recruit_lifestyle.android.widget.character.ButterflyPath; +import jp.co.recruit_lifestyle.android.widget.character.CatPath; +import jp.co.recruit_lifestyle.android.widget.character.CucumberPath; +import jp.co.recruit_lifestyle.android.widget.character.DogezaPath; +import jp.co.recruit_lifestyle.android.widget.character.HairStylePath; +import jp.co.recruit_lifestyle.android.widget.character.NinjaPath; +import jp.co.recruit_lifestyle.android.widget.character.NinjaStarPath; +import jp.co.recruit_lifestyle.android.widget.character.StormPath; +import jp.co.recruit_lifestyle.android.widget.character.ToothPath; +import jp.co.recruit_lifestyle.android.widget.character.ViolinPath; + +/** + * @author amyu + */ +public class ColoringLoadingView extends View { + + private PencilPath mPencilPath; + + private BackgroundPath mBackgroundPath; + + private Paint mCharacterPaint; + + private Paint mPencilPaint; + + private Paint mColoringPaint; + + private Paint mLoadingPaint; + + private Paint mBackgroundPaint; + + private Paint mShadowPaint; + + private Path mCharacterPath; + + private Path mLoadingPath; + + private PathMeasure mCharacterPathMeasure; + + private PathMeasure mLoadingPathMeasure; + + private int mViewWidth; + + private float[] mCenterPoint = new float[2]; + + private float[] mCurrentPoint = new float[2]; + + private boolean isHandWriting = false; + + private Handler mCharacterHandler; + + private Handler mLoadingHandler; + + private int mCharacterRunnableCount = 0; + + private int mLoadingRunnableCount = 0; + + private RectF mRectF; + + private Region mRegion; + + private Path mColoringPath; + + private float[] mCurrentTouchPoint = new float[2]; + + private boolean isPreDraw = false; + + private Character mCharacter; + + public ColoringLoadingView(Context context) { + this(context, null, 0); + } + + public ColoringLoadingView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ColoringLoadingView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + + mLoadingHandler = new Handler(); + mCharacterHandler = new Handler(); + mRectF = new RectF(); + mRegion = new Region(); + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + + private void initView() { + initPaint(); + } + + private void initPath() { + mColoringPath = new Path(); + + mLoadingPath = new Path(); + mCharacterPath = new Path(); + mPencilPath = new PencilPath(); + mPencilPath.setWidth(mViewWidth / 6); + + Path loadingPath = LoadingPath.getPath(mViewWidth); + mLoadingPathMeasure = new PathMeasure(loadingPath, false); + mBackgroundPath = new BackgroundPath(); + mBackgroundPath.setWidth(mViewWidth); + } + + private void initPaint() { + mCharacterPaint = new Paint(); + mCharacterPaint.setColor(Color.BLACK); + mCharacterPaint.setStyle(Paint.Style.STROKE); + mCharacterPaint.setStrokeWidth(20); + mCharacterPaint.setStrokeCap(Paint.Cap.ROUND); + mCharacterPaint.setPathEffect(new CornerPathEffect(10)); + mCharacterPaint.setAntiAlias(true); + + mLoadingPaint = new Paint(); + mLoadingPaint.setColor(Color.BLACK); + mLoadingPaint.setStrokeWidth(10); + mLoadingPaint.setStyle(Paint.Style.STROKE); + mLoadingPaint.setStrokeCap(Paint.Cap.ROUND); + mLoadingPaint.setPathEffect(new CornerPathEffect(10)); + mLoadingPaint.setAntiAlias(true); + + mPencilPaint = new Paint(); + mPencilPaint.setStyle(Paint.Style.FILL); + mPencilPaint.setColor(Color.BLACK); + mPencilPaint.setAntiAlias(true); + + mColoringPaint = new Paint(); + mColoringPaint.setStyle(Paint.Style.STROKE); + mColoringPaint.setStrokeWidth(30); + mColoringPaint.setStrokeCap(Paint.Cap.ROUND); + mColoringPaint.setAntiAlias(true); + mColoringPaint.setColor(0xffF8C92C); + + mBackgroundPaint = new Paint(); + mBackgroundPaint.setStyle(Paint.Style.FILL); + mBackgroundPaint.setAntiAlias(true); + mBackgroundPaint.setColor(Color.WHITE); + + mShadowPaint = new Paint(); + mShadowPaint.setStyle(Paint.Style.FILL); + mShadowPaint.setColor(0x70000000); + mShadowPaint.setMaskFilter(new BlurMaskFilter(16, BlurMaskFilter.Blur.NORMAL)); + + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + mViewWidth = w; + mCenterPoint[0] = w / 2.f; + mCenterPoint[1] = h / 2.f; + initPath(); + + isPreDraw = true; + setCharacter(mCharacter); + if (isStartAnimationFlag) { + startDrawAnimation(); + isStartAnimationFlag = false; + } + super.onSizeChanged(w, h, oldw, oldh); + } + + public void startDrawAnimation() { + if (!isPreDraw) { + isStartAnimationFlag = true; + return; + } + stopHandler(); + mPencilPaint.setColor(Color.BLACK); + isHandWriting = true; + mLoadingPath.reset(); + mCharacterPath.reset(); + mColoringPath.reset(); + mCharacterHandler.post(mCharacterRunnable); + mCharacterRunnableCount = 0; + } + + private Runnable mCharacterRunnable = new Runnable() { + @Override public void run() { + if ((mCharacterRunnableCount / 200.f) == 1.f) { + mCharacterHandler.removeCallbacks(this); + mLoadingHandler.post(mLoadingRunnable); + mLoadingRunnableCount = 0; + return; + } + + float[] point = new float[2]; + mCharacterPathMeasure.getPosTan( + mCharacterPathMeasure.getLength() * (mCharacterRunnableCount / 200.f), point, null); + if (mCharacterRunnableCount == 0) { + mCharacterPath.moveTo(point[0], point[1]); + } else { + mCharacterPath.lineTo(point[0], point[1]); + } + mCurrentPoint = point; + ViewCompat.postInvalidateOnAnimation(ColoringLoadingView.this); + mCharacterHandler.postDelayed(this, 10); + mCharacterRunnableCount++; + } + }; + + private Runnable mLoadingRunnable = new Runnable() { + @Override public void run() { + if ((mLoadingRunnableCount / 100.f) == 1.f) { + mLoadingHandler.removeCallbacks(this); + mLoadingPath.addPath(LoadingPath.getCirclePath(mViewWidth)); + ViewCompat.postInvalidateOnAnimation(ColoringLoadingView.this); + isHandWriting = false; + mPencilPaint.setColor(mColoringPaint.getColor()); + return; + } + float[] point = new float[2]; + mLoadingPathMeasure.getPosTan( + mLoadingPathMeasure.getLength() * (mLoadingRunnableCount / 100.f), point, null); + + if (mLoadingRunnableCount == 0) { + mLoadingPath.moveTo(point[0], point[1]); + } else { + mLoadingPath.lineTo(point[0], point[1]); + } + mCurrentPoint = point; + + ViewCompat.postInvalidateOnAnimation(ColoringLoadingView.this); + mLoadingHandler.postDelayed(this, 10); + mLoadingRunnableCount++; + } + }; + + @Override protected void onDraw(Canvas canvas) { + canvas.drawPath(mBackgroundPath.getShadowPath(), mShadowPaint); + canvas.drawPath(mBackgroundPath.getBackgroundPath(), mBackgroundPaint); + + if (isHandWriting) { + //Auto + canvas.drawPath(mCharacterPath, mCharacterPaint); + canvas.drawPath(mLoadingPath, mLoadingPaint); + canvas.drawPath(mPencilPath.getPencilPath(mCurrentPoint), mPencilPaint); + } else { + //Touch + canvas.drawPath(mColoringPath, mColoringPaint); + canvas.drawPath(mCharacterPath, mCharacterPaint); + canvas.drawPath(mPencilPath.getPencilPath(mCurrentTouchPoint), mPencilPaint); + canvas.drawPath(mLoadingPath, mLoadingPaint); + } + } + + @Override protected void onDetachedFromWindow() { + stopHandler(); + super.onDetachedFromWindow(); + } + + private void stopHandler() { + mCharacterHandler.removeCallbacks(mCharacterRunnable); + mLoadingHandler.removeCallbacks(mLoadingRunnable); + } + + @Override public boolean onTouchEvent(@NonNull MotionEvent event) { + if (isHandWriting) { + return true; + } + + mCurrentTouchPoint[0] = event.getX(); + mCurrentTouchPoint[1] = event.getY(); + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mColoringPath.moveTo(mCurrentTouchPoint[0], mCurrentTouchPoint[1]); + return true; + case MotionEvent.ACTION_MOVE: + if (mRegion.contains((int) mCurrentTouchPoint[0], (int) mCurrentTouchPoint[1])) { + mColoringPath.lineTo(mCurrentTouchPoint[0], mCurrentTouchPoint[1]); + } else { + mColoringPath.moveTo(mCurrentTouchPoint[0], mCurrentTouchPoint[1]); + } + ViewCompat.postInvalidateOnAnimation(this); + break; + } + return true; + } + + public void setColoringColor(int color) { + mColoringPaint.setColor(color); + invalidate(); + } + + public void setCnavasColor(int color) { + mBackgroundPaint.setColor(color); + invalidate(); + } + + public void setLineColor(int color) { + mLoadingPaint.setColor(color); + mCharacterPaint.setColor(color); + } + + private boolean isStartAnimationFlag = false; + + public void setCharacter(Character character) { + if (!isPreDraw) { + mCharacter = character; + return; + } + Path characterPath; + switch (character) { + case NINJA: + characterPath = NinjaPath.getNinjaPath(mViewWidth / 1.5f, mCenterPoint); + break; + case BUTTERFLY: + characterPath = ButterflyPath.getButterflyPath(mViewWidth / 1.5f, mCenterPoint); + break; + case AK: + characterPath = AkPath.getAkPath(mViewWidth / 1.5f, mCenterPoint); + break; + case HAIR_STYLE: + characterPath = HairStylePath.getHairStylePath(mViewWidth / 1.5f, mCenterPoint); + break; + case TOOTH: + characterPath = ToothPath.getToothPath(mViewWidth / 1.5f, mCenterPoint); + break; + case STORM: + characterPath = StormPath.getStormPath(mViewWidth / 1.5f, mCenterPoint); + break; + case DOGEZA: + characterPath = DogezaPath.getDogezaPath(mViewWidth / 1.5f, mCenterPoint); + break; + case CAT: + characterPath = CatPath.getCatPath(mViewWidth / 1.5f, mCenterPoint); + break; + case VIOLIN: + characterPath = ViolinPath.getViolinPath(mViewWidth / 1.5f, mCenterPoint); + break; + case CUCUMBER: + characterPath = CucumberPath.getCucumberPath(mViewWidth / 1.5f, mCenterPoint); + break; + case NINJA_STAR: + characterPath = NinjaStarPath.getNinjaStarPath(mViewWidth / 1.5f, mCenterPoint); + break; + + default: + characterPath = NinjaPath.getNinjaPath(mViewWidth / 1.5f, mCenterPoint); + break; + } + mCharacterPathMeasure = new PathMeasure(characterPath, false); + mRectF.setEmpty(); + characterPath.computeBounds(mRectF, true); + mRegion.setEmpty(); + mRegion.set((int) mRectF.left, (int) mRectF.top, (int) mRectF.right, (int) mRectF.bottom); + mRegion.setPath(characterPath, mRegion); + } + + public enum Character { + NINJA(1), + BUTTERFLY(2), + AK(4), + HAIR_STYLE(5), + TOOTH(6), + STORM(8), + DOGEZA(9), + CAT(10), + VIOLIN(11), + CUCUMBER(12), + NINJA_STAR(13), + + ''; + + Character(int i) { + nativeInt = i; + } + + final int nativeInt; + } +} \ No newline at end of file diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/LoadingPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/LoadingPath.java new file mode 100644 index 0000000..108a7b6 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/LoadingPath.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class LoadingPath { + + public static Path getPath(float width) { + Path path = new Path(); + + path.moveTo(0.641f * width, 0.859f * width); + path.cubicTo(0.642f * width, 0.864f * width, 0.646f * width, 0.866f * width, 0.649f * width, + 0.867f * width); + path.cubicTo(0.683f * width, 0.874f * width, 0.703f * width, 0.854f * width, 0.7f * width, + 0.847f * width); + path.cubicTo(0.699f * width, 0.847f * width, 0.698f * width, 0.844f * width, 0.694f * width, + 0.844f * width); + path.cubicTo(0.689f * width, 0.844f * width, 0.683f * width, 0.849f * width, 0.677f * width, + 0.865f * width); + path.cubicTo(0.665f * width, 0.895f * width, 0.665f * width, 0.903f * width, 0.656f * width, + 0.913f * width); + path.cubicTo(0.638f * width, 0.931f * width, 0.63f * width, 0.917f * width, 0.63f * width, + 0.913f * width); + path.cubicTo(0.63f * width, 0.91f * width, 0.63f * width, 0.908f * width, 0.632f * width, + 0.906f * width); + path.cubicTo(0.636f * width, 0.902f * width, 0.644f * width, 0.903f * width, 0.65f * width, + 0.905f * width); + path.cubicTo(0.667f * width, 0.912f * width, 0.67f * width, 0.921f * width, 0.681f * width, + 0.919f * width); + path.cubicTo(0.693f * width, 0.917f * width, 0.697f * width, 0.91f * width, 0.701f * width, + 0.903f * width); + path.cubicTo(0.714f * width, 0.885f * width, 0.716f * width, 0.885f * width, 0.716f * width, + 0.885f * width); + path.cubicTo(0.715f * width, 0.884f * width, 0.705f * width, 0.894f * width, 0.702f * width, + 0.907f * width); + path.cubicTo(0.702f * width, 0.911f * width, 0.702f * width, 0.917f * width, 0.709f * width, + 0.917f * width); + path.cubicTo(0.718f * width, 0.917f * width, 0.728f * width, 0.905f * width, 0.729f * width, + 0.891f * width); + path.cubicTo(0.729f * width, 0.888f * width, 0.727f * width, 0.883f * width, 0.725f * width, + 0.883f * width); + path.cubicTo(0.72f * width, 0.883f * width, 0.713f * width, 0.901f * width, 0.72f * width, + 0.908f * width); + path.cubicTo(0.723f * width, 0.91f * width, 0.728f * width, 0.91f * width, 0.731f * width, + 0.908f * width); + path.cubicTo(0.738f * width, 0.905f * width, 0.739f * width, 0.899f * width, 0.746f * width, + 0.892f * width); + path.cubicTo(0.756f * width, 0.882f * width, 0.769f * width, 0.883f * width, 0.769f * width, + 0.882f * width); + path.cubicTo(0.769f * width, 0.882f * width, 0.754f * width, 0.883f * width, 0.746f * width, + 0.892f * width); + path.cubicTo(0.744f * width, 0.895f * width, 0.736f * width, 0.902f * width, 0.738f * width, + 0.909f * width); + path.cubicTo(0.738f * width, 0.912f * width, 0.74f * width, 0.916f * width, 0.743f * width, + 0.917f * width); + path.cubicTo(0.753f * width, 0.919f * width, 0.77f * width, 0.883f * width, 0.769f * width, + 0.882f * width); + path.cubicTo(0.768f * width, 0.882f * width, 0.765f * width, 0.893f * width, 0.759f * width, + 0.907f * width); + path.cubicTo(0.758f * width, 0.908f * width, 0.759f * width, 0.917f * width, 0.763f * width, + 0.916f * width); + path.cubicTo(0.77f * width, 0.916f * width, 0.777f * width, 0.906f * width, 0.785f * width, + 0.894f * width); + path.cubicTo(0.788f * width, 0.889f * width, 0.793f * width, 0.885f * width, 0.8f * width, + 0.883f * width); + path.cubicTo(0.803f * width, 0.882f * width, 0.808f * width, 0.88f * width, 0.81f * width, + 0.882f * width); + path.cubicTo(0.804f * width, 0.894f * width, 0.801f * width, 0.903f * width, 0.801f * width, + 0.903f * width); + path.cubicTo(0.802f * width, 0.904f * width, 0.811f * width, 0.887f * width, 0.811f * width, + 0.883f * width); + path.cubicTo(0.812f * width, 0.877f * width, 0.78f * width, 0.888f * width, 0.779f * width, + 0.905f * width); + path.cubicTo(0.779f * width, 0.909f * width, 0.78f * width, 0.914f * width, 0.784f * width, + 0.915f * width); + path.cubicTo(0.794f * width, 0.918f * width, 0.808f * width, 0.894f * width, 0.812f * width, + 0.879f * width); + path.cubicTo(0.817f * width, 0.865f * width, 0.823f * width, 0.851f * width, 0.823f * width, + 0.851f * width); + path.cubicTo(0.823f * width, 0.851f * width, 0.819f * width, 0.861f * width, 0.802f * width, + 0.905f * width); + path.cubicTo(0.802f * width, 0.909f * width, 0.802f * width, 0.915f * width, 0.805f * width, + 0.915f * width); + path.cubicTo(0.812f * width, 0.914f * width, 0.835f * width, 0.881f * width, 0.835f * width, + 0.882f * width); + path.cubicTo(0.836f * width, 0.882f * width, 0.831f * width, 0.89f * width, 0.827f * width, + 0.901f * width); + path.cubicTo(0.824f * width, 0.908f * width, 0.824f * width, 0.912f * width, 0.825f * width, + 0.913f * width); + path.cubicTo(0.826f * width, 0.913f * width, 0.827f * width, 0.915f * width, 0.829f * width, + 0.914f * width); + path.cubicTo(0.845f * width, 0.904f * width, 0.842f * width, 0.894f * width, 0.858f * width, + 0.882f * width); + path.cubicTo(0.86f * width, 0.881f * width, 0.861f * width, 0.881f * width, 0.862f * width, + 0.881f * width); + path.cubicTo(0.869f * width, 0.884f * width, 0.854f * width, 0.912f * width, 0.855f * width, + 0.913f * width); + path.cubicTo(0.855f * width, 0.913f * width, 0.867f * width, 0.885f * width, 0.879f * width, + 0.88f * width); + path.cubicTo(0.88f * width, 0.88f * width, 0.882f * width, 0.879f * width, 0.884f * width, + 0.88f * width); + path.cubicTo(0.887f * width, 0.882f * width, 0.885f * width, 0.889f * width, 0.885f * width, + 0.891f * width); + path.cubicTo(0.882f * width, 0.898f * width, 0.878f * width, 0.906f * width, 0.878f * width, + 0.909f * width); + path.cubicTo(0.878f * width, 0.909f * width, 0.879f * width, 0.913f * width, 0.882f * width, + 0.912f * width); + path.cubicTo(0.887f * width, 0.911f * width, 0.897f * width, 0.9f * width, 0.904f * width, + 0.888f * width); + path.cubicTo(0.909f * width, 0.879f * width, 0.927f * width, 0.875f * width, 0.928f * width, + 0.877f * width); + path.cubicTo(0.928f * width, 0.877f * width, 0.904f * width, 0.875f * width, 0.896f * width, + 0.904f * width); + path.cubicTo(0.896f * width, 0.907f * width, 0.9f * width, 0.913f * width, 0.903f * width, + 0.912f * width); + path.cubicTo(0.926f * width, 0.903f * width, 0.926f * width, 0.876f * width, 0.928f * width, + 0.878f * width); + path.cubicTo(0.928f * width, 0.878f * width, 0.909f * width, 0.93f * width, 0.902f * width, + 0.943f * width); + path.cubicTo(0.901f * width, 0.945f * width, 0.898f * width, 0.948f * width, 0.896f * width, + 0.947f * width); + path.cubicTo(0.893f * width, 0.947f * width, 0.892f * width, 0.943f * width, 0.891f * width, + 0.941f * width); + path.cubicTo(0.89f * width, 0.936f * width, 0.896f * width, 0.923f * width, 0.913f * width, + 0.912f * width); + path.cubicTo(0.919f * width, 0.909f * width, 0.929f * width, 0.9f * width, 0.933f * width, + 0.895f * width); + + return path; + } + + public static Path getCirclePath(float width) { + Path path = new Path(); + path.moveTo(0.843f * width, 0.857f * width); + path.cubicTo( + 0.844f * width, 0.857f * width, + 0.845f * width, 0.858f * width, + 0.845f * width, 0.86f * width + ); + path.cubicTo( + 0.845f * width, 0.861f * width, + 0.844f * width, 0.862f * width, + 0.843f * width, 0.862f * width + ); + path.cubicTo( + 0.842f * width, 0.862f * width, + 0.841f * width, 0.861f * width, + 0.841f * width, 0.86f * width + ); + path.cubicTo( + 0.841f * width, 0.859f * width, + 0.842f * width, 0.857f * width, + 0.843f * width, 0.857f * width + ); + return path; + } +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/PencilPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/PencilPath.java new file mode 100644 index 0000000..840c802 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/PencilPath.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class PencilPath { + + private float mWidth; + + private Path mPath; + + public PencilPath() { + mPath = new Path(); + } + + public Path getPencilPath(float[] centerPoint) { + reset(); + mPath.moveTo((0.595f - 0.1925f) * mWidth + centerPoint[0], + (0.2325f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.1925f - 0.1925f) * mWidth + centerPoint[0], + (0.63625f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.1925f - 0.1925f) * mWidth + centerPoint[0], + (0.79125f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.34625f - 0.1925f) * mWidth + centerPoint[0], + (0.7925f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.75f - 0.1925f) * mWidth + centerPoint[0], + (0.38625f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.595f - 0.1925f) * mWidth + centerPoint[0], + (0.2325f - 0.79125f) * mWidth + centerPoint[1]); + + mPath.moveTo((0.64f - 0.1925f) * mWidth + centerPoint[0], + (0.19375f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.79f - 0.1925f) * mWidth + centerPoint[0], + (0.3425f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.8775f - 0.1925f) * mWidth + centerPoint[0], + (0.25375f - 0.79125f) * mWidth + centerPoint[1]); + mPath.cubicTo((0.88612f - 0.1925f) * mWidth + centerPoint[0], + (0.24347f - 0.79125f) * mWidth + centerPoint[1], + (0.88469f - 0.1925f) * mWidth + centerPoint[0], + (0.2325f - 0.79125f) * mWidth + centerPoint[1], + (0.8775f - 0.1925f) * mWidth + centerPoint[0], + (0.22375f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.76375f - 0.1925f) * mWidth + centerPoint[0], + (0.1075f - 0.79125f) * mWidth + centerPoint[1]); + mPath.cubicTo((0.75219f - 0.1925f) * mWidth + centerPoint[0], + (0.09531f - 0.79125f) * mWidth + centerPoint[1], + (0.74063f - 0.1925f) * mWidth + centerPoint[0], + (0.09719f - 0.79125f) * mWidth + centerPoint[1], + (0.72875f - 0.1925f) * mWidth + centerPoint[0], + (0.105f - 0.79125f) * mWidth + centerPoint[1]); + mPath.lineTo((0.64f - 0.1925f) * mWidth + centerPoint[0], + (0.19375f - 0.79125f) * mWidth + centerPoint[1]); + return mPath; + } + + public void setWidth(float mmWidth) { + this.mWidth = mmWidth; + } + + public void reset(){ + mPath.reset(); + } +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/AkPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/AkPath.java new file mode 100644 index 0000000..8394c95 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/AkPath.java @@ -0,0 +1,549 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class AkPath { + + public static Path getAkPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.986f * width, centerPoint[1] - width / 2 + 0.436f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.985f * width, centerPoint[1] - width / 2 + 0.431f * width, + centerPoint[0] - width / 2 + 0.982f * width, centerPoint[1] - width / 2 + 0.429f * width, + centerPoint[0] - width / 2 + 0.98f * width, centerPoint[1] - width / 2 + 0.429f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.978f * width, centerPoint[1] - width / 2 + 0.429f * width, + centerPoint[0] - width / 2 + 0.843f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.836f * width, centerPoint[1] - width / 2 + 0.412f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.83f * width, centerPoint[1] - width / 2 + 0.411f * width, + centerPoint[0] - width / 2 + 0.829f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.826f * width, centerPoint[1] - width / 2 + 0.415f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.823f * width, centerPoint[1] - width / 2 + 0.418f * width, + centerPoint[0] - width / 2 + 0.808f * width, centerPoint[1] - width / 2 + 0.421f * width, + centerPoint[0] - width / 2 + 0.798f * width, centerPoint[1] - width / 2 + 0.419f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.788f * width, centerPoint[1] - width / 2 + 0.416f * width, + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.405f * width, + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.405f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.405f * width, + centerPoint[0] - width / 2 + 0.732f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.732f * width, centerPoint[1] - width / 2 + 0.401f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.732f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.401f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.396f * width, + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.396f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.396f * width, + centerPoint[0] - width / 2 + 0.693f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.693f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.693f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.462f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.462f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.462f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.363f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.459f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.362f * width, + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.362f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.362f * width, + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.352f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.352f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.356f * width, + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.356f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.356f * width, + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.356f * width, + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.356f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.356f * width, + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.353f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.451f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.451f * width, centerPoint[1] - width / 2 + 0.353f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.451f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.449f * width, centerPoint[1] - width / 2 + 0.355f * width, + centerPoint[0] - width / 2 + 0.449f * width, centerPoint[1] - width / 2 + 0.355f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.449f * width, centerPoint[1] - width / 2 + 0.355f * width, + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.39f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.39f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.39f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.364f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.363f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.37f * width, centerPoint[1] - width / 2 + 0.357f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.363f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.269f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.264f * width, centerPoint[1] - width / 2 + 0.357f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.259f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.258f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.258f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.368f * width, + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.239f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.168f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.168f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.168f * width, centerPoint[1] - width / 2 + 0.369f * width, + centerPoint[0] - width / 2 + 0.157f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.396f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.398f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.398f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.051f * width, centerPoint[1] - width / 2 + 0.36f * width, + centerPoint[0] - width / 2 + 0.051f * width, centerPoint[1] - width / 2 + 0.36f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.051f * width, centerPoint[1] - width / 2 + 0.36f * width, + centerPoint[0] - width / 2 + 0.048f * width, centerPoint[1] - width / 2 + 0.35f * width, + centerPoint[0] - width / 2 + 0.04f * width, centerPoint[1] - width / 2 + 0.35f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.35f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.392f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.392f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.392f * width, + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.392f * width, + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.392f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.392f * width, + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.395f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.025f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.395f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.412f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.014f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.412f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.415f * width, + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.415f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.028f * width, centerPoint[1] - width / 2 + 0.415f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.415f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.415f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.415f * width, + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.417f * width, + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.417f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.417f * width, + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.425f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.425f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.039f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.039f * width, centerPoint[1] - width / 2 + 0.422f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.039f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.161f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.161f * width, centerPoint[1] - width / 2 + 0.422f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.161f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.164f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.164f * width, centerPoint[1] - width / 2 + 0.426f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.164f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.171f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.171f * width, centerPoint[1] - width / 2 + 0.426f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.171f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.173f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.173f * width, centerPoint[1] - width / 2 + 0.422f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.173f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.422f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.427f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.43f * width, + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.259f * width, centerPoint[1] - width / 2 + 0.433f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.436f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.437f * width, + centerPoint[0] - width / 2 + 0.278f * width, centerPoint[1] - width / 2 + 0.437f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.437f * width, + centerPoint[0] - width / 2 + 0.366f * width, centerPoint[1] - width / 2 + 0.435f * width, + centerPoint[0] - width / 2 + 0.373f * width, centerPoint[1] - width / 2 + 0.435f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.435f * width, + centerPoint[0] - width / 2 + 0.388f * width, centerPoint[1] - width / 2 + 0.436f * width, + centerPoint[0] - width / 2 + 0.396f * width, centerPoint[1] - width / 2 + 0.441f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.446f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.449f * width, + centerPoint[0] - width / 2 + 0.42f * width, centerPoint[1] - width / 2 + 0.449f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.428f * width, centerPoint[1] - width / 2 + 0.449f * width, + centerPoint[0] - width / 2 + 0.43f * width, centerPoint[1] - width / 2 + 0.441f * width, + centerPoint[0] - width / 2 + 0.433f * width, centerPoint[1] - width / 2 + 0.441f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.437f * width, centerPoint[1] - width / 2 + 0.441f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.441f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.441f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.441f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.454f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.454f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.454f * width, + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.454f * width, + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.454f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.454f * width, + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.552f * width, + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.592f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.417f * width, centerPoint[1] - width / 2 + 0.608f * width, + centerPoint[0] - width / 2 + 0.448f * width, centerPoint[1] - width / 2 + 0.649f * width, + centerPoint[0] - width / 2 + 0.448f * width, centerPoint[1] - width / 2 + 0.649f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.448f * width, centerPoint[1] - width / 2 + 0.649f * width, + centerPoint[0] - width / 2 + 0.455f * width, centerPoint[1] - width / 2 + 0.65f * width, + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.65f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.649f * width, + centerPoint[0] - width / 2 + 0.544f * width, centerPoint[1] - width / 2 + 0.58f * width, + centerPoint[0] - width / 2 + 0.566f * width, centerPoint[1] - width / 2 + 0.47f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.571f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.477f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.488f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.572f * width, centerPoint[1] - width / 2 + 0.49f * width, + centerPoint[0] - width / 2 + 0.572f * width, centerPoint[1] - width / 2 + 0.49f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.572f * width, centerPoint[1] - width / 2 + 0.49f * width, + centerPoint[0] - width / 2 + 0.573f * width, centerPoint[1] - width / 2 + 0.493f * width, + centerPoint[0] - width / 2 + 0.573f * width, centerPoint[1] - width / 2 + 0.493f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.493f * width, + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.493f * width, + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.493f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.493f * width, + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.48f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.477f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.477f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.479f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.481f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.481f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.482f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.482f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.482f * width, + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.488f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.64f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.64f * width, centerPoint[1] - width / 2 + 0.488f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.64f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.481f * width, + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.481f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.481f * width, + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.473f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.473f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.657f * width, centerPoint[1] - width / 2 + 0.474f * width, + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.481f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.663f * width, centerPoint[1] - width / 2 + 0.487f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.54f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.543f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.689f * width, centerPoint[1] - width / 2 + 0.545f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.55f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.554f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.557f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.565f * width, + centerPoint[0] - width / 2 + 0.697f * width, centerPoint[1] - width / 2 + 0.566f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.706f * width, centerPoint[1] - width / 2 + 0.566f * width, + centerPoint[0] - width / 2 + 0.715f * width, centerPoint[1] - width / 2 + 0.565f * width, + centerPoint[0] - width / 2 + 0.724f * width, centerPoint[1] - width / 2 + 0.556f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.733f * width, centerPoint[1] - width / 2 + 0.548f * width, + centerPoint[0] - width / 2 + 0.736f * width, centerPoint[1] - width / 2 + 0.542f * width, + centerPoint[0] - width / 2 + 0.732f * width, centerPoint[1] - width / 2 + 0.535f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.491f * width, + centerPoint[0] - width / 2 + 0.711f * width, centerPoint[1] - width / 2 + 0.487f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.709f * width, centerPoint[1] - width / 2 + 0.482f * width, + centerPoint[0] - width / 2 + 0.707f * width, centerPoint[1] - width / 2 + 0.476f * width, + centerPoint[0] - width / 2 + 0.71f * width, centerPoint[1] - width / 2 + 0.473f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.714f * width, centerPoint[1] - width / 2 + 0.469f * width, + centerPoint[0] - width / 2 + 0.717f * width, centerPoint[1] - width / 2 + 0.465f * width, + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.462f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.46f * width, + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.452f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.452f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.794f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.831f * width, centerPoint[1] - width / 2 + 0.484f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.868f * width, centerPoint[1] - width / 2 + 0.495f * width, + centerPoint[0] - width / 2 + 0.943f * width, centerPoint[1] - width / 2 + 0.521f * width, + centerPoint[0] - width / 2 + 0.95f * width, centerPoint[1] - width / 2 + 0.524f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.957f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.97f * width, centerPoint[1] - width / 2 + 0.529f * width, + centerPoint[0] - width / 2 + 0.974f * width, centerPoint[1] - width / 2 + 0.522f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.978f * width, centerPoint[1] - width / 2 + 0.516f * width, + centerPoint[0] - width / 2 + 0.986f * width, centerPoint[1] - width / 2 + 0.441f * width, + centerPoint[0] - width / 2 + 0.986f * width, centerPoint[1] - width / 2 + 0.436f * width + ); + return path; + + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ButterflyPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ButterflyPath.java new file mode 100644 index 0000000..b4269f5 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ButterflyPath.java @@ -0,0 +1,541 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class ButterflyPath { + public static Path getButterflyPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.666f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.47f * width, centerPoint[1] - width / 2 + 0.668f * width, + centerPoint[0] - width / 2 + 0.48f * width, centerPoint[1] - width / 2 + 0.548f * width, + centerPoint[0] - width / 2 + 0.479f * width, centerPoint[1] - width / 2 + 0.545f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.478f * width, centerPoint[1] - width / 2 + 0.541f * width, + centerPoint[0] - width / 2 + 0.479f * width, centerPoint[1] - width / 2 + 0.534f * width, + centerPoint[0] - width / 2 + 0.478f * width, centerPoint[1] - width / 2 + 0.532f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.529f * width, + centerPoint[0] - width / 2 + 0.467f * width, centerPoint[1] - width / 2 + 0.54f * width, + centerPoint[0] - width / 2 + 0.447f * width, centerPoint[1] - width / 2 + 0.572f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.427f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.361f * width, centerPoint[1] - width / 2 + 0.739f * width, + centerPoint[0] - width / 2 + 0.352f * width, centerPoint[1] - width / 2 + 0.733f * width, + centerPoint[0] - width / 2 + 0.348f * width, centerPoint[1] - width / 2 + 0.733f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.344f * width, centerPoint[1] - width / 2 + 0.732f * width, + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.739f * width, + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.319f * width, centerPoint[1] - width / 2 + 0.787f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.785f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.302f * width, centerPoint[1] - width / 2 + 0.783f * width, + centerPoint[0] - width / 2 + 0.303f * width, centerPoint[1] - width / 2 + 0.757f * width, + centerPoint[0] - width / 2 + 0.295f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.287f * width, centerPoint[1] - width / 2 + 0.752f * width, + centerPoint[0] - width / 2 + 0.275f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.271f * width, centerPoint[1] - width / 2 + 0.77f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.764f * width, + centerPoint[0] - width / 2 + 0.264f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.263f * width, centerPoint[1] - width / 2 + 0.745f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.744f * width, + centerPoint[0] - width / 2 + 0.252f * width, centerPoint[1] - width / 2 + 0.743f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.743f * width, + centerPoint[0] - width / 2 + 0.206f * width, centerPoint[1] - width / 2 + 0.774f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.803f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.17f * width, centerPoint[1] - width / 2 + 0.832f * width, + centerPoint[0] - width / 2 + 0.119f * width, centerPoint[1] - width / 2 + 0.857f * width, + centerPoint[0] - width / 2 + 0.109f * width, centerPoint[1] - width / 2 + 0.844f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.098f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.111f * width, centerPoint[1] - width / 2 + 0.82f * width, + centerPoint[0] - width / 2 + 0.126f * width, centerPoint[1] - width / 2 + 0.803f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.141f * width, centerPoint[1] - width / 2 + 0.786f * width, + centerPoint[0] - width / 2 + 0.175f * width, centerPoint[1] - width / 2 + 0.765f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.757f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.2f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.723f * width, + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.701f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.252f * width, centerPoint[1] - width / 2 + 0.678f * width, + centerPoint[0] - width / 2 + 0.234f * width, centerPoint[1] - width / 2 + 0.669f * width, + centerPoint[0] - width / 2 + 0.224f * width, centerPoint[1] - width / 2 + 0.663f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.214f * width, centerPoint[1] - width / 2 + 0.656f * width, + centerPoint[0] - width / 2 + 0.225f * width, centerPoint[1] - width / 2 + 0.641f * width, + centerPoint[0] - width / 2 + 0.229f * width, centerPoint[1] - width / 2 + 0.634f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.232f * width, centerPoint[1] - width / 2 + 0.628f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.62f * width, + centerPoint[0] - width / 2 + 0.223f * width, centerPoint[1] - width / 2 + 0.616f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.215f * width, centerPoint[1] - width / 2 + 0.612f * width, + centerPoint[0] - width / 2 + 0.207f * width, centerPoint[1] - width / 2 + 0.599f * width, + centerPoint[0] - width / 2 + 0.208f * width, centerPoint[1] - width / 2 + 0.59f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.21f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.578f * width, + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.574f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.211f * width, centerPoint[1] - width / 2 + 0.569f * width, + centerPoint[0] - width / 2 + 0.199f * width, centerPoint[1] - width / 2 + 0.562f * width, + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.555f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.193f * width, centerPoint[1] - width / 2 + 0.549f * width, + centerPoint[0] - width / 2 + 0.215f * width, centerPoint[1] - width / 2 + 0.531f * width, + centerPoint[0] - width / 2 + 0.217f * width, centerPoint[1] - width / 2 + 0.529f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.219f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.22f * width, centerPoint[1] - width / 2 + 0.517f * width, + centerPoint[0] - width / 2 + 0.221f * width, centerPoint[1] - width / 2 + 0.511f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.222f * width, centerPoint[1] - width / 2 + 0.505f * width, + centerPoint[0] - width / 2 + 0.257f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.259f * width, centerPoint[1] - width / 2 + 0.486f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.483f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.478f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.48f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.482f * width, + centerPoint[0] - width / 2 + 0.216f * width, centerPoint[1] - width / 2 + 0.471f * width, + centerPoint[0] - width / 2 + 0.207f * width, centerPoint[1] - width / 2 + 0.463f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.198f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.186f * width, centerPoint[1] - width / 2 + 0.425f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.184f * width, centerPoint[1] - width / 2 + 0.418f * width, + centerPoint[0] - width / 2 + 0.182f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.176f * width, centerPoint[1] - width / 2 + 0.407f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.171f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.17f * width, centerPoint[1] - width / 2 + 0.39f * width, + centerPoint[0] - width / 2 + 0.168f * width, centerPoint[1] - width / 2 + 0.385f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.166f * width, centerPoint[1] - width / 2 + 0.38f * width, + centerPoint[0] - width / 2 + 0.153f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.149f * width, centerPoint[1] - width / 2 + 0.357f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.144f * width, centerPoint[1] - width / 2 + 0.35f * width, + centerPoint[0] - width / 2 + 0.146f * width, centerPoint[1] - width / 2 + 0.345f * width, + centerPoint[0] - width / 2 + 0.144f * width, centerPoint[1] - width / 2 + 0.34f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.334f * width, + centerPoint[0] - width / 2 + 0.132f * width, centerPoint[1] - width / 2 + 0.322f * width, + centerPoint[0] - width / 2 + 0.129f * width, centerPoint[1] - width / 2 + 0.317f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.126f * width, centerPoint[1] - width / 2 + 0.311f * width, + centerPoint[0] - width / 2 + 0.125f * width, centerPoint[1] - width / 2 + 0.3f * width, + centerPoint[0] - width / 2 + 0.123f * width, centerPoint[1] - width / 2 + 0.297f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.121f * width, centerPoint[1] - width / 2 + 0.293f * width, + centerPoint[0] - width / 2 + 0.112f * width, centerPoint[1] - width / 2 + 0.277f * width, + centerPoint[0] - width / 2 + 0.11f * width, centerPoint[1] - width / 2 + 0.272f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.108f * width, centerPoint[1] - width / 2 + 0.268f * width, + centerPoint[0] - width / 2 + 0.104f * width, centerPoint[1] - width / 2 + 0.259f * width, + centerPoint[0] - width / 2 + 0.097f * width, centerPoint[1] - width / 2 + 0.251f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.091f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.2f * width, + centerPoint[0] - width / 2 + 0.061f * width, centerPoint[1] - width / 2 + 0.184f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.056f * width, centerPoint[1] - width / 2 + 0.168f * width, + centerPoint[0] - width / 2 + 0.073f * width, centerPoint[1] - width / 2 + 0.157f * width, + centerPoint[0] - width / 2 + 0.104f * width, centerPoint[1] - width / 2 + 0.153f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.136f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.173f * width, centerPoint[1] - width / 2 + 0.162f * width, + centerPoint[0] - width / 2 + 0.223f * width, centerPoint[1] - width / 2 + 0.184f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.206f * width, + centerPoint[0] - width / 2 + 0.316f * width, centerPoint[1] - width / 2 + 0.25f * width, + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.3f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.418f * width, centerPoint[1] - width / 2 + 0.349f * width, + centerPoint[0] - width / 2 + 0.48f * width, centerPoint[1] - width / 2 + 0.462f * width, + centerPoint[0] - width / 2 + 0.482f * width, centerPoint[1] - width / 2 + 0.461f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.484f * width, centerPoint[1] - width / 2 + 0.461f * width, + centerPoint[0] - width / 2 + 0.482f * width, centerPoint[1] - width / 2 + 0.455f * width, + centerPoint[0] - width / 2 + 0.48f * width, centerPoint[1] - width / 2 + 0.449f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.478f * width, centerPoint[1] - width / 2 + 0.444f * width, + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.436f * width, + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.436f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.484f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.484f * width, centerPoint[1] - width / 2 + 0.433f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.484f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.481f * width, centerPoint[1] - width / 2 + 0.427f * width, + centerPoint[0] - width / 2 + 0.482f * width, centerPoint[1] - width / 2 + 0.421f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.416f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.414f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.485f * width, centerPoint[1] - width / 2 + 0.406f * width, + centerPoint[0] - width / 2 + 0.401f * width, centerPoint[1] - width / 2 + 0.307f * width, + centerPoint[0] - width / 2 + 0.401f * width, centerPoint[1] - width / 2 + 0.307f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.305f * width, + centerPoint[0] - width / 2 + 0.385f * width, centerPoint[1] - width / 2 + 0.294f * width, + centerPoint[0] - width / 2 + 0.387f * width, centerPoint[1] - width / 2 + 0.293f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.389f * width, centerPoint[1] - width / 2 + 0.292f * width, + centerPoint[0] - width / 2 + 0.392f * width, centerPoint[1] - width / 2 + 0.291f * width, + centerPoint[0] - width / 2 + 0.405f * width, centerPoint[1] - width / 2 + 0.305f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.418f * width, centerPoint[1] - width / 2 + 0.32f * width, + centerPoint[0] - width / 2 + 0.495f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.495f * width, centerPoint[1] - width / 2 + 0.413f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.495f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.413f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.502f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.505f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.505f * width, centerPoint[1] - width / 2 + 0.413f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.505f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.32f * width, + centerPoint[0] - width / 2 + 0.595f * width, centerPoint[1] - width / 2 + 0.305f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.291f * width, + centerPoint[0] - width / 2 + 0.611f * width, centerPoint[1] - width / 2 + 0.292f * width, + centerPoint[0] - width / 2 + 0.613f * width, centerPoint[1] - width / 2 + 0.293f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.615f * width, centerPoint[1] - width / 2 + 0.294f * width, + centerPoint[0] - width / 2 + 0.606f * width, centerPoint[1] - width / 2 + 0.305f * width, + centerPoint[0] - width / 2 + 0.599f * width, centerPoint[1] - width / 2 + 0.307f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.599f * width, centerPoint[1] - width / 2 + 0.307f * width, + centerPoint[0] - width / 2 + 0.515f * width, centerPoint[1] - width / 2 + 0.406f * width, + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.414f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.416f * width, + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.421f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.427f * width, + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.433f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.436f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.436f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.444f * width, + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.449f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.455f * width, + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.461f * width, + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.461f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.462f * width, + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.349f * width, + centerPoint[0] - width / 2 + 0.633f * width, centerPoint[1] - width / 2 + 0.3f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.684f * width, centerPoint[1] - width / 2 + 0.25f * width, + centerPoint[0] - width / 2 + 0.727f * width, centerPoint[1] - width / 2 + 0.206f * width, + centerPoint[0] - width / 2 + 0.777f * width, centerPoint[1] - width / 2 + 0.184f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.827f * width, centerPoint[1] - width / 2 + 0.162f * width, + centerPoint[0] - width / 2 + 0.864f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.896f * width, centerPoint[1] - width / 2 + 0.153f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.157f * width, + centerPoint[0] - width / 2 + 0.944f * width, centerPoint[1] - width / 2 + 0.168f * width, + centerPoint[0] - width / 2 + 0.939f * width, centerPoint[1] - width / 2 + 0.184f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.934f * width, centerPoint[1] - width / 2 + 0.2f * width, + centerPoint[0] - width / 2 + 0.909f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.251f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.896f * width, centerPoint[1] - width / 2 + 0.259f * width, + centerPoint[0] - width / 2 + 0.892f * width, centerPoint[1] - width / 2 + 0.268f * width, + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.272f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.888f * width, centerPoint[1] - width / 2 + 0.277f * width, + centerPoint[0] - width / 2 + 0.879f * width, centerPoint[1] - width / 2 + 0.293f * width, + centerPoint[0] - width / 2 + 0.877f * width, centerPoint[1] - width / 2 + 0.297f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.875f * width, centerPoint[1] - width / 2 + 0.3f * width, + centerPoint[0] - width / 2 + 0.874f * width, centerPoint[1] - width / 2 + 0.311f * width, + centerPoint[0] - width / 2 + 0.871f * width, centerPoint[1] - width / 2 + 0.317f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.868f * width, centerPoint[1] - width / 2 + 0.322f * width, + centerPoint[0] - width / 2 + 0.857f * width, centerPoint[1] - width / 2 + 0.334f * width, + centerPoint[0] - width / 2 + 0.856f * width, centerPoint[1] - width / 2 + 0.34f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.854f * width, centerPoint[1] - width / 2 + 0.345f * width, + centerPoint[0] - width / 2 + 0.856f * width, centerPoint[1] - width / 2 + 0.35f * width, + centerPoint[0] - width / 2 + 0.851f * width, centerPoint[1] - width / 2 + 0.357f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.847f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.834f * width, centerPoint[1] - width / 2 + 0.38f * width, + centerPoint[0] - width / 2 + 0.832f * width, centerPoint[1] - width / 2 + 0.385f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.83f * width, centerPoint[1] - width / 2 + 0.39f * width, + centerPoint[0] - width / 2 + 0.829f * width, centerPoint[1] - width / 2 + 0.401f * width, + centerPoint[0] - width / 2 + 0.824f * width, centerPoint[1] - width / 2 + 0.407f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.818f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.816f * width, centerPoint[1] - width / 2 + 0.418f * width, + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.425f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.802f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.793f * width, centerPoint[1] - width / 2 + 0.463f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.471f * width, + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.482f * width, + centerPoint[0] - width / 2 + 0.749f * width, centerPoint[1] - width / 2 + 0.48f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.738f * width, centerPoint[1] - width / 2 + 0.478f * width, + centerPoint[0] - width / 2 + 0.738f * width, centerPoint[1] - width / 2 + 0.483f * width, + centerPoint[0] - width / 2 + 0.741f * width, centerPoint[1] - width / 2 + 0.486f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.743f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.778f * width, centerPoint[1] - width / 2 + 0.505f * width, + centerPoint[0] - width / 2 + 0.779f * width, centerPoint[1] - width / 2 + 0.511f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.78f * width, centerPoint[1] - width / 2 + 0.517f * width, + centerPoint[0] - width / 2 + 0.781f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.783f * width, centerPoint[1] - width / 2 + 0.529f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.785f * width, centerPoint[1] - width / 2 + 0.531f * width, + centerPoint[0] - width / 2 + 0.807f * width, centerPoint[1] - width / 2 + 0.549f * width, + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.555f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.801f * width, centerPoint[1] - width / 2 + 0.562f * width, + centerPoint[0] - width / 2 + 0.789f * width, centerPoint[1] - width / 2 + 0.569f * width, + centerPoint[0] - width / 2 + 0.788f * width, centerPoint[1] - width / 2 + 0.574f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.787f * width, centerPoint[1] - width / 2 + 0.578f * width, + centerPoint[0] - width / 2 + 0.79f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.792f * width, centerPoint[1] - width / 2 + 0.59f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.793f * width, centerPoint[1] - width / 2 + 0.599f * width, + centerPoint[0] - width / 2 + 0.785f * width, centerPoint[1] - width / 2 + 0.612f * width, + centerPoint[0] - width / 2 + 0.777f * width, centerPoint[1] - width / 2 + 0.616f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.77f * width, centerPoint[1] - width / 2 + 0.62f * width, + centerPoint[0] - width / 2 + 0.768f * width, centerPoint[1] - width / 2 + 0.628f * width, + centerPoint[0] - width / 2 + 0.771f * width, centerPoint[1] - width / 2 + 0.634f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.775f * width, centerPoint[1] - width / 2 + 0.641f * width, + centerPoint[0] - width / 2 + 0.786f * width, centerPoint[1] - width / 2 + 0.656f * width, + centerPoint[0] - width / 2 + 0.776f * width, centerPoint[1] - width / 2 + 0.663f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.766f * width, centerPoint[1] - width / 2 + 0.669f * width, + centerPoint[0] - width / 2 + 0.748f * width, centerPoint[1] - width / 2 + 0.678f * width, + centerPoint[0] - width / 2 + 0.759f * width, centerPoint[1] - width / 2 + 0.701f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.77f * width, centerPoint[1] - width / 2 + 0.723f * width, + centerPoint[0] - width / 2 + 0.8f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.757f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.825f * width, centerPoint[1] - width / 2 + 0.765f * width, + centerPoint[0] - width / 2 + 0.859f * width, centerPoint[1] - width / 2 + 0.786f * width, + centerPoint[0] - width / 2 + 0.874f * width, centerPoint[1] - width / 2 + 0.803f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.889f * width, centerPoint[1] - width / 2 + 0.82f * width, + centerPoint[0] - width / 2 + 0.902f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.891f * width, centerPoint[1] - width / 2 + 0.844f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.881f * width, centerPoint[1] - width / 2 + 0.857f * width, + centerPoint[0] - width / 2 + 0.83f * width, centerPoint[1] - width / 2 + 0.832f * width, + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.803f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.794f * width, centerPoint[1] - width / 2 + 0.774f * width, + centerPoint[0] - width / 2 + 0.759f * width, centerPoint[1] - width / 2 + 0.743f * width, + centerPoint[0] - width / 2 + 0.748f * width, centerPoint[1] - width / 2 + 0.743f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.738f * width, centerPoint[1] - width / 2 + 0.744f * width, + centerPoint[0] - width / 2 + 0.738f * width, centerPoint[1] - width / 2 + 0.745f * width, + centerPoint[0] - width / 2 + 0.736f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.764f * width, + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.729f * width, centerPoint[1] - width / 2 + 0.77f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.752f * width, + centerPoint[0] - width / 2 + 0.705f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.697f * width, centerPoint[1] - width / 2 + 0.757f * width, + centerPoint[0] - width / 2 + 0.698f * width, centerPoint[1] - width / 2 + 0.783f * width, + centerPoint[0] - width / 2 + 0.69f * width, centerPoint[1] - width / 2 + 0.785f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.787f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.77f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.739f * width, + centerPoint[0] - width / 2 + 0.656f * width, centerPoint[1] - width / 2 + 0.732f * width, + centerPoint[0] - width / 2 + 0.652f * width, centerPoint[1] - width / 2 + 0.733f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.648f * width, centerPoint[1] - width / 2 + 0.733f * width, + centerPoint[0] - width / 2 + 0.639f * width, centerPoint[1] - width / 2 + 0.739f * width, + centerPoint[0] - width / 2 + 0.631f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.573f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.553f * width, centerPoint[1] - width / 2 + 0.572f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.533f * width, centerPoint[1] - width / 2 + 0.54f * width, + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.529f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.532f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.534f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.541f * width, + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.545f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.548f * width, + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.668f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.666f * width + ); + return path; + } +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CatPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CatPath.java new file mode 100644 index 0000000..1eef54e --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CatPath.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class CatPath { + + public static Path getCatPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.153f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.141f * width, + centerPoint[0] - width / 2 + 0.049f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.076f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.068f * width, + centerPoint[0] - width / 2 + 0.102f * width, centerPoint[1] - width / 2 + 0.125f * width, + centerPoint[0] - width / 2 + 0.108f * width, centerPoint[1] - width / 2 + 0.129f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.114f * width, centerPoint[1] - width / 2 + 0.133f * width, + centerPoint[0] - width / 2 + 0.197f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.205f * width, centerPoint[1] - width / 2 + 0.149f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.099f * width, + centerPoint[0] - width / 2 + 0.278f * width, centerPoint[1] - width / 2 + 0.099f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.099f * width, + centerPoint[0] - width / 2 + 0.278f * width, centerPoint[1] - width / 2 + 0.178f * width, + centerPoint[0] - width / 2 + 0.28f * width, centerPoint[1] - width / 2 + 0.198f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.282f * width, centerPoint[1] - width / 2 + 0.218f * width, + centerPoint[0] - width / 2 + 0.308f * width, centerPoint[1] - width / 2 + 0.271f * width, + centerPoint[0] - width / 2 + 0.337f * width, centerPoint[1] - width / 2 + 0.293f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.315f * width, + centerPoint[0] - width / 2 + 0.387f * width, centerPoint[1] - width / 2 + 0.331f * width, + centerPoint[0] - width / 2 + 0.387f * width, centerPoint[1] - width / 2 + 0.331f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.387f * width, centerPoint[1] - width / 2 + 0.331f * width, + centerPoint[0] - width / 2 + 0.6f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.516f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.644f * width, centerPoint[1] - width / 2 + 0.617f * width, + centerPoint[0] - width / 2 + 0.677f * width, centerPoint[1] - width / 2 + 0.592f * width, + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.584f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.685f * width, centerPoint[1] - width / 2 + 0.576f * width, + centerPoint[0] - width / 2 + 0.707f * width, centerPoint[1] - width / 2 + 0.481f * width, + centerPoint[0] - width / 2 + 0.786f * width, centerPoint[1] - width / 2 + 0.467f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.865f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.944f * width, centerPoint[1] - width / 2 + 0.439f * width, + centerPoint[0] - width / 2 + 0.932f * width, centerPoint[1] - width / 2 + 0.38f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.926f * width, centerPoint[1] - width / 2 + 0.356f * width, + centerPoint[0] - width / 2 + 0.952f * width, centerPoint[1] - width / 2 + 0.333f * width, + centerPoint[0] - width / 2 + 0.964f * width, centerPoint[1] - width / 2 + 0.36f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.976f * width, centerPoint[1] - width / 2 + 0.386f * width, + centerPoint[0] - width / 2 + 0.978f * width, centerPoint[1] - width / 2 + 0.455f * width, + centerPoint[0] - width / 2 + 0.92f * width, centerPoint[1] - width / 2 + 0.483f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.861f * width, centerPoint[1] - width / 2 + 0.512f * width, + centerPoint[0] - width / 2 + 0.778f * width, centerPoint[1] - width / 2 + 0.493f * width, + centerPoint[0] - width / 2 + 0.746f * width, centerPoint[1] - width / 2 + 0.568f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.643f * width, + centerPoint[0] - width / 2 + 0.685f * width, centerPoint[1] - width / 2 + 0.669f * width, + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.686f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.693f * width, centerPoint[1] - width / 2 + 0.718f * width, + centerPoint[0] - width / 2 + 0.677f * width, centerPoint[1] - width / 2 + 0.797f * width, + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.835f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.567f * width, centerPoint[1] - width / 2 + 0.874f * width, + centerPoint[0] - width / 2 + 0.537f * width, centerPoint[1] - width / 2 + 0.856f * width, + centerPoint[0] - width / 2 + 0.525f * width, centerPoint[1] - width / 2 + 0.868f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.513f * width, centerPoint[1] - width / 2 + 0.88f * width, + centerPoint[0] - width / 2 + 0.46f * width, centerPoint[1] - width / 2 + 0.912f * width, + centerPoint[0] - width / 2 + 0.43f * width, centerPoint[1] - width / 2 + 0.896f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.41f * width, centerPoint[1] - width / 2 + 0.896f * width, + centerPoint[0] - width / 2 + 0.393f * width, centerPoint[1] - width / 2 + 0.888f * width, + centerPoint[0] - width / 2 + 0.402f * width, centerPoint[1] - width / 2 + 0.874f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.402f * width, centerPoint[1] - width / 2 + 0.874f * width, + centerPoint[0] - width / 2 + 0.406f * width, centerPoint[1] - width / 2 + 0.862f * width, + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.856f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.426f * width, centerPoint[1] - width / 2 + 0.849f * width, + centerPoint[0] - width / 2 + 0.432f * width, centerPoint[1] - width / 2 + 0.839f * width, + centerPoint[0] - width / 2 + 0.432f * width, centerPoint[1] - width / 2 + 0.839f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.432f * width, centerPoint[1] - width / 2 + 0.839f * width, + centerPoint[0] - width / 2 + 0.381f * width, centerPoint[1] - width / 2 + 0.821f * width, + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.801f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.815f * width, + centerPoint[0] - width / 2 + 0.351f * width, centerPoint[1] - width / 2 + 0.845f * width, + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.862f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.347f * width, centerPoint[1] - width / 2 + 0.878f * width, + centerPoint[0] - width / 2 + 0.321f * width, centerPoint[1] - width / 2 + 0.945f * width, + centerPoint[0] - width / 2 + 0.288f * width, centerPoint[1] - width / 2 + 0.918f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.27f * width, centerPoint[1] - width / 2 + 0.926f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.91f * width, + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.91f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.236f * width, centerPoint[1] - width / 2 + 0.91f * width, + centerPoint[0] - width / 2 + 0.232f * width, centerPoint[1] - width / 2 + 0.89f * width, + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.882f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.244f * width, centerPoint[1] - width / 2 + 0.87f * width, + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.862f * width, + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.862f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.862f * width, + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.852f * width, + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.852f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.852f * width, + centerPoint[0] - width / 2 + 0.252f * width, centerPoint[1] - width / 2 + 0.852f * width, + centerPoint[0] - width / 2 + 0.238f * width, centerPoint[1] - width / 2 + 0.852f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.223f * width, centerPoint[1] - width / 2 + 0.852f * width, + centerPoint[0] - width / 2 + 0.209f * width, centerPoint[1] - width / 2 + 0.839f * width, + centerPoint[0] - width / 2 + 0.209f * width, centerPoint[1] - width / 2 + 0.839f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.209f * width, centerPoint[1] - width / 2 + 0.839f * width, + centerPoint[0] - width / 2 + 0.193f * width, centerPoint[1] - width / 2 + 0.829f * width, + centerPoint[0] - width / 2 + 0.203f * width, centerPoint[1] - width / 2 + 0.821f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.211f * width, centerPoint[1] - width / 2 + 0.809f * width, + centerPoint[0] - width / 2 + 0.219f * width, centerPoint[1] - width / 2 + 0.807f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.807f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.807f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.738f * width, + centerPoint[0] - width / 2 + 0.234f * width, centerPoint[1] - width / 2 + 0.714f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.225f * width, centerPoint[1] - width / 2 + 0.69f * width, + centerPoint[0] - width / 2 + 0.207f * width, centerPoint[1] - width / 2 + 0.615f * width, + centerPoint[0] - width / 2 + 0.197f * width, centerPoint[1] - width / 2 + 0.599f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.187f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.118f * width, centerPoint[1] - width / 2 + 0.499f * width, + centerPoint[0] - width / 2 + 0.11f * width, centerPoint[1] - width / 2 + 0.445f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.102f * width, centerPoint[1] - width / 2 + 0.39f * width, + centerPoint[0] - width / 2 + 0.098f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.098f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.098f * width, centerPoint[1] - width / 2 + 0.366f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.348f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.331f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.045f * width, centerPoint[1] - width / 2 + 0.315f * width, + centerPoint[0] - width / 2 + 0.027f * width, centerPoint[1] - width / 2 + 0.289f * width, + centerPoint[0] - width / 2 + 0.029f * width, centerPoint[1] - width / 2 + 0.253f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.031f * width, centerPoint[1] - width / 2 + 0.216f * width, + centerPoint[0] - width / 2 + 0.039f * width, centerPoint[1] - width / 2 + 0.2f * width, + centerPoint[0] - width / 2 + 0.049f * width, centerPoint[1] - width / 2 + 0.182f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.06f * width, centerPoint[1] - width / 2 + 0.163f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.153f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.153f * width + ); + return path; + + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CucumberPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CucumberPath.java new file mode 100644 index 0000000..ddb37f0 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/CucumberPath.java @@ -0,0 +1,803 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class CucumberPath { + + public static Path getCucumberPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.772f * width, centerPoint[1] - width / 2 + 0.303f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.721f * width, centerPoint[1] - width / 2 + 0.2f * width, + centerPoint[0] - width / 2 + 0.636f * width, centerPoint[1] - width / 2 + 0.2f * width, + centerPoint[0] - width / 2 + 0.604f * width, centerPoint[1] - width / 2 + 0.2f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.596f * width, centerPoint[1] - width / 2 + 0.197f * width, + centerPoint[0] - width / 2 + 0.587f * width, centerPoint[1] - width / 2 + 0.199f * width, + centerPoint[0] - width / 2 + 0.581f * width, centerPoint[1] - width / 2 + 0.203f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.576f * width, centerPoint[1] - width / 2 + 0.201f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.199f * width, + centerPoint[0] - width / 2 + 0.566f * width, centerPoint[1] - width / 2 + 0.197f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.544f * width, centerPoint[1] - width / 2 + 0.188f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.158f * width, + centerPoint[0] - width / 2 + 0.499f * width, centerPoint[1] - width / 2 + 0.158f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.157f * width, + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.154f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.151f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.148f * width, + centerPoint[0] - width / 2 + 0.488f * width, centerPoint[1] - width / 2 + 0.145f * width, + centerPoint[0] - width / 2 + 0.486f * width, centerPoint[1] - width / 2 + 0.143f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.485f * width, centerPoint[1] - width / 2 + 0.141f * width, + centerPoint[0] - width / 2 + 0.49f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.117f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.115f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.105f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.105f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.105f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.104f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.104f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.104f * width, + centerPoint[0] - width / 2 + 0.508f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.508f * width, centerPoint[1] - width / 2 + 0.118f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.508f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.507f * width, centerPoint[1] - width / 2 + 0.11f * width, + centerPoint[0] - width / 2 + 0.507f * width, centerPoint[1] - width / 2 + 0.11f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.514f * width, centerPoint[1] - width / 2 + 0.119f * width, + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.132f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.14f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.525f * width, centerPoint[1] - width / 2 + 0.137f * width, + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.12f * width, + centerPoint[0] - width / 2 + 0.515f * width, centerPoint[1] - width / 2 + 0.105f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.117f * width, + centerPoint[0] - width / 2 + 0.526f * width, centerPoint[1] - width / 2 + 0.127f * width, + centerPoint[0] - width / 2 + 0.525f * width, centerPoint[1] - width / 2 + 0.114f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.111f * width, + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.109f * width, + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.106f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.106f * width, + centerPoint[0] - width / 2 + 0.537f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.537f * width, centerPoint[1] - width / 2 + 0.112f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.537f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.1f * width, + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.1f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.097f * width, + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.095f * width, + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.093f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.529f * width, centerPoint[1] - width / 2 + 0.101f * width, + centerPoint[0] - width / 2 + 0.54f * width, centerPoint[1] - width / 2 + 0.11f * width, + centerPoint[0] - width / 2 + 0.544f * width, centerPoint[1] - width / 2 + 0.113f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.104f * width, + centerPoint[0] - width / 2 + 0.529f * width, centerPoint[1] - width / 2 + 0.088f * width, + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.075f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.077f * width, + centerPoint[0] - width / 2 + 0.527f * width, centerPoint[1] - width / 2 + 0.079f * width, + centerPoint[0] - width / 2 + 0.529f * width, centerPoint[1] - width / 2 + 0.079f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.078f * width, + centerPoint[0] - width / 2 + 0.527f * width, centerPoint[1] - width / 2 + 0.076f * width, + centerPoint[0] - width / 2 + 0.525f * width, centerPoint[1] - width / 2 + 0.074f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.53f * width, centerPoint[1] - width / 2 + 0.077f * width, + centerPoint[0] - width / 2 + 0.535f * width, centerPoint[1] - width / 2 + 0.08f * width, + centerPoint[0] - width / 2 + 0.537f * width, centerPoint[1] - width / 2 + 0.082f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.535f * width, centerPoint[1] - width / 2 + 0.075f * width, + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.069f * width, + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.063f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.063f * width, + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.063f * width, + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.063f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.063f * width, + centerPoint[0] - width / 2 + 0.521f * width, centerPoint[1] - width / 2 + 0.062f * width, + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.062f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.06f * width, + centerPoint[0] - width / 2 + 0.514f * width, centerPoint[1] - width / 2 + 0.058f * width, + centerPoint[0] - width / 2 + 0.511f * width, centerPoint[1] - width / 2 + 0.057f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.511f * width, centerPoint[1] - width / 2 + 0.057f * width, + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.056f * width, + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.056f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.056f * width, + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width, + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width, + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width, + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.052f * width, + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.049f * width, + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.049f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.049f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.041f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.041f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.041f * width, + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.034f * width, + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.034f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.034f * width, + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.027f * width, + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.027f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.027f * width, + centerPoint[0] - width / 2 + 0.448f * width, centerPoint[1] - width / 2 + 0.002f * width, + centerPoint[0] - width / 2 + 0.406f * width, centerPoint[1] - width / 2 + 0.007f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.364f * width, centerPoint[1] - width / 2 + 0.011f * width, + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.038f * width, + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.038f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.038f * width, + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.044f * width, + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.044f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.044f * width, + centerPoint[0] - width / 2 + 0.345f * width, centerPoint[1] - width / 2 + 0.044f * width, + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.046f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.337f * width, centerPoint[1] - width / 2 + 0.048f * width, + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.06f * width, + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.06f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.06f * width, + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.06f * width, + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.06f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.33f * width, centerPoint[1] - width / 2 + 0.06f * width, + centerPoint[0] - width / 2 + 0.305f * width, centerPoint[1] - width / 2 + 0.079f * width, + centerPoint[0] - width / 2 + 0.308f * width, centerPoint[1] - width / 2 + 0.08f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.311f * width, centerPoint[1] - width / 2 + 0.081f * width, + centerPoint[0] - width / 2 + 0.329f * width, centerPoint[1] - width / 2 + 0.073f * width, + centerPoint[0] - width / 2 + 0.329f * width, centerPoint[1] - width / 2 + 0.073f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.329f * width, centerPoint[1] - width / 2 + 0.073f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.094f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.094f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.094f * width, + centerPoint[0] - width / 2 + 0.332f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.332f * width, centerPoint[1] - width / 2 + 0.085f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.332f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.333f * width, centerPoint[1] - width / 2 + 0.092f * width, + centerPoint[0] - width / 2 + 0.331f * width, centerPoint[1] - width / 2 + 0.096f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.329f * width, centerPoint[1] - width / 2 + 0.099f * width, + centerPoint[0] - width / 2 + 0.351f * width, centerPoint[1] - width / 2 + 0.079f * width, + centerPoint[0] - width / 2 + 0.351f * width, centerPoint[1] - width / 2 + 0.079f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.351f * width, centerPoint[1] - width / 2 + 0.079f * width, + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.09f * width, + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.09f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.09f * width, + centerPoint[0] - width / 2 + 0.344f * width, centerPoint[1] - width / 2 + 0.102f * width, + centerPoint[0] - width / 2 + 0.344f * width, centerPoint[1] - width / 2 + 0.102f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.344f * width, centerPoint[1] - width / 2 + 0.102f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.116f * width, + centerPoint[0] - width / 2 + 0.348f * width, centerPoint[1] - width / 2 + 0.122f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.354f * width, centerPoint[1] - width / 2 + 0.128f * width, + centerPoint[0] - width / 2 + 0.325f * width, centerPoint[1] - width / 2 + 0.145f * width, + centerPoint[0] - width / 2 + 0.319f * width, centerPoint[1] - width / 2 + 0.154f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.312f * width, centerPoint[1] - width / 2 + 0.162f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.177f * width, + centerPoint[0] - width / 2 + 0.309f * width, centerPoint[1] - width / 2 + 0.185f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.308f * width, centerPoint[1] - width / 2 + 0.194f * width, + centerPoint[0] - width / 2 + 0.308f * width, centerPoint[1] - width / 2 + 0.209f * width, + centerPoint[0] - width / 2 + 0.313f * width, centerPoint[1] - width / 2 + 0.207f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.318f * width, centerPoint[1] - width / 2 + 0.205f * width, + centerPoint[0] - width / 2 + 0.336f * width, centerPoint[1] - width / 2 + 0.188f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.186f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.176f * width, + centerPoint[0] - width / 2 + 0.372f * width, centerPoint[1] - width / 2 + 0.181f * width, + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.182f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.348f * width, centerPoint[1] - width / 2 + 0.184f * width, + centerPoint[0] - width / 2 + 0.363f * width, centerPoint[1] - width / 2 + 0.176f * width, + centerPoint[0] - width / 2 + 0.371f * width, centerPoint[1] - width / 2 + 0.176f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.362f * width, centerPoint[1] - width / 2 + 0.182f * width, + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.186f * width, + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.186f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.186f * width, + centerPoint[0] - width / 2 + 0.364f * width, centerPoint[1] - width / 2 + 0.191f * width, + centerPoint[0] - width / 2 + 0.371f * width, centerPoint[1] - width / 2 + 0.192f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.193f * width, + centerPoint[0] - width / 2 + 0.4f * width, centerPoint[1] - width / 2 + 0.192f * width, + centerPoint[0] - width / 2 + 0.406f * width, centerPoint[1] - width / 2 + 0.195f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.198f * width, + centerPoint[0] - width / 2 + 0.409f * width, centerPoint[1] - width / 2 + 0.204f * width, + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.205f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.206f * width, + centerPoint[0] - width / 2 + 0.437f * width, centerPoint[1] - width / 2 + 0.214f * width, + centerPoint[0] - width / 2 + 0.434f * width, centerPoint[1] - width / 2 + 0.227f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.43f * width, centerPoint[1] - width / 2 + 0.24f * width, + centerPoint[0] - width / 2 + 0.422f * width, centerPoint[1] - width / 2 + 0.248f * width, + centerPoint[0] - width / 2 + 0.41f * width, centerPoint[1] - width / 2 + 0.26f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.271f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.294f * width, + centerPoint[0] - width / 2 + 0.396f * width, centerPoint[1] - width / 2 + 0.312f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.398f * width, centerPoint[1] - width / 2 + 0.329f * width, + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.396f * width, centerPoint[1] - width / 2 + 0.367f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.393f * width, centerPoint[1] - width / 2 + 0.377f * width, + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.413f * width, + centerPoint[0] - width / 2 + 0.398f * width, centerPoint[1] - width / 2 + 0.419f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.397f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.397f * width, centerPoint[1] - width / 2 + 0.44f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.446f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.391f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.385f * width, centerPoint[1] - width / 2 + 0.465f * width, + centerPoint[0] - width / 2 + 0.358f * width, centerPoint[1] - width / 2 + 0.483f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.338f * width, centerPoint[1] - width / 2 + 0.497f * width, + centerPoint[0] - width / 2 + 0.314f * width, centerPoint[1] - width / 2 + 0.514f * width, + centerPoint[0] - width / 2 + 0.304f * width, centerPoint[1] - width / 2 + 0.517f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.52f * width, + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.504f * width, + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.504f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.257f * width, centerPoint[1] - width / 2 + 0.504f * width, + centerPoint[0] - width / 2 + 0.235f * width, centerPoint[1] - width / 2 + 0.514f * width, + centerPoint[0] - width / 2 + 0.226f * width, centerPoint[1] - width / 2 + 0.515f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.216f * width, centerPoint[1] - width / 2 + 0.516f * width, + centerPoint[0] - width / 2 + 0.218f * width, centerPoint[1] - width / 2 + 0.523f * width, + centerPoint[0] - width / 2 + 0.224f * width, centerPoint[1] - width / 2 + 0.525f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.53f * width, + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.53f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.53f * width, + centerPoint[0] - width / 2 + 0.244f * width, centerPoint[1] - width / 2 + 0.539f * width, + centerPoint[0] - width / 2 + 0.237f * width, centerPoint[1] - width / 2 + 0.543f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.231f * width, centerPoint[1] - width / 2 + 0.547f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.558f * width, + centerPoint[0] - width / 2 + 0.205f * width, centerPoint[1] - width / 2 + 0.567f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.198f * width, centerPoint[1] - width / 2 + 0.576f * width, + centerPoint[0] - width / 2 + 0.193f * width, centerPoint[1] - width / 2 + 0.59f * width, + centerPoint[0] - width / 2 + 0.198f * width, centerPoint[1] - width / 2 + 0.588f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.202f * width, centerPoint[1] - width / 2 + 0.586f * width, + centerPoint[0] - width / 2 + 0.215f * width, centerPoint[1] - width / 2 + 0.578f * width, + centerPoint[0] - width / 2 + 0.222f * width, centerPoint[1] - width / 2 + 0.577f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.229f * width, centerPoint[1] - width / 2 + 0.576f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.238f * width, centerPoint[1] - width / 2 + 0.588f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.234f * width, centerPoint[1] - width / 2 + 0.598f * width, + centerPoint[0] - width / 2 + 0.229f * width, centerPoint[1] - width / 2 + 0.611f * width, + centerPoint[0] - width / 2 + 0.228f * width, centerPoint[1] - width / 2 + 0.616f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.227f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.632f * width, + centerPoint[0] - width / 2 + 0.232f * width, centerPoint[1] - width / 2 + 0.629f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.235f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.614f * width, + centerPoint[0] - width / 2 + 0.246f * width, centerPoint[1] - width / 2 + 0.612f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.25f * width, centerPoint[1] - width / 2 + 0.61f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.6f * width, + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.604f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.27f * width, centerPoint[1] - width / 2 + 0.608f * width, + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.615f * width, + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.619f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.624f * width, + centerPoint[0] - width / 2 + 0.278f * width, centerPoint[1] - width / 2 + 0.64f * width, + centerPoint[0] - width / 2 + 0.28f * width, centerPoint[1] - width / 2 + 0.631f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.282f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.288f * width, centerPoint[1] - width / 2 + 0.593f * width, + centerPoint[0] - width / 2 + 0.293f * width, centerPoint[1] - width / 2 + 0.587f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.299f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.312f * width, centerPoint[1] - width / 2 + 0.56f * width, + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.552f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.321f * width, centerPoint[1] - width / 2 + 0.543f * width, + centerPoint[0] - width / 2 + 0.382f * width, centerPoint[1] - width / 2 + 0.529f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.51f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.432f * width, centerPoint[1] - width / 2 + 0.491f * width, + centerPoint[0] - width / 2 + 0.439f * width, centerPoint[1] - width / 2 + 0.474f * width, + centerPoint[0] - width / 2 + 0.439f * width, centerPoint[1] - width / 2 + 0.474f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.439f * width, centerPoint[1] - width / 2 + 0.474f * width, + centerPoint[0] - width / 2 + 0.45f * width, centerPoint[1] - width / 2 + 0.458f * width, + centerPoint[0] - width / 2 + 0.449f * width, centerPoint[1] - width / 2 + 0.446f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.453f * width, centerPoint[1] - width / 2 + 0.427f * width, + centerPoint[0] - width / 2 + 0.457f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.457f * width, centerPoint[1] - width / 2 + 0.37f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.457f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.386f * width, + centerPoint[0] - width / 2 + 0.489f * width, centerPoint[1] - width / 2 + 0.391f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.503f * width, centerPoint[1] - width / 2 + 0.396f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.417f * width, + centerPoint[0] - width / 2 + 0.522f * width, centerPoint[1] - width / 2 + 0.424f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.43f * width, + centerPoint[0] - width / 2 + 0.534f * width, centerPoint[1] - width / 2 + 0.445f * width, + centerPoint[0] - width / 2 + 0.539f * width, centerPoint[1] - width / 2 + 0.454f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.529f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.511f * width, centerPoint[1] - width / 2 + 0.464f * width, + centerPoint[0] - width / 2 + 0.502f * width, centerPoint[1] - width / 2 + 0.464f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.465f * width, + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.472f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.474f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.506f * width, centerPoint[1] - width / 2 + 0.476f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.48f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.489f * width, + centerPoint[0] - width / 2 + 0.513f * width, centerPoint[1] - width / 2 + 0.492f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.507f * width, centerPoint[1] - width / 2 + 0.496f * width, + centerPoint[0] - width / 2 + 0.489f * width, centerPoint[1] - width / 2 + 0.508f * width, + centerPoint[0] - width / 2 + 0.481f * width, centerPoint[1] - width / 2 + 0.517f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.474f * width, centerPoint[1] - width / 2 + 0.525f * width, + centerPoint[0] - width / 2 + 0.469f * width, centerPoint[1] - width / 2 + 0.54f * width, + centerPoint[0] - width / 2 + 0.474f * width, centerPoint[1] - width / 2 + 0.538f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.479f * width, centerPoint[1] - width / 2 + 0.536f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.526f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.504f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.507f * width, centerPoint[1] - width / 2 + 0.527f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.504f * width, centerPoint[1] - width / 2 + 0.53f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.533f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.534f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.485f * width, centerPoint[1] - width / 2 + 0.544f * width, + centerPoint[0] - width / 2 + 0.452f * width, centerPoint[1] - width / 2 + 0.611f * width, + centerPoint[0] - width / 2 + 0.44f * width, centerPoint[1] - width / 2 + 0.617f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.624f * width, + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.641f * width, + centerPoint[0] - width / 2 + 0.424f * width, centerPoint[1] - width / 2 + 0.654f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.425f * width, centerPoint[1] - width / 2 + 0.668f * width, + centerPoint[0] - width / 2 + 0.43f * width, centerPoint[1] - width / 2 + 0.671f * width, + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.678f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.428f * width, centerPoint[1] - width / 2 + 0.685f * width, + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.712f * width, + centerPoint[0] - width / 2 + 0.425f * width, centerPoint[1] - width / 2 + 0.722f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.427f * width, centerPoint[1] - width / 2 + 0.731f * width, + centerPoint[0] - width / 2 + 0.456f * width, centerPoint[1] - width / 2 + 0.84f * width, + centerPoint[0] - width / 2 + 0.455f * width, centerPoint[1] - width / 2 + 0.848f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.454f * width, centerPoint[1] - width / 2 + 0.856f * width, + centerPoint[0] - width / 2 + 0.422f * width, centerPoint[1] - width / 2 + 0.882f * width, + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.889f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.393f * width, centerPoint[1] - width / 2 + 0.896f * width, + centerPoint[0] - width / 2 + 0.391f * width, centerPoint[1] - width / 2 + 0.902f * width, + centerPoint[0] - width / 2 + 0.388f * width, centerPoint[1] - width / 2 + 0.904f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.385f * width, centerPoint[1] - width / 2 + 0.906f * width, + centerPoint[0] - width / 2 + 0.388f * width, centerPoint[1] - width / 2 + 0.911f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.908f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.4f * width, centerPoint[1] - width / 2 + 0.905f * width, + centerPoint[0] - width / 2 + 0.387f * width, centerPoint[1] - width / 2 + 0.918f * width, + centerPoint[0] - width / 2 + 0.385f * width, centerPoint[1] - width / 2 + 0.922f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.383f * width, centerPoint[1] - width / 2 + 0.925f * width, + centerPoint[0] - width / 2 + 0.377f * width, centerPoint[1] - width / 2 + 0.936f * width, + centerPoint[0] - width / 2 + 0.384f * width, centerPoint[1] - width / 2 + 0.936f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.392f * width, centerPoint[1] - width / 2 + 0.936f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.927f * width, + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.93f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.933f * width, + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.938f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.943f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.389f * width, centerPoint[1] - width / 2 + 0.948f * width, + centerPoint[0] - width / 2 + 0.399f * width, centerPoint[1] - width / 2 + 0.954f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.948f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.42f * width, centerPoint[1] - width / 2 + 0.937f * width, + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.953f * width, + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.953f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.953f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.971f * width, + centerPoint[0] - width / 2 + 0.434f * width, centerPoint[1] - width / 2 + 0.943f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.443f * width, centerPoint[1] - width / 2 + 0.932f * width, + centerPoint[0] - width / 2 + 0.467f * width, centerPoint[1] - width / 2 + 0.916f * width, + centerPoint[0] - width / 2 + 0.471f * width, centerPoint[1] - width / 2 + 0.91f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.904f * width, + centerPoint[0] - width / 2 + 0.474f * width, centerPoint[1] - width / 2 + 0.895f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.882f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.51f * width, centerPoint[1] - width / 2 + 0.871f * width, + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.837f * width, + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.837f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.837f * width, + centerPoint[0] - width / 2 + 0.497f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.829f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.817f * width, + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.755f * width, + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.751f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.483f * width, centerPoint[1] - width / 2 + 0.747f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.738f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.727f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.715f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.686f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.682f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.489f * width, centerPoint[1] - width / 2 + 0.678f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.669f * width, + centerPoint[0] - width / 2 + 0.507f * width, centerPoint[1] - width / 2 + 0.653f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.527f * width, centerPoint[1] - width / 2 + 0.638f * width, + centerPoint[0] - width / 2 + 0.593f * width, centerPoint[1] - width / 2 + 0.585f * width, + centerPoint[0] - width / 2 + 0.593f * width, centerPoint[1] - width / 2 + 0.585f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.593f * width, centerPoint[1] - width / 2 + 0.585f * width, + centerPoint[0] - width / 2 + 0.603f * width, centerPoint[1] - width / 2 + 0.558f * width, + centerPoint[0] - width / 2 + 0.606f * width, centerPoint[1] - width / 2 + 0.561f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.564f * width, + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.589f * width, + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.589f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.589f * width, + centerPoint[0] - width / 2 + 0.581f * width, centerPoint[1] - width / 2 + 0.669f * width, + centerPoint[0] - width / 2 + 0.585f * width, centerPoint[1] - width / 2 + 0.674f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.589f * width, centerPoint[1] - width / 2 + 0.68f * width, + centerPoint[0] - width / 2 + 0.592f * width, centerPoint[1] - width / 2 + 0.693f * width, + centerPoint[0] - width / 2 + 0.6f * width, centerPoint[1] - width / 2 + 0.701f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.603f * width, centerPoint[1] - width / 2 + 0.704f * width, + centerPoint[0] - width / 2 + 0.605f * width, centerPoint[1] - width / 2 + 0.715f * width, + centerPoint[0] - width / 2 + 0.605f * width, centerPoint[1] - width / 2 + 0.715f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.605f * width, centerPoint[1] - width / 2 + 0.715f * width, + centerPoint[0] - width / 2 + 0.634f * width, centerPoint[1] - width / 2 + 0.761f * width, + centerPoint[0] - width / 2 + 0.643f * width, centerPoint[1] - width / 2 + 0.776f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.79f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.9f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.9f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.9f * width, + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.911f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.915f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.685f * width, centerPoint[1] - width / 2 + 0.92f * width, + centerPoint[0] - width / 2 + 0.663f * width, centerPoint[1] - width / 2 + 0.94f * width, + centerPoint[0] - width / 2 + 0.658f * width, centerPoint[1] - width / 2 + 0.945f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.949f * width, + centerPoint[0] - width / 2 + 0.639f * width, centerPoint[1] - width / 2 + 0.963f * width, + centerPoint[0] - width / 2 + 0.636f * width, centerPoint[1] - width / 2 + 0.966f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.635f * width, centerPoint[1] - width / 2 + 0.971f * width, + centerPoint[0] - width / 2 + 0.623f * width, centerPoint[1] - width / 2 + 0.985f * width, + centerPoint[0] - width / 2 + 0.64f * width, centerPoint[1] - width / 2 + 0.982f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.647f * width, centerPoint[1] - width / 2 + 0.98f * width, + centerPoint[0] - width / 2 + 0.655f * width, centerPoint[1] - width / 2 + 0.976f * width, + centerPoint[0] - width / 2 + 0.65f * width, centerPoint[1] - width / 2 + 0.983f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.648f * width, centerPoint[1] - width / 2 + 0.987f * width, + centerPoint[0] - width / 2 + 0.656f * width, centerPoint[1] - width / 2 + 0.987f * width, + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.986f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.668f * width, centerPoint[1] - width / 2 + 0.985f * width, + centerPoint[0] - width / 2 + 0.671f * width, centerPoint[1] - width / 2 + 0.982f * width, + centerPoint[0] - width / 2 + 0.671f * width, centerPoint[1] - width / 2 + 0.982f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.671f * width, centerPoint[1] - width / 2 + 0.982f * width, + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.998f * width, + centerPoint[0] - width / 2 + 0.675f * width, centerPoint[1] - width / 2 + 0.993f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.684f * width, centerPoint[1] - width / 2 + 0.988f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.988f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.988f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.988f * width, + centerPoint[0] - width / 2 + 0.692f * width, centerPoint[1] - width / 2 + 0.99f * width, + centerPoint[0] - width / 2 + 0.702f * width, centerPoint[1] - width / 2 + 0.985f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.712f * width, centerPoint[1] - width / 2 + 0.98f * width, + centerPoint[0] - width / 2 + 0.715f * width, centerPoint[1] - width / 2 + 0.965f * width, + centerPoint[0] - width / 2 + 0.726f * width, centerPoint[1] - width / 2 + 0.95f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.736f * width, centerPoint[1] - width / 2 + 0.934f * width, + centerPoint[0] - width / 2 + 0.735f * width, centerPoint[1] - width / 2 + 0.913f * width, + centerPoint[0] - width / 2 + 0.733f * width, centerPoint[1] - width / 2 + 0.904f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.74f * width, centerPoint[1] - width / 2 + 0.9f * width, + centerPoint[0] - width / 2 + 0.739f * width, centerPoint[1] - width / 2 + 0.886f * width, + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.875f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.729f * width, centerPoint[1] - width / 2 + 0.864f * width, + centerPoint[0] - width / 2 + 0.721f * width, centerPoint[1] - width / 2 + 0.861f * width, + centerPoint[0] - width / 2 + 0.722f * width, centerPoint[1] - width / 2 + 0.855f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.723f * width, centerPoint[1] - width / 2 + 0.844f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.746f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.746f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.746f * width, + centerPoint[0] - width / 2 + 0.687f * width, centerPoint[1] - width / 2 + 0.711f * width, + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.698f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.675f * width, centerPoint[1] - width / 2 + 0.684f * width, + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.65f * width, + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.65f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.65f * width, + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.64f * width, + centerPoint[0] - width / 2 + 0.665f * width, centerPoint[1] - width / 2 + 0.633f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.71f * width, centerPoint[1] - width / 2 + 0.551f * width, + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.549f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.714f * width, centerPoint[1] - width / 2 + 0.548f * width, + centerPoint[0] - width / 2 + 0.715f * width, centerPoint[1] - width / 2 + 0.54f * width, + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.527f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.739f * width, centerPoint[1] - width / 2 + 0.551f * width, + centerPoint[0] - width / 2 + 0.768f * width, centerPoint[1] - width / 2 + 0.573f * width, + centerPoint[0] - width / 2 + 0.783f * width, centerPoint[1] - width / 2 + 0.563f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.799f * width, centerPoint[1] - width / 2 + 0.553f * width, + centerPoint[0] - width / 2 + 0.803f * width, centerPoint[1] - width / 2 + 0.529f * width, + centerPoint[0] - width / 2 + 0.798f * width, centerPoint[1] - width / 2 + 0.502f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.807f * width, centerPoint[1] - width / 2 + 0.464f * width, + centerPoint[0] - width / 2 + 0.811f * width, centerPoint[1] - width / 2 + 0.382f * width, + centerPoint[0] - width / 2 + 0.772f * width, centerPoint[1] - width / 2 + 0.303f * width + ); + return path; + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/DogezaPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/DogezaPath.java new file mode 100644 index 0000000..b5e4228 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/DogezaPath.java @@ -0,0 +1,534 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class DogezaPath { + + public static Path getDogezaPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.519f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.906f * width, centerPoint[1] - width / 2 + 0.511f * width, + centerPoint[0] - width / 2 + 0.832f * width, centerPoint[1] - width / 2 + 0.476f * width, + centerPoint[0] - width / 2 + 0.816f * width, centerPoint[1] - width / 2 + 0.471f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.467f * width, + centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.46f * width, + centerPoint[0] - width / 2 + 0.774f * width, centerPoint[1] - width / 2 + 0.456f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.774f * width, centerPoint[1] - width / 2 + 0.445f * width, + centerPoint[0] - width / 2 + 0.771f * width, centerPoint[1] - width / 2 + 0.433f * width, + centerPoint[0] - width / 2 + 0.764f * width, centerPoint[1] - width / 2 + 0.424f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.739f * width, centerPoint[1] - width / 2 + 0.394f * width, + centerPoint[0] - width / 2 + 0.684f * width, centerPoint[1] - width / 2 + 0.306f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.265f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.654f * width, centerPoint[1] - width / 2 + 0.253f * width, + centerPoint[0] - width / 2 + 0.646f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.646f * width, centerPoint[1] - width / 2 + 0.244f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.646f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.65f * width, centerPoint[1] - width / 2 + 0.235f * width, + centerPoint[0] - width / 2 + 0.65f * width, centerPoint[1] - width / 2 + 0.235f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.65f * width, centerPoint[1] - width / 2 + 0.235f * width, + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.174f * width, + centerPoint[0] - width / 2 + 0.5f * width, centerPoint[1] - width / 2 + 0.173f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.383f * width, centerPoint[1] - width / 2 + 0.174f * width, + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.235f * width, + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.235f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.235f * width, + centerPoint[0] - width / 2 + 0.354f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.354f * width, centerPoint[1] - width / 2 + 0.244f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.354f * width, centerPoint[1] - width / 2 + 0.244f * width, + centerPoint[0] - width / 2 + 0.335f * width, centerPoint[1] - width / 2 + 0.265f * width, + centerPoint[0] - width / 2 + 0.336f * width, centerPoint[1] - width / 2 + 0.291f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.336f * width, centerPoint[1] - width / 2 + 0.293f * width, + centerPoint[0] - width / 2 + 0.336f * width, centerPoint[1] - width / 2 + 0.294f * width, + centerPoint[0] - width / 2 + 0.336f * width, centerPoint[1] - width / 2 + 0.296f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.299f * width, centerPoint[1] - width / 2 + 0.338f * width, + centerPoint[0] - width / 2 + 0.229f * width, centerPoint[1] - width / 2 + 0.42f * width, + centerPoint[0] - width / 2 + 0.218f * width, centerPoint[1] - width / 2 + 0.459f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.208f * width, centerPoint[1] - width / 2 + 0.463f * width, + centerPoint[0] - width / 2 + 0.193f * width, centerPoint[1] - width / 2 + 0.467f * width, + centerPoint[0] - width / 2 + 0.184f * width, centerPoint[1] - width / 2 + 0.471f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.168f * width, centerPoint[1] - width / 2 + 0.476f * width, + centerPoint[0] - width / 2 + 0.094f * width, centerPoint[1] - width / 2 + 0.511f * width, + centerPoint[0] - width / 2 + 0.073f * width, centerPoint[1] - width / 2 + 0.519f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.052f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.06f * width, centerPoint[1] - width / 2 + 0.542f * width, + centerPoint[0] - width / 2 + 0.061f * width, centerPoint[1] - width / 2 + 0.555f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.568f * width, + centerPoint[0] - width / 2 + 0.092f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.099f * width, centerPoint[1] - width / 2 + 0.633f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.105f * width, centerPoint[1] - width / 2 + 0.644f * width, + centerPoint[0] - width / 2 + 0.134f * width, centerPoint[1] - width / 2 + 0.706f * width, + centerPoint[0] - width / 2 + 0.145f * width, centerPoint[1] - width / 2 + 0.725f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.155f * width, centerPoint[1] - width / 2 + 0.744f * width, + centerPoint[0] - width / 2 + 0.154f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.169f * width, centerPoint[1] - width / 2 + 0.729f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.172f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.175f * width, centerPoint[1] - width / 2 + 0.727f * width, + centerPoint[0] - width / 2 + 0.179f * width, centerPoint[1] - width / 2 + 0.725f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.179f * width, centerPoint[1] - width / 2 + 0.725f * width, + centerPoint[0] - width / 2 + 0.186f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.186f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.186f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.195f * width, centerPoint[1] - width / 2 + 0.733f * width, + centerPoint[0] - width / 2 + 0.204f * width, centerPoint[1] - width / 2 + 0.729f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.206f * width, centerPoint[1] - width / 2 + 0.732f * width, + centerPoint[0] - width / 2 + 0.208f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.209f * width, centerPoint[1] - width / 2 + 0.736f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.211f * width, centerPoint[1] - width / 2 + 0.743f * width, + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.767f * width, + centerPoint[0] - width / 2 + 0.223f * width, centerPoint[1] - width / 2 + 0.78f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.233f * width, centerPoint[1] - width / 2 + 0.792f * width, + centerPoint[0] - width / 2 + 0.236f * width, centerPoint[1] - width / 2 + 0.797f * width, + centerPoint[0] - width / 2 + 0.246f * width, centerPoint[1] - width / 2 + 0.806f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.816f * width, + centerPoint[0] - width / 2 + 0.266f * width, centerPoint[1] - width / 2 + 0.816f * width, + centerPoint[0] - width / 2 + 0.262f * width, centerPoint[1] - width / 2 + 0.808f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.258f * width, centerPoint[1] - width / 2 + 0.801f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.775f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.775f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.775f * width, + centerPoint[0] - width / 2 + 0.269f * width, centerPoint[1] - width / 2 + 0.804f * width, + centerPoint[0] - width / 2 + 0.281f * width, centerPoint[1] - width / 2 + 0.817f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.83f * width, + centerPoint[0] - width / 2 + 0.301f * width, centerPoint[1] - width / 2 + 0.829f * width, + centerPoint[0] - width / 2 + 0.297f * width, centerPoint[1] - width / 2 + 0.82f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.812f * width, + centerPoint[0] - width / 2 + 0.277f * width, centerPoint[1] - width / 2 + 0.784f * width, + centerPoint[0] - width / 2 + 0.277f * width, centerPoint[1] - width / 2 + 0.784f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.277f * width, centerPoint[1] - width / 2 + 0.784f * width, + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.802f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.326f * width, centerPoint[1] - width / 2 + 0.823f * width, + centerPoint[0] - width / 2 + 0.333f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.333f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.333f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.333f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.331f * width, centerPoint[1] - width / 2 + 0.807f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.328f * width, centerPoint[1] - width / 2 + 0.802f * width, + centerPoint[0] - width / 2 + 0.298f * width, centerPoint[1] - width / 2 + 0.776f * width, + centerPoint[0] - width / 2 + 0.292f * width, centerPoint[1] - width / 2 + 0.768f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.286f * width, centerPoint[1] - width / 2 + 0.759f * width, + centerPoint[0] - width / 2 + 0.322f * width, centerPoint[1] - width / 2 + 0.789f * width, + centerPoint[0] - width / 2 + 0.335f * width, centerPoint[1] - width / 2 + 0.798f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.348f * width, centerPoint[1] - width / 2 + 0.806f * width, + centerPoint[0] - width / 2 + 0.358f * width, centerPoint[1] - width / 2 + 0.798f * width, + centerPoint[0] - width / 2 + 0.347f * width, centerPoint[1] - width / 2 + 0.788f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.335f * width, centerPoint[1] - width / 2 + 0.778f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.305f * width, centerPoint[1] - width / 2 + 0.741f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.3f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.324f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.337f * width, centerPoint[1] - width / 2 + 0.751f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.35f * width, centerPoint[1] - width / 2 + 0.753f * width, + centerPoint[0] - width / 2 + 0.352f * width, centerPoint[1] - width / 2 + 0.742f * width, + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.739f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.331f * width, centerPoint[1] - width / 2 + 0.736f * width, + centerPoint[0] - width / 2 + 0.328f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.316f * width, centerPoint[1] - width / 2 + 0.721f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.303f * width, centerPoint[1] - width / 2 + 0.712f * width, + centerPoint[0] - width / 2 + 0.284f * width, centerPoint[1] - width / 2 + 0.713f * width, + centerPoint[0] - width / 2 + 0.272f * width, centerPoint[1] - width / 2 + 0.713f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.26f * width, centerPoint[1] - width / 2 + 0.713f * width, + centerPoint[0] - width / 2 + 0.247f * width, centerPoint[1] - width / 2 + 0.705f * width, + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.696f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.696f * width, + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.696f * width, + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.696f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.693f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.692f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.242f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.238f * width, centerPoint[1] - width / 2 + 0.689f * width, + centerPoint[0] - width / 2 + 0.238f * width, centerPoint[1] - width / 2 + 0.689f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.238f * width, centerPoint[1] - width / 2 + 0.689f * width, + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.687f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.24f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.2f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.198f * width, centerPoint[1] - width / 2 + 0.617f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.612f * width, + centerPoint[0] - width / 2 + 0.187f * width, centerPoint[1] - width / 2 + 0.6f * width, + centerPoint[0] - width / 2 + 0.183f * width, centerPoint[1] - width / 2 + 0.596f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.179f * width, centerPoint[1] - width / 2 + 0.591f * width, + centerPoint[0] - width / 2 + 0.172f * width, centerPoint[1] - width / 2 + 0.586f * width, + centerPoint[0] - width / 2 + 0.185f * width, centerPoint[1] - width / 2 + 0.585f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.198f * width, centerPoint[1] - width / 2 + 0.584f * width, + centerPoint[0] - width / 2 + 0.228f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.232f * width, centerPoint[1] - width / 2 + 0.579f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.236f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.251f * width, centerPoint[1] - width / 2 + 0.577f * width, + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.571f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.565f * width, + centerPoint[0] - width / 2 + 0.271f * width, centerPoint[1] - width / 2 + 0.566f * width, + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.569f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.275f * width, centerPoint[1] - width / 2 + 0.572f * width, + centerPoint[0] - width / 2 + 0.284f * width, centerPoint[1] - width / 2 + 0.601f * width, + centerPoint[0] - width / 2 + 0.305f * width, centerPoint[1] - width / 2 + 0.603f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.326f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.613f * width, + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.613f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.613f * width, + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.63f * width, + centerPoint[0] - width / 2 + 0.386f * width, centerPoint[1] - width / 2 + 0.628f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.403f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.409f * width, centerPoint[1] - width / 2 + 0.629f * width, + centerPoint[0] - width / 2 + 0.409f * width, centerPoint[1] - width / 2 + 0.629f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.409f * width, centerPoint[1] - width / 2 + 0.629f * width, + centerPoint[0] - width / 2 + 0.395f * width, centerPoint[1] - width / 2 + 0.666f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.711f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.427f * width, centerPoint[1] - width / 2 + 0.758f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.764f * width, + centerPoint[0] - width / 2 + 0.479f * width, centerPoint[1] - width / 2 + 0.755f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.538f * width, centerPoint[1] - width / 2 + 0.778f * width, + centerPoint[0] - width / 2 + 0.573f * width, centerPoint[1] - width / 2 + 0.754f * width, + centerPoint[0] - width / 2 + 0.588f * width, centerPoint[1] - width / 2 + 0.711f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.604f * width, centerPoint[1] - width / 2 + 0.666f * width, + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.629f * width, + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.629f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.591f * width, centerPoint[1] - width / 2 + 0.629f * width, + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.614f * width, centerPoint[1] - width / 2 + 0.628f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.631f * width, centerPoint[1] - width / 2 + 0.63f * width, + centerPoint[0] - width / 2 + 0.635f * width, centerPoint[1] - width / 2 + 0.613f * width, + centerPoint[0] - width / 2 + 0.635f * width, centerPoint[1] - width / 2 + 0.613f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.635f * width, centerPoint[1] - width / 2 + 0.613f * width, + centerPoint[0] - width / 2 + 0.674f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.695f * width, centerPoint[1] - width / 2 + 0.603f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.601f * width, + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.572f * width, + centerPoint[0] - width / 2 + 0.727f * width, centerPoint[1] - width / 2 + 0.569f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.729f * width, centerPoint[1] - width / 2 + 0.566f * width, + centerPoint[0] - width / 2 + 0.744f * width, centerPoint[1] - width / 2 + 0.565f * width, + centerPoint[0] - width / 2 + 0.746f * width, centerPoint[1] - width / 2 + 0.571f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.749f * width, centerPoint[1] - width / 2 + 0.577f * width, + centerPoint[0] - width / 2 + 0.764f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.768f * width, centerPoint[1] - width / 2 + 0.579f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.772f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.802f * width, centerPoint[1] - width / 2 + 0.584f * width, + centerPoint[0] - width / 2 + 0.815f * width, centerPoint[1] - width / 2 + 0.585f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.828f * width, centerPoint[1] - width / 2 + 0.586f * width, + centerPoint[0] - width / 2 + 0.821f * width, centerPoint[1] - width / 2 + 0.591f * width, + centerPoint[0] - width / 2 + 0.817f * width, centerPoint[1] - width / 2 + 0.596f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.813f * width, centerPoint[1] - width / 2 + 0.6f * width, + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.612f * width, + centerPoint[0] - width / 2 + 0.802f * width, centerPoint[1] - width / 2 + 0.617f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.8f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.687f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.762f * width, centerPoint[1] - width / 2 + 0.689f * width, + centerPoint[0] - width / 2 + 0.762f * width, centerPoint[1] - width / 2 + 0.689f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.762f * width, centerPoint[1] - width / 2 + 0.689f * width, + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.692f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.693f * width, + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.696f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.696f * width, + centerPoint[0] - width / 2 + 0.759f * width, centerPoint[1] - width / 2 + 0.696f * width, + centerPoint[0] - width / 2 + 0.759f * width, centerPoint[1] - width / 2 + 0.696f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.753f * width, centerPoint[1] - width / 2 + 0.705f * width, + centerPoint[0] - width / 2 + 0.74f * width, centerPoint[1] - width / 2 + 0.713f * width, + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.713f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.716f * width, centerPoint[1] - width / 2 + 0.713f * width, + centerPoint[0] - width / 2 + 0.697f * width, centerPoint[1] - width / 2 + 0.712f * width, + centerPoint[0] - width / 2 + 0.684f * width, centerPoint[1] - width / 2 + 0.721f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.672f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.669f * width, centerPoint[1] - width / 2 + 0.736f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.739f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.648f * width, centerPoint[1] - width / 2 + 0.742f * width, + centerPoint[0] - width / 2 + 0.65f * width, centerPoint[1] - width / 2 + 0.753f * width, + centerPoint[0] - width / 2 + 0.663f * width, centerPoint[1] - width / 2 + 0.751f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.676f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.7f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.695f * width, centerPoint[1] - width / 2 + 0.741f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.69f * width, centerPoint[1] - width / 2 + 0.749f * width, + centerPoint[0] - width / 2 + 0.665f * width, centerPoint[1] - width / 2 + 0.778f * width, + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.788f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.642f * width, centerPoint[1] - width / 2 + 0.798f * width, + centerPoint[0] - width / 2 + 0.652f * width, centerPoint[1] - width / 2 + 0.806f * width, + centerPoint[0] - width / 2 + 0.665f * width, centerPoint[1] - width / 2 + 0.798f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.678f * width, centerPoint[1] - width / 2 + 0.789f * width, + centerPoint[0] - width / 2 + 0.714f * width, centerPoint[1] - width / 2 + 0.759f * width, + centerPoint[0] - width / 2 + 0.708f * width, centerPoint[1] - width / 2 + 0.768f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.702f * width, centerPoint[1] - width / 2 + 0.776f * width, + centerPoint[0] - width / 2 + 0.672f * width, centerPoint[1] - width / 2 + 0.802f * width, + centerPoint[0] - width / 2 + 0.669f * width, centerPoint[1] - width / 2 + 0.807f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.674f * width, centerPoint[1] - width / 2 + 0.823f * width, + centerPoint[0] - width / 2 + 0.69f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.706f * width, centerPoint[1] - width / 2 + 0.802f * width, + centerPoint[0] - width / 2 + 0.723f * width, centerPoint[1] - width / 2 + 0.784f * width, + centerPoint[0] - width / 2 + 0.723f * width, centerPoint[1] - width / 2 + 0.784f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.723f * width, centerPoint[1] - width / 2 + 0.784f * width, + centerPoint[0] - width / 2 + 0.706f * width, centerPoint[1] - width / 2 + 0.812f * width, + centerPoint[0] - width / 2 + 0.703f * width, centerPoint[1] - width / 2 + 0.82f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.699f * width, centerPoint[1] - width / 2 + 0.829f * width, + centerPoint[0] - width / 2 + 0.706f * width, centerPoint[1] - width / 2 + 0.83f * width, + centerPoint[0] - width / 2 + 0.719f * width, centerPoint[1] - width / 2 + 0.817f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.731f * width, centerPoint[1] - width / 2 + 0.804f * width, + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.775f * width, + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.775f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.758f * width, centerPoint[1] - width / 2 + 0.775f * width, + centerPoint[0] - width / 2 + 0.742f * width, centerPoint[1] - width / 2 + 0.801f * width, + centerPoint[0] - width / 2 + 0.738f * width, centerPoint[1] - width / 2 + 0.808f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.816f * width, + centerPoint[0] - width / 2 + 0.744f * width, centerPoint[1] - width / 2 + 0.816f * width, + centerPoint[0] - width / 2 + 0.754f * width, centerPoint[1] - width / 2 + 0.806f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.764f * width, centerPoint[1] - width / 2 + 0.797f * width, + centerPoint[0] - width / 2 + 0.767f * width, centerPoint[1] - width / 2 + 0.792f * width, + centerPoint[0] - width / 2 + 0.777f * width, centerPoint[1] - width / 2 + 0.78f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.788f * width, centerPoint[1] - width / 2 + 0.767f * width, + centerPoint[0] - width / 2 + 0.789f * width, centerPoint[1] - width / 2 + 0.743f * width, + centerPoint[0] - width / 2 + 0.791f * width, centerPoint[1] - width / 2 + 0.736f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.792f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.794f * width, centerPoint[1] - width / 2 + 0.732f * width, + centerPoint[0] - width / 2 + 0.796f * width, centerPoint[1] - width / 2 + 0.729f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.805f * width, centerPoint[1] - width / 2 + 0.733f * width, + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.821f * width, centerPoint[1] - width / 2 + 0.725f * width, + centerPoint[0] - width / 2 + 0.821f * width, centerPoint[1] - width / 2 + 0.725f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.825f * width, centerPoint[1] - width / 2 + 0.727f * width, + centerPoint[0] - width / 2 + 0.828f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.831f * width, centerPoint[1] - width / 2 + 0.729f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.846f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.845f * width, centerPoint[1] - width / 2 + 0.744f * width, + centerPoint[0] - width / 2 + 0.856f * width, centerPoint[1] - width / 2 + 0.725f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.866f * width, centerPoint[1] - width / 2 + 0.706f * width, + centerPoint[0] - width / 2 + 0.895f * width, centerPoint[1] - width / 2 + 0.644f * width, + centerPoint[0] - width / 2 + 0.901f * width, centerPoint[1] - width / 2 + 0.633f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.908f * width, centerPoint[1] - width / 2 + 0.622f * width, + centerPoint[0] - width / 2 + 0.938f * width, centerPoint[1] - width / 2 + 0.568f * width, + centerPoint[0] - width / 2 + 0.939f * width, centerPoint[1] - width / 2 + 0.555f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.94f * width, centerPoint[1] - width / 2 + 0.542f * width, + centerPoint[0] - width / 2 + 0.948f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.519f * width + ); + return path; + + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/HairStylePath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/HairStylePath.java new file mode 100644 index 0000000..4c0b376 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/HairStylePath.java @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class HairStylePath { + + public static Path getHairStylePath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.864f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.864f * width, + centerPoint[0] - width / 2 + 0.769f * width, centerPoint[1] - width / 2 + 0.872f * width, + centerPoint[0] - width / 2 + 0.752f * width, centerPoint[1] - width / 2 + 0.864f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.735f * width, centerPoint[1] - width / 2 + 0.855f * width, + centerPoint[0] - width / 2 + 0.73f * width, centerPoint[1] - width / 2 + 0.84f * width, + centerPoint[0] - width / 2 + 0.76f * width, centerPoint[1] - width / 2 + 0.806f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.79f * width, centerPoint[1] - width / 2 + 0.772f * width, + centerPoint[0] - width / 2 + 0.788f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.773f * width, centerPoint[1] - width / 2 + 0.704f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.818f * width, centerPoint[1] - width / 2 + 0.544f * width, + centerPoint[0] - width / 2 + 0.715f * width, centerPoint[1] - width / 2 + 0.567f * width, + centerPoint[0] - width / 2 + 0.722f * width, centerPoint[1] - width / 2 + 0.544f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.728f * width, centerPoint[1] - width / 2 + 0.52f * width, + centerPoint[0] - width / 2 + 0.709f * width, centerPoint[1] - width / 2 + 0.488f * width, + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.452f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.717f * width, centerPoint[1] - width / 2 + 0.416f * width, + centerPoint[0] - width / 2 + 0.735f * width, centerPoint[1] - width / 2 + 0.317f * width, + centerPoint[0] - width / 2 + 0.656f * width, centerPoint[1] - width / 2 + 0.196f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.577f * width, centerPoint[1] - width / 2 + 0.074f * width, + centerPoint[0] - width / 2 + 0.474f * width, centerPoint[1] - width / 2 + 0.098f * width, + centerPoint[0] - width / 2 + 0.414f * width, centerPoint[1] - width / 2 + 0.132f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.312f * width, centerPoint[1] - width / 2 + 0.132f * width, + centerPoint[0] - width / 2 + 0.271f * width, centerPoint[1] - width / 2 + 0.292f * width, + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.36f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.276f * width, centerPoint[1] - width / 2 + 0.428f * width, + centerPoint[0] - width / 2 + 0.26f * width, centerPoint[1] - width / 2 + 0.459f * width, + centerPoint[0] - width / 2 + 0.259f * width, centerPoint[1] - width / 2 + 0.534f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.257f * width, centerPoint[1] - width / 2 + 0.592f * width, + centerPoint[0] - width / 2 + 0.275f * width, centerPoint[1] - width / 2 + 0.623f * width, + centerPoint[0] - width / 2 + 0.294f * width, centerPoint[1] - width / 2 + 0.642f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.29f * width, centerPoint[1] - width / 2 + 0.657f * width, + centerPoint[0] - width / 2 + 0.279f * width, centerPoint[1] - width / 2 + 0.674f * width, + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.663f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.254f * width, centerPoint[1] - width / 2 + 0.663f * width, + centerPoint[0] - width / 2 + 0.286f * width, centerPoint[1] - width / 2 + 0.694f * width, + centerPoint[0] - width / 2 + 0.31f * width, centerPoint[1] - width / 2 + 0.657f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.313f * width, centerPoint[1] - width / 2 + 0.659f * width, + centerPoint[0] - width / 2 + 0.316f * width, centerPoint[1] - width / 2 + 0.661f * width, + centerPoint[0] - width / 2 + 0.318f * width, centerPoint[1] - width / 2 + 0.663f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.34f * width, centerPoint[1] - width / 2 + 0.68f * width, + centerPoint[0] - width / 2 + 0.38f * width, centerPoint[1] - width / 2 + 0.704f * width, + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.7f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.37f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.659f * width, + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.659f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.659f * width, + centerPoint[0] - width / 2 + 0.376f * width, centerPoint[1] - width / 2 + 0.67f * width, + centerPoint[0] - width / 2 + 0.391f * width, centerPoint[1] - width / 2 + 0.655f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.659f * width, + centerPoint[0] - width / 2 + 0.355f * width, centerPoint[1] - width / 2 + 0.636f * width, + centerPoint[0] - width / 2 + 0.363f * width, centerPoint[1] - width / 2 + 0.612f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.642f * width, + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.582f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.41f * width, centerPoint[1] - width / 2 + 0.597f * width, + centerPoint[0] - width / 2 + 0.402f * width, centerPoint[1] - width / 2 + 0.599f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.623f * width, + centerPoint[0] - width / 2 + 0.331f * width, centerPoint[1] - width / 2 + 0.448f * width, + centerPoint[0] - width / 2 + 0.344f * width, centerPoint[1] - width / 2 + 0.435f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.357f * width, centerPoint[1] - width / 2 + 0.422f * width, + centerPoint[0] - width / 2 + 0.391f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.397f * width, centerPoint[1] - width / 2 + 0.32f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.285f * width, + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.226f * width, + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.226f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.226f * width, + centerPoint[0] - width / 2 + 0.438f * width, centerPoint[1] - width / 2 + 0.315f * width, + centerPoint[0] - width / 2 + 0.499f * width, centerPoint[1] - width / 2 + 0.311f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.326f * width, + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.346f * width, + centerPoint[0] - width / 2 + 0.553f * width, centerPoint[1] - width / 2 + 0.354f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.361f * width, + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.418f * width, + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.426f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.426f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.648f * width, + centerPoint[0] - width / 2 + 0.579f * width, centerPoint[1] - width / 2 + 0.594f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.598f * width, centerPoint[1] - width / 2 + 0.617f * width, + centerPoint[0] - width / 2 + 0.595f * width, centerPoint[1] - width / 2 + 0.62f * width, + centerPoint[0] - width / 2 + 0.611f * width, centerPoint[1] - width / 2 + 0.621f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.627f * width, + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.626f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.626f * width, + centerPoint[0] - width / 2 + 0.602f * width, centerPoint[1] - width / 2 + 0.641f * width, + centerPoint[0] - width / 2 + 0.615f * width, centerPoint[1] - width / 2 + 0.634f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.618f * width, centerPoint[1] - width / 2 + 0.666f * width, + centerPoint[0] - width / 2 + 0.631f * width, centerPoint[1] - width / 2 + 0.67f * width, + centerPoint[0] - width / 2 + 0.631f * width, centerPoint[1] - width / 2 + 0.67f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.631f * width, centerPoint[1] - width / 2 + 0.67f * width, + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.679f * width, + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.693f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.632f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.687f * width, + centerPoint[0] - width / 2 + 0.666f * width, centerPoint[1] - width / 2 + 0.659f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.678f * width, + centerPoint[0] - width / 2 + 0.675f * width, centerPoint[1] - width / 2 + 0.708f * width, + centerPoint[0] - width / 2 + 0.692f * width, centerPoint[1] - width / 2 + 0.721f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.709f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.707f * width, centerPoint[1] - width / 2 + 0.747f * width, + centerPoint[0] - width / 2 + 0.698f * width, centerPoint[1] - width / 2 + 0.768f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.69f * width, centerPoint[1] - width / 2 + 0.789f * width, + centerPoint[0] - width / 2 + 0.696f * width, centerPoint[1] - width / 2 + 0.811f * width, + centerPoint[0] - width / 2 + 0.696f * width, centerPoint[1] - width / 2 + 0.811f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.696f * width, centerPoint[1] - width / 2 + 0.811f * width, + centerPoint[0] - width / 2 + 0.679f * width, centerPoint[1] - width / 2 + 0.823f * width, + centerPoint[0] - width / 2 + 0.683f * width, centerPoint[1] - width / 2 + 0.862f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.9f * width, + centerPoint[0] - width / 2 + 0.735f * width, centerPoint[1] - width / 2 + 0.919f * width, + centerPoint[0] - width / 2 + 0.735f * width, centerPoint[1] - width / 2 + 0.9f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.756f * width, centerPoint[1] - width / 2 + 0.926f * width, + centerPoint[0] - width / 2 + 0.773f * width, centerPoint[1] - width / 2 + 0.902f * width, + centerPoint[0] - width / 2 + 0.773f * width, centerPoint[1] - width / 2 + 0.902f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.773f * width, centerPoint[1] - width / 2 + 0.902f * width, + centerPoint[0] - width / 2 + 0.756f * width, centerPoint[1] - width / 2 + 0.915f * width, + centerPoint[0] - width / 2 + 0.743f * width, centerPoint[1] - width / 2 + 0.892f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.773f * width, centerPoint[1] - width / 2 + 0.902f * width, + centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.864f * width, + centerPoint[0] - width / 2 + 0.784f * width, centerPoint[1] - width / 2 + 0.864f * width + ); + return path; + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaPath.java new file mode 100644 index 0000000..e91d333 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaPath.java @@ -0,0 +1,384 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class NinjaPath { + + public static Path getNinjaPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.476f * width, + centerPoint[1] - width / 2 + 0.186f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.472f * width, centerPoint[1] - width / 2 + 0.186f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.163f * width, + centerPoint[0] - width / 2 + 0.463f * width, centerPoint[1] - width / 2 + 0.156f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.462f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.11f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.102f * width, + centerPoint[0] - width / 2 + 0.472f * width, centerPoint[1] - width / 2 + 0.086f * width, + centerPoint[0] - width / 2 + 0.479f * width, centerPoint[1] - width / 2 + 0.081f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.486f * width, centerPoint[1] - width / 2 + 0.075f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.075f * width, + centerPoint[0] - width / 2 + 0.53f * width, centerPoint[1] - width / 2 + 0.081f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.542f * width, centerPoint[1] - width / 2 + 0.086f * width, + centerPoint[0] - width / 2 + 0.549f * width, centerPoint[1] - width / 2 + 0.097f * width, + centerPoint[0] - width / 2 + 0.551f * width, centerPoint[1] - width / 2 + 0.107f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.554f * width, centerPoint[1] - width / 2 + 0.117f * width, + centerPoint[0] - width / 2 + 0.554f * width, centerPoint[1] - width / 2 + 0.139f * width, + centerPoint[0] - width / 2 + 0.553f * width, centerPoint[1] - width / 2 + 0.146f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.551f * width, centerPoint[1] - width / 2 + 0.153f * width, + centerPoint[0] - width / 2 + 0.547f * width, centerPoint[1] - width / 2 + 0.173f * width, + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.179f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.54f * width, centerPoint[1] - width / 2 + 0.185f * width, + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.194f * width, + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.194f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.194f * width, + centerPoint[0] - width / 2 + 0.559f * width, centerPoint[1] - width / 2 + 0.184f * width, + centerPoint[0] - width / 2 + 0.564f * width, centerPoint[1] - width / 2 + 0.19f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.569f * width, centerPoint[1] - width / 2 + 0.197f * width, + centerPoint[0] - width / 2 + 0.569f * width, centerPoint[1] - width / 2 + 0.203f * width, + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.203f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.203f * width, + centerPoint[0] - width / 2 + 0.599f * width, centerPoint[1] - width / 2 + 0.195f * width, + centerPoint[0] - width / 2 + 0.601f * width, centerPoint[1] - width / 2 + 0.2f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.602f * width, centerPoint[1] - width / 2 + 0.204f * width, + centerPoint[0] - width / 2 + 0.618f * width, centerPoint[1] - width / 2 + 0.21f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.213f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.217f * width, + centerPoint[0] - width / 2 + 0.644f * width, centerPoint[1] - width / 2 + 0.231f * width, + centerPoint[0] - width / 2 + 0.646f * width, centerPoint[1] - width / 2 + 0.234f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.649f * width, centerPoint[1] - width / 2 + 0.237f * width, + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.253f * width, + centerPoint[0] - width / 2 + 0.662f * width, centerPoint[1] - width / 2 + 0.26f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.665f * width, centerPoint[1] - width / 2 + 0.267f * width, + centerPoint[0] - width / 2 + 0.661f * width, centerPoint[1] - width / 2 + 0.345f * width, + centerPoint[0] - width / 2 + 0.654f * width, centerPoint[1] - width / 2 + 0.35f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.648f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.633f * width, centerPoint[1] - width / 2 + 0.359f * width, + centerPoint[0] - width / 2 + 0.633f * width, centerPoint[1] - width / 2 + 0.359f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.633f * width, centerPoint[1] - width / 2 + 0.359f * width, + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.346f * width, + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.346f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.346f * width, + centerPoint[0] - width / 2 + 0.604f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.598f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.593f * width, centerPoint[1] - width / 2 + 0.358f * width, + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.355f * width, + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.361f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.58f * width, centerPoint[1] - width / 2 + 0.367f * width, + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.393f * width, + centerPoint[0] - width / 2 + 0.586f * width, centerPoint[1] - width / 2 + 0.398f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.589f * width, centerPoint[1] - width / 2 + 0.402f * width, + centerPoint[0] - width / 2 + 0.62f * width, centerPoint[1] - width / 2 + 0.447f * width, + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.458f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.47f * width, + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.471f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.48f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.618f * width, centerPoint[1] - width / 2 + 0.489f * width, + centerPoint[0] - width / 2 + 0.614f * width, centerPoint[1] - width / 2 + 0.536f * width, + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.543f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.619f * width, centerPoint[1] - width / 2 + 0.55f * width, + centerPoint[0] - width / 2 + 0.62f * width, centerPoint[1] - width / 2 + 0.582f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.59f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.598f * width, + centerPoint[0] - width / 2 + 0.627f * width, centerPoint[1] - width / 2 + 0.614f * width, + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.628f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.642f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.666f * width, + centerPoint[0] - width / 2 + 0.613f * width, centerPoint[1] - width / 2 + 0.67f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.605f * width, centerPoint[1] - width / 2 + 0.675f * width, + centerPoint[0] - width / 2 + 0.603f * width, centerPoint[1] - width / 2 + 0.676f * width, + centerPoint[0] - width / 2 + 0.601f * width, centerPoint[1] - width / 2 + 0.681f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.598f * width, centerPoint[1] - width / 2 + 0.685f * width, + centerPoint[0] - width / 2 + 0.596f * width, centerPoint[1] - width / 2 + 0.786f * width, + centerPoint[0] - width / 2 + 0.595f * width, centerPoint[1] - width / 2 + 0.8f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.807f * width, + centerPoint[0] - width / 2 + 0.596f * width, centerPoint[1] - width / 2 + 0.833f * width, + centerPoint[0] - width / 2 + 0.599f * width, centerPoint[1] - width / 2 + 0.841f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.603f * width, centerPoint[1] - width / 2 + 0.849f * width, + centerPoint[0] - width / 2 + 0.617f * width, centerPoint[1] - width / 2 + 0.863f * width, + centerPoint[0] - width / 2 + 0.634f * width, centerPoint[1] - width / 2 + 0.866f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.651f * width, centerPoint[1] - width / 2 + 0.87f * width, + centerPoint[0] - width / 2 + 0.657f * width, centerPoint[1] - width / 2 + 0.883f * width, + centerPoint[0] - width / 2 + 0.651f * width, centerPoint[1] - width / 2 + 0.886f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.645f * width, centerPoint[1] - width / 2 + 0.888f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.89f * width, + centerPoint[0] - width / 2 + 0.61f * width, centerPoint[1] - width / 2 + 0.886f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.598f * width, centerPoint[1] - width / 2 + 0.881f * width, + centerPoint[0] - width / 2 + 0.568f * width, centerPoint[1] - width / 2 + 0.885f * width, + centerPoint[0] - width / 2 + 0.562f * width, centerPoint[1] - width / 2 + 0.88f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.555f * width, centerPoint[1] - width / 2 + 0.874f * width, + centerPoint[0] - width / 2 + 0.55f * width, centerPoint[1] - width / 2 + 0.871f * width, + centerPoint[0] - width / 2 + 0.556f * width, centerPoint[1] - width / 2 + 0.858f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.559f * width, centerPoint[1] - width / 2 + 0.851f * width, + centerPoint[0] - width / 2 + 0.557f * width, centerPoint[1] - width / 2 + 0.833f * width, + centerPoint[0] - width / 2 + 0.556f * width, centerPoint[1] - width / 2 + 0.825f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.555f * width, centerPoint[1] - width / 2 + 0.817f * width, + centerPoint[0] - width / 2 + 0.542f * width, centerPoint[1] - width / 2 + 0.752f * width, + centerPoint[0] - width / 2 + 0.54f * width, centerPoint[1] - width / 2 + 0.724f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.538f * width, centerPoint[1] - width / 2 + 0.697f * width, + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.686f * width, + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.686f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.686f * width, + centerPoint[0] - width / 2 + 0.526f * width, centerPoint[1] - width / 2 + 0.663f * width, + centerPoint[0] - width / 2 + 0.526f * width, centerPoint[1] - width / 2 + 0.663f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.526f * width, centerPoint[1] - width / 2 + 0.663f * width, + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.683f * width, + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.682f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.502f * width, centerPoint[1] - width / 2 + 0.681f * width, + centerPoint[0] - width / 2 + 0.517f * width, centerPoint[1] - width / 2 + 0.722f * width, + centerPoint[0] - width / 2 + 0.511f * width, centerPoint[1] - width / 2 + 0.738f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.506f * width, centerPoint[1] - width / 2 + 0.754f * width, + centerPoint[0] - width / 2 + 0.509f * width, centerPoint[1] - width / 2 + 0.826f * width, + centerPoint[0] - width / 2 + 0.512f * width, centerPoint[1] - width / 2 + 0.837f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.849f * width, + centerPoint[0] - width / 2 + 0.527f * width, centerPoint[1] - width / 2 + 0.872f * width, + centerPoint[0] - width / 2 + 0.515f * width, centerPoint[1] - width / 2 + 0.878f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.502f * width, centerPoint[1] - width / 2 + 0.883f * width, + centerPoint[0] - width / 2 + 0.455f * width, centerPoint[1] - width / 2 + 0.876f * width, + centerPoint[0] - width / 2 + 0.445f * width, centerPoint[1] - width / 2 + 0.88f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.435f * width, centerPoint[1] - width / 2 + 0.883f * width, + centerPoint[0] - width / 2 + 0.419f * width, centerPoint[1] - width / 2 + 0.884f * width, + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.876f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.428f * width, centerPoint[1] - width / 2 + 0.868f * width, + centerPoint[0] - width / 2 + 0.44f * width, centerPoint[1] - width / 2 + 0.865f * width, + centerPoint[0] - width / 2 + 0.448f * width, centerPoint[1] - width / 2 + 0.859f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.456f * width, centerPoint[1] - width / 2 + 0.853f * width, + centerPoint[0] - width / 2 + 0.472f * width, centerPoint[1] - width / 2 + 0.847f * width, + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.837f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.475f * width, centerPoint[1] - width / 2 + 0.828f * width, + centerPoint[0] - width / 2 + 0.444f * width, centerPoint[1] - width / 2 + 0.71f * width, + centerPoint[0] - width / 2 + 0.447f * width, centerPoint[1] - width / 2 + 0.676f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.451f * width, centerPoint[1] - width / 2 + 0.642f * width, + centerPoint[0] - width / 2 + 0.431f * width, centerPoint[1] - width / 2 + 0.671f * width, + centerPoint[0] - width / 2 + 0.422f * width, centerPoint[1] - width / 2 + 0.655f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.639f * width, + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.611f * width, + centerPoint[0] - width / 2 + 0.403f * width, centerPoint[1] - width / 2 + 0.595f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.401f * width, centerPoint[1] - width / 2 + 0.579f * width, + centerPoint[0] - width / 2 + 0.415f * width, centerPoint[1] - width / 2 + 0.512f * width, + centerPoint[0] - width / 2 + 0.415f * width, centerPoint[1] - width / 2 + 0.507f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.415f * width, centerPoint[1] - width / 2 + 0.501f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.485f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.471f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.454f * width, + centerPoint[0] - width / 2 + 0.414f * width, centerPoint[1] - width / 2 + 0.447f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.421f * width, centerPoint[1] - width / 2 + 0.44f * width, + centerPoint[0] - width / 2 + 0.444f * width, centerPoint[1] - width / 2 + 0.414f * width, + centerPoint[0] - width / 2 + 0.445f * width, centerPoint[1] - width / 2 + 0.407f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.4f * width, + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.373f * width, + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.373f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.446f * width, centerPoint[1] - width / 2 + 0.373f * width, + centerPoint[0] - width / 2 + 0.43f * width, centerPoint[1] - width / 2 + 0.362f * width, + centerPoint[0] - width / 2 + 0.427f * width, centerPoint[1] - width / 2 + 0.363f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.365f * width, + centerPoint[0] - width / 2 + 0.381f * width, centerPoint[1] - width / 2 + 0.381f * width, + centerPoint[0] - width / 2 + 0.373f * width, centerPoint[1] - width / 2 + 0.377f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.365f * width, centerPoint[1] - width / 2 + 0.374f * width, + centerPoint[0] - width / 2 + 0.343f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.343f * width, centerPoint[1] - width / 2 + 0.347f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.343f * width, centerPoint[1] - width / 2 + 0.343f * width, + centerPoint[0] - width / 2 + 0.338f * width, centerPoint[1] - width / 2 + 0.302f * width, + centerPoint[0] - width / 2 + 0.341f * width, centerPoint[1] - width / 2 + 0.298f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.343f * width, centerPoint[1] - width / 2 + 0.295f * width, + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.279f * width, + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.274f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.269f * width, + centerPoint[0] - width / 2 + 0.361f * width, centerPoint[1] - width / 2 + 0.265f * width, + centerPoint[0] - width / 2 + 0.369f * width, centerPoint[1] - width / 2 + 0.26f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.377f * width, centerPoint[1] - width / 2 + 0.256f * width, + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.228f * width, + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.228f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.408f * width, centerPoint[1] - width / 2 + 0.228f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.221f * width, + centerPoint[0] - width / 2 + 0.416f * width, centerPoint[1] - width / 2 + 0.22f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.422f * width, centerPoint[1] - width / 2 + 0.219f * width, + centerPoint[0] - width / 2 + 0.444f * width, centerPoint[1] - width / 2 + 0.219f * width, + centerPoint[0] - width / 2 + 0.447f * width, centerPoint[1] - width / 2 + 0.219f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.45f * width, centerPoint[1] - width / 2 + 0.219f * width, + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.188f * width, + centerPoint[0] - width / 2 + 0.417f * width, centerPoint[1] - width / 2 + 0.17f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.165f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.16f * width, + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.16f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.413f * width, centerPoint[1] - width / 2 + 0.156f * width, + centerPoint[0] - width / 2 + 0.417f * width, centerPoint[1] - width / 2 + 0.152f * width, + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.153f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.423f * width, centerPoint[1] - width / 2 + 0.153f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.215f * width, + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.215f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.215f * width, + centerPoint[0] - width / 2 + 0.471f * width, centerPoint[1] - width / 2 + 0.203f * width, + centerPoint[0] - width / 2 + 0.471f * width, centerPoint[1] - width / 2 + 0.203f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.471f * width, centerPoint[1] - width / 2 + 0.203f * width, + centerPoint[0] - width / 2 + 0.463f * width, centerPoint[1] - width / 2 + 0.196f * width, + centerPoint[0] - width / 2 + 0.467f * width, centerPoint[1] - width / 2 + 0.193f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.47f * width, centerPoint[1] - width / 2 + 0.189f * width, + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.186f * width, + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.186f * width + ); + + return path; + } +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaStarPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaStarPath.java new file mode 100644 index 0000000..fa62c29 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/NinjaStarPath.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class NinjaStarPath { + public static Path getNinjaStarPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.374f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.859f * width, centerPoint[1] - width / 2 + 0.439f * width, + centerPoint[0] - width / 2 + 0.688f * width, centerPoint[1] - width / 2 + 0.469f * width, + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.394f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.575f * width, centerPoint[1] - width / 2 + 0.34f * width, + centerPoint[0] - width / 2 + 0.606f * width, centerPoint[1] - width / 2 + 0.298f * width, + centerPoint[0] - width / 2 + 0.567f * width, centerPoint[1] - width / 2 + 0.204f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.527f * width, centerPoint[1] - width / 2 + 0.11f * width, + centerPoint[0] - width / 2 + 0.403f * width, centerPoint[1] - width / 2 + 0.088f * width, + centerPoint[0] - width / 2 + 0.374f * width, centerPoint[1] - width / 2 + 0.097f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.439f * width, centerPoint[1] - width / 2 + 0.141f * width, + centerPoint[0] - width / 2 + 0.469f * width, centerPoint[1] - width / 2 + 0.312f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.378f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.34f * width, centerPoint[1] - width / 2 + 0.425f * width, + centerPoint[0] - width / 2 + 0.298f * width, centerPoint[1] - width / 2 + 0.394f * width, + centerPoint[0] - width / 2 + 0.204f * width, centerPoint[1] - width / 2 + 0.433f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.11f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.088f * width, centerPoint[1] - width / 2 + 0.597f * width, + centerPoint[0] - width / 2 + 0.097f * width, centerPoint[1] - width / 2 + 0.626f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.141f * width, centerPoint[1] - width / 2 + 0.561f * width, + centerPoint[0] - width / 2 + 0.307f * width, centerPoint[1] - width / 2 + 0.536f * width, + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.606f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.429f * width, centerPoint[1] - width / 2 + 0.656f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.702f * width, + centerPoint[0] - width / 2 + 0.433f * width, centerPoint[1] - width / 2 + 0.796f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.89f * width, + centerPoint[0] - width / 2 + 0.597f * width, centerPoint[1] - width / 2 + 0.912f * width, + centerPoint[0] - width / 2 + 0.626f * width, centerPoint[1] - width / 2 + 0.903f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.561f * width, centerPoint[1] - width / 2 + 0.859f * width, + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.688f * width, + centerPoint[0] - width / 2 + 0.606f * width, centerPoint[1] - width / 2 + 0.622f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.575f * width, + centerPoint[0] - width / 2 + 0.702f * width, centerPoint[1] - width / 2 + 0.606f * width, + centerPoint[0] - width / 2 + 0.796f * width, centerPoint[1] - width / 2 + 0.567f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.527f * width, + centerPoint[0] - width / 2 + 0.912f * width, centerPoint[1] - width / 2 + 0.403f * width, + centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.374f * width + ); + return path; + + } +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/StormPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/StormPath.java new file mode 100644 index 0000000..2779b89 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/StormPath.java @@ -0,0 +1,584 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class StormPath { + + public static Path getStormPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.963f * width, centerPoint[1] - width / 2 + 0.812f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.955f * width, centerPoint[1] - width / 2 + 0.805f * width, + centerPoint[0] - width / 2 + 0.929f * width, centerPoint[1] - width / 2 + 0.79f * width, + centerPoint[0] - width / 2 + 0.929f * width, centerPoint[1] - width / 2 + 0.79f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.917f * width, centerPoint[1] - width / 2 + 0.784f * width, + centerPoint[0] - width / 2 + 0.893f * width, centerPoint[1] - width / 2 + 0.748f * width, + centerPoint[0] - width / 2 + 0.875f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.849f * width, centerPoint[1] - width / 2 + 0.714f * width, + centerPoint[0] - width / 2 + 0.82f * width, centerPoint[1] - width / 2 + 0.704f * width, + centerPoint[0] - width / 2 + 0.817f * width, centerPoint[1] - width / 2 + 0.704f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.704f * width, + centerPoint[0] - width / 2 + 0.808f * width, centerPoint[1] - width / 2 + 0.701f * width, + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.688f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.842f * width, centerPoint[1] - width / 2 + 0.648f * width, + centerPoint[0] - width / 2 + 0.844f * width, centerPoint[1] - width / 2 + 0.593f * width, + centerPoint[0] - width / 2 + 0.844f * width, centerPoint[1] - width / 2 + 0.586f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.844f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.815f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.814f * width, centerPoint[1] - width / 2 + 0.454f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.451f * width, + centerPoint[0] - width / 2 + 0.789f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.743f * width, centerPoint[1] - width / 2 + 0.314f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.715f * width, centerPoint[1] - width / 2 + 0.288f * width, + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.268f * width, + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.264f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.263f * width, + centerPoint[0] - width / 2 + 0.66f * width, centerPoint[1] - width / 2 + 0.263f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.262f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.671f * width, centerPoint[1] - width / 2 + 0.231f * width, + centerPoint[0] - width / 2 + 0.645f * width, centerPoint[1] - width / 2 + 0.178f * width, + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.178f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.573f * width, centerPoint[1] - width / 2 + 0.164f * width, + centerPoint[0] - width / 2 + 0.536f * width, centerPoint[1] - width / 2 + 0.204f * width, + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.217f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.221f * width, + centerPoint[0] - width / 2 + 0.523f * width, centerPoint[1] - width / 2 + 0.233f * width, + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.235f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.235f * width, + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.24f * width, + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.237f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.237f * width, + centerPoint[0] - width / 2 + 0.535f * width, centerPoint[1] - width / 2 + 0.246f * width, + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.246f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.246f * width, + centerPoint[0] - width / 2 + 0.549f * width, centerPoint[1] - width / 2 + 0.253f * width, + centerPoint[0] - width / 2 + 0.548f * width, centerPoint[1] - width / 2 + 0.26f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.548f * width, centerPoint[1] - width / 2 + 0.261f * width, + centerPoint[0] - width / 2 + 0.548f * width, centerPoint[1] - width / 2 + 0.262f * width, + centerPoint[0] - width / 2 + 0.548f * width, centerPoint[1] - width / 2 + 0.263f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.539f * width, centerPoint[1] - width / 2 + 0.268f * width, + centerPoint[0] - width / 2 + 0.526f * width, centerPoint[1] - width / 2 + 0.275f * width, + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.273f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.52f * width, centerPoint[1] - width / 2 + 0.277f * width, + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.279f * width, + centerPoint[0] - width / 2 + 0.544f * width, centerPoint[1] - width / 2 + 0.277f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.544f * width, centerPoint[1] - width / 2 + 0.277f * width, + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.28f * width, + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.28f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.28f * width, + centerPoint[0] - width / 2 + 0.54f * width, centerPoint[1] - width / 2 + 0.286f * width, + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.288f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.291f * width, + centerPoint[0] - width / 2 + 0.513f * width, centerPoint[1] - width / 2 + 0.29f * width, + centerPoint[0] - width / 2 + 0.513f * width, centerPoint[1] - width / 2 + 0.29f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.513f * width, centerPoint[1] - width / 2 + 0.29f * width, + centerPoint[0] - width / 2 + 0.515f * width, centerPoint[1] - width / 2 + 0.298f * width, + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.301f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.302f * width, + centerPoint[0] - width / 2 + 0.502f * width, centerPoint[1] - width / 2 + 0.312f * width, + centerPoint[0] - width / 2 + 0.497f * width, centerPoint[1] - width / 2 + 0.317f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.504f * width, centerPoint[1] - width / 2 + 0.313f * width, + centerPoint[0] - width / 2 + 0.532f * width, centerPoint[1] - width / 2 + 0.317f * width, + centerPoint[0] - width / 2 + 0.565f * width, centerPoint[1] - width / 2 + 0.318f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.542f * width, centerPoint[1] - width / 2 + 0.333f * width, + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.347f * width, + centerPoint[0] - width / 2 + 0.516f * width, centerPoint[1] - width / 2 + 0.349f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.36f * width, + centerPoint[0] - width / 2 + 0.414f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.414f * width, centerPoint[1] - width / 2 + 0.354f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.414f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.397f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.391f * width, centerPoint[1] - width / 2 + 0.352f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.344f * width, + centerPoint[0] - width / 2 + 0.356f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.358f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.345f * width, centerPoint[1] - width / 2 + 0.359f * width, + centerPoint[0] - width / 2 + 0.343f * width, centerPoint[1] - width / 2 + 0.362f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.365f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.365f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.34f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.34f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.328f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.316f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.316f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.316f * width, + centerPoint[0] - width / 2 + 0.211f * width, centerPoint[1] - width / 2 + 0.316f * width, + centerPoint[0] - width / 2 + 0.211f * width, centerPoint[1] - width / 2 + 0.316f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.3f * width, + centerPoint[0] - width / 2 + 0.214f * width, centerPoint[1] - width / 2 + 0.249f * width, + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.216f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.215f * width, + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.215f * width, + centerPoint[0] - width / 2 + 0.196f * width, centerPoint[1] - width / 2 + 0.214f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.194f * width, centerPoint[1] - width / 2 + 0.211f * width, + centerPoint[0] - width / 2 + 0.157f * width, centerPoint[1] - width / 2 + 0.139f * width, + centerPoint[0] - width / 2 + 0.147f * width, centerPoint[1] - width / 2 + 0.12f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.147f * width, centerPoint[1] - width / 2 + 0.12f * width, + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.113f * width, + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.113f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.112f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.143f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.142f * width, centerPoint[1] - width / 2 + 0.111f * width, + centerPoint[0] - width / 2 + 0.141f * width, centerPoint[1] - width / 2 + 0.112f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.14f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.14f * width, centerPoint[1] - width / 2 + 0.113f * width, + centerPoint[0] - width / 2 + 0.14f * width, centerPoint[1] - width / 2 + 0.114f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.14f * width, centerPoint[1] - width / 2 + 0.114f * width, + centerPoint[0] - width / 2 + 0.142f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.142f * width, centerPoint[1] - width / 2 + 0.118f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.142f * width, centerPoint[1] - width / 2 + 0.118f * width, + centerPoint[0] - width / 2 + 0.088f * width, centerPoint[1] - width / 2 + 0.179f * width, + centerPoint[0] - width / 2 + 0.088f * width, centerPoint[1] - width / 2 + 0.179f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.088f * width, centerPoint[1] - width / 2 + 0.179f * width, + centerPoint[0] - width / 2 + 0.086f * width, centerPoint[1] - width / 2 + 0.178f * width, + centerPoint[0] - width / 2 + 0.086f * width, centerPoint[1] - width / 2 + 0.178f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.178f * width, + centerPoint[0] - width / 2 + 0.084f * width, centerPoint[1] - width / 2 + 0.178f * width, + centerPoint[0] - width / 2 + 0.084f * width, centerPoint[1] - width / 2 + 0.179f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.084f * width, centerPoint[1] - width / 2 + 0.18f * width, + centerPoint[0] - width / 2 + 0.084f * width, centerPoint[1] - width / 2 + 0.181f * width, + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.181f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.181f * width, + centerPoint[0] - width / 2 + 0.087f * width, centerPoint[1] - width / 2 + 0.182f * width, + centerPoint[0] - width / 2 + 0.087f * width, centerPoint[1] - width / 2 + 0.182f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.087f * width, centerPoint[1] - width / 2 + 0.182f * width, + centerPoint[0] - width / 2 + 0.089f * width, centerPoint[1] - width / 2 + 0.232f * width, + centerPoint[0] - width / 2 + 0.089f * width, centerPoint[1] - width / 2 + 0.232f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.089f * width, centerPoint[1] - width / 2 + 0.232f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.321f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.321f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.321f * width, + centerPoint[0] - width / 2 + 0.064f * width, centerPoint[1] - width / 2 + 0.321f * width, + centerPoint[0] - width / 2 + 0.064f * width, centerPoint[1] - width / 2 + 0.321f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.063f * width, centerPoint[1] - width / 2 + 0.32f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.321f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.322f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.323f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.323f * width, + centerPoint[0] - width / 2 + 0.063f * width, centerPoint[1] - width / 2 + 0.324f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.063f * width, centerPoint[1] - width / 2 + 0.324f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.324f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.324f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.324f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.325f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.325f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.325f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.352f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.359f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.36f * width, + centerPoint[0] - width / 2 + 0.064f * width, centerPoint[1] - width / 2 + 0.363f * width, + centerPoint[0] - width / 2 + 0.063f * width, centerPoint[1] - width / 2 + 0.367f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.063f * width, centerPoint[1] - width / 2 + 0.367f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.367f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.367f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.367f * width, + centerPoint[0] - width / 2 + 0.057f * width, centerPoint[1] - width / 2 + 0.368f * width, + centerPoint[0] - width / 2 + 0.057f * width, centerPoint[1] - width / 2 + 0.369f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.057f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.058f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.059f * width, centerPoint[1] - width / 2 + 0.37f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.059f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.37f * width, + centerPoint[0] - width / 2 + 0.062f * width, centerPoint[1] - width / 2 + 0.37f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.056f * width, centerPoint[1] - width / 2 + 0.392f * width, + centerPoint[0] - width / 2 + 0.042f * width, centerPoint[1] - width / 2 + 0.438f * width, + centerPoint[0] - width / 2 + 0.037f * width, centerPoint[1] - width / 2 + 0.453f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.037f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.453f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.034f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.033f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.033f * width, centerPoint[1] - width / 2 + 0.454f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.033f * width, centerPoint[1] - width / 2 + 0.455f * width, + centerPoint[0] - width / 2 + 0.034f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.456f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.036f * width, centerPoint[1] - width / 2 + 0.456f * width, + centerPoint[0] - width / 2 + 0.036f * width, centerPoint[1] - width / 2 + 0.456f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.457f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.035f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.138f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.142f * width, centerPoint[1] - width / 2 + 0.452f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.146f * width, centerPoint[1] - width / 2 + 0.452f * width, + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.443f * width, + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.443f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.443f * width, + centerPoint[0] - width / 2 + 0.165f * width, centerPoint[1] - width / 2 + 0.429f * width, + centerPoint[0] - width / 2 + 0.172f * width, centerPoint[1] - width / 2 + 0.423f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.178f * width, centerPoint[1] - width / 2 + 0.417f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.396f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.396f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.396f * width, + centerPoint[0] - width / 2 + 0.209f * width, centerPoint[1] - width / 2 + 0.368f * width, + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.365f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.357f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.347f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.347f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.372f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.372f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.373f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.374f * width, + centerPoint[0] - width / 2 + 0.342f * width, centerPoint[1] - width / 2 + 0.374f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.338f * width, centerPoint[1] - width / 2 + 0.383f * width, + centerPoint[0] - width / 2 + 0.354f * width, centerPoint[1] - width / 2 + 0.395f * width, + centerPoint[0] - width / 2 + 0.378f * width, centerPoint[1] - width / 2 + 0.398f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.383f * width, centerPoint[1] - width / 2 + 0.398f * width, + centerPoint[0] - width / 2 + 0.404f * width, centerPoint[1] - width / 2 + 0.388f * width, + centerPoint[0] - width / 2 + 0.407f * width, centerPoint[1] - width / 2 + 0.388f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.411f * width, centerPoint[1] - width / 2 + 0.388f * width, + centerPoint[0] - width / 2 + 0.461f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.468f * width, centerPoint[1] - width / 2 + 0.412f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.475f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.539f * width, centerPoint[1] - width / 2 + 0.409f * width, + centerPoint[0] - width / 2 + 0.548f * width, centerPoint[1] - width / 2 + 0.406f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.558f * width, centerPoint[1] - width / 2 + 0.402f * width, + centerPoint[0] - width / 2 + 0.6f * width, centerPoint[1] - width / 2 + 0.386f * width, + centerPoint[0] - width / 2 + 0.6f * width, centerPoint[1] - width / 2 + 0.386f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.6f * width, centerPoint[1] - width / 2 + 0.386f * width, + centerPoint[0] - width / 2 + 0.613f * width, centerPoint[1] - width / 2 + 0.403f * width, + centerPoint[0] - width / 2 + 0.635f * width, centerPoint[1] - width / 2 + 0.412f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.653f * width, centerPoint[1] - width / 2 + 0.42f * width, + centerPoint[0] - width / 2 + 0.672f * width, centerPoint[1] - width / 2 + 0.453f * width, + centerPoint[0] - width / 2 + 0.677f * width, centerPoint[1] - width / 2 + 0.468f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.681f * width, centerPoint[1] - width / 2 + 0.484f * width, + centerPoint[0] - width / 2 + 0.63f * width, centerPoint[1] - width / 2 + 0.538f * width, + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.544f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.612f * width, centerPoint[1] - width / 2 + 0.549f * width, + centerPoint[0] - width / 2 + 0.519f * width, centerPoint[1] - width / 2 + 0.593f * width, + centerPoint[0] - width / 2 + 0.524f * width, centerPoint[1] - width / 2 + 0.595f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.528f * width, centerPoint[1] - width / 2 + 0.597f * width, + centerPoint[0] - width / 2 + 0.551f * width, centerPoint[1] - width / 2 + 0.602f * width, + centerPoint[0] - width / 2 + 0.551f * width, centerPoint[1] - width / 2 + 0.608f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.551f * width, centerPoint[1] - width / 2 + 0.615f * width, + centerPoint[0] - width / 2 + 0.578f * width, centerPoint[1] - width / 2 + 0.632f * width, + centerPoint[0] - width / 2 + 0.578f * width, centerPoint[1] - width / 2 + 0.632f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.578f * width, centerPoint[1] - width / 2 + 0.632f * width, + centerPoint[0] - width / 2 + 0.584f * width, centerPoint[1] - width / 2 + 0.634f * width, + centerPoint[0] - width / 2 + 0.594f * width, centerPoint[1] - width / 2 + 0.638f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.582f * width, centerPoint[1] - width / 2 + 0.662f * width, + centerPoint[0] - width / 2 + 0.57f * width, centerPoint[1] - width / 2 + 0.691f * width, + centerPoint[0] - width / 2 + 0.569f * width, centerPoint[1] - width / 2 + 0.694f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.568f * width, centerPoint[1] - width / 2 + 0.697f * width, + centerPoint[0] - width / 2 + 0.55f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.73f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.546f * width, centerPoint[1] - width / 2 + 0.73f * width, + centerPoint[0] - width / 2 + 0.496f * width, centerPoint[1] - width / 2 + 0.819f * width, + centerPoint[0] - width / 2 + 0.496f * width, centerPoint[1] - width / 2 + 0.819f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.496f * width, centerPoint[1] - width / 2 + 0.819f * width, + centerPoint[0] - width / 2 + 0.486f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.475f * width, centerPoint[1] - width / 2 + 0.838f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.846f * width, + centerPoint[0] - width / 2 + 0.443f * width, centerPoint[1] - width / 2 + 0.855f * width, + centerPoint[0] - width / 2 + 0.44f * width, centerPoint[1] - width / 2 + 0.857f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.436f * width, centerPoint[1] - width / 2 + 0.859f * width, + centerPoint[0] - width / 2 + 0.441f * width, centerPoint[1] - width / 2 + 0.868f * width, + centerPoint[0] - width / 2 + 0.441f * width, centerPoint[1] - width / 2 + 0.872f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.441f * width, centerPoint[1] - width / 2 + 0.872f * width, + centerPoint[0] - width / 2 + 0.45f * width, centerPoint[1] - width / 2 + 0.875f * width, + centerPoint[0] - width / 2 + 0.45f * width, centerPoint[1] - width / 2 + 0.875f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.464f * width, centerPoint[1] - width / 2 + 0.876f * width, + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.875f * width, + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.875f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.492f * width, centerPoint[1] - width / 2 + 0.875f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.867f * width, + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.867f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.498f * width, centerPoint[1] - width / 2 + 0.867f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.875f * width, + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.875f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.501f * width, centerPoint[1] - width / 2 + 0.875f * width, + centerPoint[0] - width / 2 + 0.53f * width, centerPoint[1] - width / 2 + 0.873f * width, + centerPoint[0] - width / 2 + 0.535f * width, centerPoint[1] - width / 2 + 0.871f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.539f * width, centerPoint[1] - width / 2 + 0.869f * width, + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.837f * width, + centerPoint[0] - width / 2 + 0.549f * width, centerPoint[1] - width / 2 + 0.827f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.557f * width, centerPoint[1] - width / 2 + 0.817f * width, + centerPoint[0] - width / 2 + 0.572f * width, centerPoint[1] - width / 2 + 0.788f * width, + centerPoint[0] - width / 2 + 0.59f * width, centerPoint[1] - width / 2 + 0.769f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.607f * width, centerPoint[1] - width / 2 + 0.75f * width, + centerPoint[0] - width / 2 + 0.613f * width, centerPoint[1] - width / 2 + 0.715f * width, + centerPoint[0] - width / 2 + 0.618f * width, centerPoint[1] - width / 2 + 0.709f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.621f * width, centerPoint[1] - width / 2 + 0.707f * width, + centerPoint[0] - width / 2 + 0.643f * width, centerPoint[1] - width / 2 + 0.684f * width, + centerPoint[0] - width / 2 + 0.666f * width, centerPoint[1] - width / 2 + 0.66f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.698f * width, centerPoint[1] - width / 2 + 0.668f * width, + centerPoint[0] - width / 2 + 0.729f * width, centerPoint[1] - width / 2 + 0.671f * width, + centerPoint[0] - width / 2 + 0.745f * width, centerPoint[1] - width / 2 + 0.662f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.741f * width, centerPoint[1] - width / 2 + 0.681f * width, + centerPoint[0] - width / 2 + 0.736f * width, centerPoint[1] - width / 2 + 0.729f * width, + centerPoint[0] - width / 2 + 0.746f * width, centerPoint[1] - width / 2 + 0.738f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.756f * width, centerPoint[1] - width / 2 + 0.748f * width, + centerPoint[0] - width / 2 + 0.788f * width, centerPoint[1] - width / 2 + 0.761f * width, + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.767f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.819f * width, centerPoint[1] - width / 2 + 0.774f * width, + centerPoint[0] - width / 2 + 0.888f * width, centerPoint[1] - width / 2 + 0.806f * width, + centerPoint[0] - width / 2 + 0.895f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.895f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.909f * width, centerPoint[1] - width / 2 + 0.827f * width, + centerPoint[0] - width / 2 + 0.911f * width, centerPoint[1] - width / 2 + 0.831f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.912f * width, centerPoint[1] - width / 2 + 0.835f * width, + centerPoint[0] - width / 2 + 0.908f * width, centerPoint[1] - width / 2 + 0.858f * width, + centerPoint[0] - width / 2 + 0.9f * width, centerPoint[1] - width / 2 + 0.87f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.891f * width, centerPoint[1] - width / 2 + 0.882f * width, + centerPoint[0] - width / 2 + 0.897f * width, centerPoint[1] - width / 2 + 0.888f * width, + centerPoint[0] - width / 2 + 0.905f * width, centerPoint[1] - width / 2 + 0.888f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.913f * width, centerPoint[1] - width / 2 + 0.888f * width, + centerPoint[0] - width / 2 + 0.946f * width, centerPoint[1] - width / 2 + 0.89f * width, + centerPoint[0] - width / 2 + 0.95f * width, centerPoint[1] - width / 2 + 0.856f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.831f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.831f * width, + centerPoint[0] - width / 2 + 0.961f * width, centerPoint[1] - width / 2 + 0.838f * width, + centerPoint[0] - width / 2 + 0.961f * width, centerPoint[1] - width / 2 + 0.838f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.961f * width, centerPoint[1] - width / 2 + 0.838f * width, + centerPoint[0] - width / 2 + 0.972f * width, centerPoint[1] - width / 2 + 0.82f * width, + centerPoint[0] - width / 2 + 0.963f * width, centerPoint[1] - width / 2 + 0.812f * width + ); + return path; + + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ToothPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ToothPath.java new file mode 100644 index 0000000..de65e4c --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ToothPath.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class ToothPath { + + public static Path getToothPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.405f * width, centerPoint[1] - width / 2 + 0.152f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.447f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.457f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.089f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.625f * width, centerPoint[1] - width / 2 + 0.092f * width, + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.152f * width, + centerPoint[0] - width / 2 + 0.657f * width, centerPoint[1] - width / 2 + 0.155f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.706f * width, centerPoint[1] - width / 2 + 0.159f * width, + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.166f * width, + centerPoint[0] - width / 2 + 0.811f * width, centerPoint[1] - width / 2 + 0.281f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.818f * width, centerPoint[1] - width / 2 + 0.397f * width, + centerPoint[0] - width / 2 + 0.8f * width, centerPoint[1] - width / 2 + 0.477f * width, + centerPoint[0] - width / 2 + 0.751f * width, centerPoint[1] - width / 2 + 0.61f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.702f * width, centerPoint[1] - width / 2 + 0.743f * width, + centerPoint[0] - width / 2 + 0.713f * width, centerPoint[1] - width / 2 + 0.851f * width, + centerPoint[0] - width / 2 + 0.667f * width, centerPoint[1] - width / 2 + 0.862f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.622f * width, centerPoint[1] - width / 2 + 0.872f * width, + centerPoint[0] - width / 2 + 0.59f * width, centerPoint[1] - width / 2 + 0.655f * width, + centerPoint[0] - width / 2 + 0.566f * width, centerPoint[1] - width / 2 + 0.648f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.541f * width, centerPoint[1] - width / 2 + 0.641f * width, + centerPoint[0] - width / 2 + 0.482f * width, centerPoint[1] - width / 2 + 0.585f * width, + centerPoint[0] - width / 2 + 0.443f * width, centerPoint[1] - width / 2 + 0.722f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.405f * width, centerPoint[1] - width / 2 + 0.858f * width, + centerPoint[0] - width / 2 + 0.401f * width, centerPoint[1] - width / 2 + 0.9f * width, + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.911f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.921f * width, + centerPoint[0] - width / 2 + 0.314f * width, centerPoint[1] - width / 2 + 0.776f * width, + centerPoint[0] - width / 2 + 0.283f * width, centerPoint[1] - width / 2 + 0.697f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.241f * width, centerPoint[1] - width / 2 + 0.592f * width, + centerPoint[0] - width / 2 + 0.185f * width, centerPoint[1] - width / 2 + 0.509f * width, + centerPoint[0] - width / 2 + 0.188f * width, centerPoint[1] - width / 2 + 0.299f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.192f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.349f * width, centerPoint[1] - width / 2 + 0.155f * width, + centerPoint[0] - width / 2 + 0.405f * width, centerPoint[1] - width / 2 + 0.152f * width + ); + return path; + + } + +} diff --git a/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ViolinPath.java b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ViolinPath.java new file mode 100644 index 0000000..09cec17 --- /dev/null +++ b/library/src/main/java/jp/co/recruit_lifestyle/android/widget/character/ViolinPath.java @@ -0,0 +1,499 @@ +/* + * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jp.co.recruit_lifestyle.android.widget.character; + +import android.graphics.Path; + +/** + * @author amyu + */ +public class ViolinPath { + + public static Path getViolinPath(float width, float[] centerPoint){ + Path path = new Path(); + + path.moveTo(centerPoint[0] - width / 2 + 0.97f * width, centerPoint[1] - width / 2 + 0.193f * width); + path.cubicTo( + centerPoint[0] - width / 2 + 0.968f * width, centerPoint[1] - width / 2 + 0.184f * width, + centerPoint[0] - width / 2 + 0.962f * width, centerPoint[1] - width / 2 + 0.18f * width, + centerPoint[0] - width / 2 + 0.957f * width, centerPoint[1] - width / 2 + 0.18f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.952f * width, centerPoint[1] - width / 2 + 0.179f * width, + centerPoint[0] - width / 2 + 0.947f * width, centerPoint[1] - width / 2 + 0.184f * width, + centerPoint[0] - width / 2 + 0.945f * width, centerPoint[1] - width / 2 + 0.185f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.942f * width, centerPoint[1] - width / 2 + 0.186f * width, + centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.172f * width, + centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.172f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.934f * width, centerPoint[1] - width / 2 + 0.166f * width, + centerPoint[0] - width / 2 + 0.941f * width, centerPoint[1] - width / 2 + 0.148f * width, + centerPoint[0] - width / 2 + 0.941f * width, centerPoint[1] - width / 2 + 0.148f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.941f * width, centerPoint[1] - width / 2 + 0.148f * width, + centerPoint[0] - width / 2 + 0.946f * width, centerPoint[1] - width / 2 + 0.15f * width, + centerPoint[0] - width / 2 + 0.952f * width, centerPoint[1] - width / 2 + 0.143f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.959f * width, centerPoint[1] - width / 2 + 0.136f * width, + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.131f * width, + centerPoint[0] - width / 2 + 0.951f * width, centerPoint[1] - width / 2 + 0.127f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.954f * width, centerPoint[1] - width / 2 + 0.121f * width, + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.108f * width, + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.104f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.956f * width, centerPoint[1] - width / 2 + 0.1f * width, + centerPoint[0] - width / 2 + 0.953f * width, centerPoint[1] - width / 2 + 0.096f * width, + centerPoint[0] - width / 2 + 0.951f * width, centerPoint[1] - width / 2 + 0.097f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.948f * width, centerPoint[1] - width / 2 + 0.097f * width, + centerPoint[0] - width / 2 + 0.945f * width, centerPoint[1] - width / 2 + 0.093f * width, + centerPoint[0] - width / 2 + 0.944f * width, centerPoint[1] - width / 2 + 0.092f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.943f * width, centerPoint[1] - width / 2 + 0.09f * width, + centerPoint[0] - width / 2 + 0.94f * width, centerPoint[1] - width / 2 + 0.088f * width, + centerPoint[0] - width / 2 + 0.934f * width, centerPoint[1] - width / 2 + 0.088f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.934f * width, centerPoint[1] - width / 2 + 0.085f * width, + centerPoint[0] - width / 2 + 0.928f * width, centerPoint[1] - width / 2 + 0.083f * width, + centerPoint[0] - width / 2 + 0.922f * width, centerPoint[1] - width / 2 + 0.087f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.917f * width, centerPoint[1] - width / 2 + 0.09f * width, + centerPoint[0] - width / 2 + 0.907f * width, centerPoint[1] - width / 2 + 0.1f * width, + centerPoint[0] - width / 2 + 0.907f * width, centerPoint[1] - width / 2 + 0.1f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.907f * width, centerPoint[1] - width / 2 + 0.1f * width, + centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.098f * width, + centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.098f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.903f * width, centerPoint[1] - width / 2 + 0.098f * width, + centerPoint[0] - width / 2 + 0.899f * width, centerPoint[1] - width / 2 + 0.099f * width, + centerPoint[0] - width / 2 + 0.895f * width, centerPoint[1] - width / 2 + 0.103f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.892f * width, centerPoint[1] - width / 2 + 0.107f * width, + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.112f * width, + centerPoint[0] - width / 2 + 0.889f * width, centerPoint[1] - width / 2 + 0.114f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.888f * width, centerPoint[1] - width / 2 + 0.116f * width, + centerPoint[0] - width / 2 + 0.891f * width, centerPoint[1] - width / 2 + 0.117f * width, + centerPoint[0] - width / 2 + 0.892f * width, centerPoint[1] - width / 2 + 0.118f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.893f * width, centerPoint[1] - width / 2 + 0.12f * width, + centerPoint[0] - width / 2 + 0.891f * width, centerPoint[1] - width / 2 + 0.122f * width, + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.124f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.888f * width, centerPoint[1] - width / 2 + 0.125f * width, + centerPoint[0] - width / 2 + 0.887f * width, centerPoint[1] - width / 2 + 0.127f * width, + centerPoint[0] - width / 2 + 0.889f * width, centerPoint[1] - width / 2 + 0.128f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.891f * width, centerPoint[1] - width / 2 + 0.13f * width, + centerPoint[0] - width / 2 + 0.899f * width, centerPoint[1] - width / 2 + 0.138f * width, + centerPoint[0] - width / 2 + 0.899f * width, centerPoint[1] - width / 2 + 0.138f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.899f * width, centerPoint[1] - width / 2 + 0.138f * width, + centerPoint[0] - width / 2 + 0.897f * width, centerPoint[1] - width / 2 + 0.142f * width, + centerPoint[0] - width / 2 + 0.896f * width, centerPoint[1] - width / 2 + 0.143f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.894f * width, centerPoint[1] - width / 2 + 0.144f * width, + centerPoint[0] - width / 2 + 0.889f * width, centerPoint[1] - width / 2 + 0.141f * width, + centerPoint[0] - width / 2 + 0.878f * width, centerPoint[1] - width / 2 + 0.138f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.868f * width, centerPoint[1] - width / 2 + 0.135f * width, + centerPoint[0] - width / 2 + 0.852f * width, centerPoint[1] - width / 2 + 0.136f * width, + centerPoint[0] - width / 2 + 0.852f * width, centerPoint[1] - width / 2 + 0.136f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.852f * width, centerPoint[1] - width / 2 + 0.136f * width, + centerPoint[0] - width / 2 + 0.848f * width, centerPoint[1] - width / 2 + 0.132f * width, + centerPoint[0] - width / 2 + 0.847f * width, centerPoint[1] - width / 2 + 0.131f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.845f * width, centerPoint[1] - width / 2 + 0.13f * width, + centerPoint[0] - width / 2 + 0.843f * width, centerPoint[1] - width / 2 + 0.126f * width, + centerPoint[0] - width / 2 + 0.843f * width, centerPoint[1] - width / 2 + 0.12f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.844f * width, centerPoint[1] - width / 2 + 0.113f * width, + centerPoint[0] - width / 2 + 0.834f * width, centerPoint[1] - width / 2 + 0.111f * width, + centerPoint[0] - width / 2 + 0.827f * width, centerPoint[1] - width / 2 + 0.112f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.82f * width, centerPoint[1] - width / 2 + 0.113f * width, + centerPoint[0] - width / 2 + 0.815f * width, centerPoint[1] - width / 2 + 0.117f * width, + centerPoint[0] - width / 2 + 0.812f * width, centerPoint[1] - width / 2 + 0.122f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.808f * width, centerPoint[1] - width / 2 + 0.127f * width, + centerPoint[0] - width / 2 + 0.809f * width, centerPoint[1] - width / 2 + 0.138f * width, + centerPoint[0] - width / 2 + 0.809f * width, centerPoint[1] - width / 2 + 0.138f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.809f * width, centerPoint[1] - width / 2 + 0.138f * width, + centerPoint[0] - width / 2 + 0.807f * width, centerPoint[1] - width / 2 + 0.139f * width, + centerPoint[0] - width / 2 + 0.805f * width, centerPoint[1] - width / 2 + 0.137f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.804f * width, centerPoint[1] - width / 2 + 0.135f * width, + centerPoint[0] - width / 2 + 0.805f * width, centerPoint[1] - width / 2 + 0.128f * width, + centerPoint[0] - width / 2 + 0.805f * width, centerPoint[1] - width / 2 + 0.124f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.805f * width, centerPoint[1] - width / 2 + 0.121f * width, + centerPoint[0] - width / 2 + 0.787f * width, centerPoint[1] - width / 2 + 0.114f * width, + centerPoint[0] - width / 2 + 0.781f * width, centerPoint[1] - width / 2 + 0.118f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.77f * width, centerPoint[1] - width / 2 + 0.125f * width, + centerPoint[0] - width / 2 + 0.774f * width, centerPoint[1] - width / 2 + 0.144f * width, + centerPoint[0] - width / 2 + 0.778f * width, centerPoint[1] - width / 2 + 0.147f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.781f * width, centerPoint[1] - width / 2 + 0.15f * width, + centerPoint[0] - width / 2 + 0.787f * width, centerPoint[1] - width / 2 + 0.156f * width, + centerPoint[0] - width / 2 + 0.792f * width, centerPoint[1] - width / 2 + 0.155f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.797f * width, centerPoint[1] - width / 2 + 0.154f * width, + centerPoint[0] - width / 2 + 0.795f * width, centerPoint[1] - width / 2 + 0.151f * width, + centerPoint[0] - width / 2 + 0.798f * width, centerPoint[1] - width / 2 + 0.15f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.8f * width, centerPoint[1] - width / 2 + 0.149f * width, + centerPoint[0] - width / 2 + 0.8f * width, centerPoint[1] - width / 2 + 0.151f * width, + centerPoint[0] - width / 2 + 0.811f * width, centerPoint[1] - width / 2 + 0.156f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.806f * width, centerPoint[1] - width / 2 + 0.16f * width, + centerPoint[0] - width / 2 + 0.691f * width, centerPoint[1] - width / 2 + 0.238f * width, + centerPoint[0] - width / 2 + 0.628f * width, centerPoint[1] - width / 2 + 0.28f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.574f * width, centerPoint[1] - width / 2 + 0.25f * width, + centerPoint[0] - width / 2 + 0.515f * width, centerPoint[1] - width / 2 + 0.256f * width, + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.267f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.458f * width, centerPoint[1] - width / 2 + 0.278f * width, + centerPoint[0] - width / 2 + 0.425f * width, centerPoint[1] - width / 2 + 0.308f * width, + centerPoint[0] - width / 2 + 0.415f * width, centerPoint[1] - width / 2 + 0.322f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.406f * width, centerPoint[1] - width / 2 + 0.336f * width, + centerPoint[0] - width / 2 + 0.394f * width, centerPoint[1] - width / 2 + 0.353f * width, + centerPoint[0] - width / 2 + 0.385f * width, centerPoint[1] - width / 2 + 0.36f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.377f * width, centerPoint[1] - width / 2 + 0.367f * width, + centerPoint[0] - width / 2 + 0.362f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.362f * width, centerPoint[1] - width / 2 + 0.364f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.362f * width, centerPoint[1] - width / 2 + 0.364f * width, + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.375f * width, + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.375f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.359f * width, centerPoint[1] - width / 2 + 0.375f * width, + centerPoint[0] - width / 2 + 0.364f * width, centerPoint[1] - width / 2 + 0.376f * width, + centerPoint[0] - width / 2 + 0.367f * width, centerPoint[1] - width / 2 + 0.379f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.37f * width, centerPoint[1] - width / 2 + 0.382f * width, + centerPoint[0] - width / 2 + 0.373f * width, centerPoint[1] - width / 2 + 0.394f * width, + centerPoint[0] - width / 2 + 0.372f * width, centerPoint[1] - width / 2 + 0.402f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.372f * width, centerPoint[1] - width / 2 + 0.41f * width, + centerPoint[0] - width / 2 + 0.371f * width, centerPoint[1] - width / 2 + 0.417f * width, + centerPoint[0] - width / 2 + 0.362f * width, centerPoint[1] - width / 2 + 0.426f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.353f * width, centerPoint[1] - width / 2 + 0.436f * width, + centerPoint[0] - width / 2 + 0.318f * width, centerPoint[1] - width / 2 + 0.46f * width, + centerPoint[0] - width / 2 + 0.296f * width, centerPoint[1] - width / 2 + 0.47f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.273f * width, centerPoint[1] - width / 2 + 0.48f * width, + centerPoint[0] - width / 2 + 0.256f * width, centerPoint[1] - width / 2 + 0.478f * width, + centerPoint[0] - width / 2 + 0.245f * width, centerPoint[1] - width / 2 + 0.475f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.235f * width, centerPoint[1] - width / 2 + 0.473f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.457f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.23f * width, centerPoint[1] - width / 2 + 0.457f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.459f * width, + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.459f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.459f * width, + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.463f * width, + centerPoint[0] - width / 2 + 0.212f * width, centerPoint[1] - width / 2 + 0.469f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.213f * width, centerPoint[1] - width / 2 + 0.475f * width, + centerPoint[0] - width / 2 + 0.195f * width, centerPoint[1] - width / 2 + 0.485f * width, + centerPoint[0] - width / 2 + 0.178f * width, centerPoint[1] - width / 2 + 0.493f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.097f * width, centerPoint[1] - width / 2 + 0.531f * width, + centerPoint[0] - width / 2 + 0.078f * width, centerPoint[1] - width / 2 + 0.557f * width, + centerPoint[0] - width / 2 + 0.069f * width, centerPoint[1] - width / 2 + 0.57f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.069f * width, centerPoint[1] - width / 2 + 0.57f * width, + centerPoint[0] - width / 2 + 0.061f * width, centerPoint[1] - width / 2 + 0.568f * width, + centerPoint[0] - width / 2 + 0.056f * width, centerPoint[1] - width / 2 + 0.569f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.048f * width, centerPoint[1] - width / 2 + 0.581f * width, + centerPoint[0] - width / 2 + 0.029f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.03f * width, centerPoint[1] - width / 2 + 0.66f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.032f * width, centerPoint[1] - width / 2 + 0.714f * width, + centerPoint[0] - width / 2 + 0.069f * width, centerPoint[1] - width / 2 + 0.764f * width, + centerPoint[0] - width / 2 + 0.069f * width, centerPoint[1] - width / 2 + 0.764f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.069f * width, centerPoint[1] - width / 2 + 0.764f * width, + centerPoint[0] - width / 2 + 0.066f * width, centerPoint[1] - width / 2 + 0.767f * width, + centerPoint[0] - width / 2 + 0.065f * width, centerPoint[1] - width / 2 + 0.771f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.064f * width, centerPoint[1] - width / 2 + 0.774f * width, + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.799f * width, + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.799f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.085f * width, centerPoint[1] - width / 2 + 0.799f * width, + centerPoint[0] - width / 2 + 0.093f * width, centerPoint[1] - width / 2 + 0.809f * width, + centerPoint[0] - width / 2 + 0.093f * width, centerPoint[1] - width / 2 + 0.809f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.093f * width, centerPoint[1] - width / 2 + 0.809f * width, + centerPoint[0] - width / 2 + 0.094f * width, centerPoint[1] - width / 2 + 0.813f * width, + centerPoint[0] - width / 2 + 0.092f * width, centerPoint[1] - width / 2 + 0.813f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.089f * width, centerPoint[1] - width / 2 + 0.812f * width, + centerPoint[0] - width / 2 + 0.088f * width, centerPoint[1] - width / 2 + 0.816f * width, + centerPoint[0] - width / 2 + 0.091f * width, centerPoint[1] - width / 2 + 0.821f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.095f * width, centerPoint[1] - width / 2 + 0.826f * width, + centerPoint[0] - width / 2 + 0.106f * width, centerPoint[1] - width / 2 + 0.838f * width, + centerPoint[0] - width / 2 + 0.11f * width, centerPoint[1] - width / 2 + 0.836f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.114f * width, centerPoint[1] - width / 2 + 0.835f * width, + centerPoint[0] - width / 2 + 0.113f * width, centerPoint[1] - width / 2 + 0.828f * width, + centerPoint[0] - width / 2 + 0.115f * width, centerPoint[1] - width / 2 + 0.825f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.115f * width, centerPoint[1] - width / 2 + 0.825f * width, + centerPoint[0] - width / 2 + 0.121f * width, centerPoint[1] - width / 2 + 0.832f * width, + centerPoint[0] - width / 2 + 0.121f * width, centerPoint[1] - width / 2 + 0.832f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.121f * width, centerPoint[1] - width / 2 + 0.832f * width, + centerPoint[0] - width / 2 + 0.12f * width, centerPoint[1] - width / 2 + 0.836f * width, + centerPoint[0] - width / 2 + 0.12f * width, centerPoint[1] - width / 2 + 0.836f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.12f * width, centerPoint[1] - width / 2 + 0.836f * width, + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.867f * width, + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.867f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.151f * width, centerPoint[1] - width / 2 + 0.867f * width, + centerPoint[0] - width / 2 + 0.152f * width, centerPoint[1] - width / 2 + 0.87f * width, + centerPoint[0] - width / 2 + 0.154f * width, centerPoint[1] - width / 2 + 0.865f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.259f * width, centerPoint[1] - width / 2 + 0.941f * width, + centerPoint[0] - width / 2 + 0.317f * width, centerPoint[1] - width / 2 + 0.915f * width, + centerPoint[0] - width / 2 + 0.372f * width, centerPoint[1] - width / 2 + 0.888f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.426f * width, centerPoint[1] - width / 2 + 0.86f * width, + centerPoint[0] - width / 2 + 0.457f * width, centerPoint[1] - width / 2 + 0.781f * width, + centerPoint[0] - width / 2 + 0.467f * width, centerPoint[1] - width / 2 + 0.764f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.476f * width, centerPoint[1] - width / 2 + 0.748f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.75f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.75f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.75f * width, + centerPoint[0] - width / 2 + 0.499f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.499f * width, centerPoint[1] - width / 2 + 0.734f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.499f * width, centerPoint[1] - width / 2 + 0.734f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.735f * width, + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.735f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.491f * width, centerPoint[1] - width / 2 + 0.735f * width, + centerPoint[0] - width / 2 + 0.49f * width, centerPoint[1] - width / 2 + 0.723f * width, + centerPoint[0] - width / 2 + 0.49f * width, centerPoint[1] - width / 2 + 0.723f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.49f * width, centerPoint[1] - width / 2 + 0.723f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.722f * width, + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.722f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.493f * width, centerPoint[1] - width / 2 + 0.722f * width, + centerPoint[0] - width / 2 + 0.494f * width, centerPoint[1] - width / 2 + 0.712f * width, + centerPoint[0] - width / 2 + 0.496f * width, centerPoint[1] - width / 2 + 0.708f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.485f * width, centerPoint[1] - width / 2 + 0.706f * width, + centerPoint[0] - width / 2 + 0.477f * width, centerPoint[1] - width / 2 + 0.698f * width, + centerPoint[0] - width / 2 + 0.475f * width, centerPoint[1] - width / 2 + 0.695f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.473f * width, centerPoint[1] - width / 2 + 0.692f * width, + centerPoint[0] - width / 2 + 0.474f * width, centerPoint[1] - width / 2 + 0.682f * width, + centerPoint[0] - width / 2 + 0.48f * width, centerPoint[1] - width / 2 + 0.666f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.487f * width, centerPoint[1] - width / 2 + 0.65f * width, + centerPoint[0] - width / 2 + 0.518f * width, centerPoint[1] - width / 2 + 0.62f * width, + centerPoint[0] - width / 2 + 0.531f * width, centerPoint[1] - width / 2 + 0.608f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.543f * width, centerPoint[1] - width / 2 + 0.596f * width, + centerPoint[0] - width / 2 + 0.567f * width, centerPoint[1] - width / 2 + 0.59f * width, + centerPoint[0] - width / 2 + 0.576f * width, centerPoint[1] - width / 2 + 0.594f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.586f * width, centerPoint[1] - width / 2 + 0.599f * width, + centerPoint[0] - width / 2 + 0.592f * width, centerPoint[1] - width / 2 + 0.611f * width, + centerPoint[0] - width / 2 + 0.592f * width, centerPoint[1] - width / 2 + 0.611f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.592f * width, centerPoint[1] - width / 2 + 0.611f * width, + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.605f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.605f * width, + centerPoint[0] - width / 2 + 0.607f * width, centerPoint[1] - width / 2 + 0.603f * width, + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.596f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.608f * width, centerPoint[1] - width / 2 + 0.589f * width, + centerPoint[0] - width / 2 + 0.627f * width, centerPoint[1] - width / 2 + 0.576f * width, + centerPoint[0] - width / 2 + 0.659f * width, centerPoint[1] - width / 2 + 0.559f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.725f * width, centerPoint[1] - width / 2 + 0.526f * width, + centerPoint[0] - width / 2 + 0.737f * width, centerPoint[1] - width / 2 + 0.463f * width, + centerPoint[0] - width / 2 + 0.736f * width, centerPoint[1] - width / 2 + 0.447f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.746f * width, centerPoint[1] - width / 2 + 0.412f * width, + centerPoint[0] - width / 2 + 0.734f * width, centerPoint[1] - width / 2 + 0.378f * width, + centerPoint[0] - width / 2 + 0.726f * width, centerPoint[1] - width / 2 + 0.366f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.718f * width, centerPoint[1] - width / 2 + 0.354f * width, + centerPoint[0] - width / 2 + 0.695f * width, centerPoint[1] - width / 2 + 0.325f * width, + centerPoint[0] - width / 2 + 0.695f * width, centerPoint[1] - width / 2 + 0.325f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.695f * width, centerPoint[1] - width / 2 + 0.325f * width, + centerPoint[0] - width / 2 + 0.708f * width, centerPoint[1] - width / 2 + 0.306f * width, + centerPoint[0] - width / 2 + 0.714f * width, centerPoint[1] - width / 2 + 0.301f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.719f * width, centerPoint[1] - width / 2 + 0.297f * width, + centerPoint[0] - width / 2 + 0.803f * width, centerPoint[1] - width / 2 + 0.222f * width, + centerPoint[0] - width / 2 + 0.815f * width, centerPoint[1] - width / 2 + 0.214f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.819f * width, centerPoint[1] - width / 2 + 0.224f * width, + centerPoint[0] - width / 2 + 0.837f * width, centerPoint[1] - width / 2 + 0.221f * width, + centerPoint[0] - width / 2 + 0.843f * width, centerPoint[1] - width / 2 + 0.219f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.85f * width, centerPoint[1] - width / 2 + 0.217f * width, + centerPoint[0] - width / 2 + 0.868f * width, centerPoint[1] - width / 2 + 0.202f * width, + centerPoint[0] - width / 2 + 0.875f * width, centerPoint[1] - width / 2 + 0.197f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.883f * width, centerPoint[1] - width / 2 + 0.191f * width, + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.196f * width, + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.196f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.89f * width, centerPoint[1] - width / 2 + 0.196f * width, + centerPoint[0] - width / 2 + 0.902f * width, centerPoint[1] - width / 2 + 0.205f * width, + centerPoint[0] - width / 2 + 0.902f * width, centerPoint[1] - width / 2 + 0.205f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.902f * width, centerPoint[1] - width / 2 + 0.205f * width, + centerPoint[0] - width / 2 + 0.904f * width, centerPoint[1] - width / 2 + 0.21f * width, + centerPoint[0] - width / 2 + 0.907f * width, centerPoint[1] - width / 2 + 0.212f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.909f * width, centerPoint[1] - width / 2 + 0.214f * width, + centerPoint[0] - width / 2 + 0.927f * width, centerPoint[1] - width / 2 + 0.225f * width, + centerPoint[0] - width / 2 + 0.93f * width, centerPoint[1] - width / 2 + 0.224f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.932f * width, centerPoint[1] - width / 2 + 0.224f * width, + centerPoint[0] - width / 2 + 0.934f * width, centerPoint[1] - width / 2 + 0.222f * width, + centerPoint[0] - width / 2 + 0.938f * width, centerPoint[1] - width / 2 + 0.217f * width + ); + path.cubicTo( + centerPoint[0] - width / 2 + 0.967f * width, centerPoint[1] - width / 2 + 0.226f * width, + centerPoint[0] - width / 2 + 0.971f * width, centerPoint[1] - width / 2 + 0.202f * width, + centerPoint[0] - width / 2 + 0.97f * width, centerPoint[1] - width / 2 + 0.193f * width + ); + return path; + + } + +} diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1 @@ +/build diff --git a/sample/build.gradle b/sample/build.gradle new file mode 100644 index 0000000..6b1cefc --- /dev/null +++ b/sample/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion as Integer + buildToolsVersion rootProject.ext.buildToolsVersion as String + + defaultConfig { + applicationId "jp.co.recruit_lifestyle.sample" + minSdkVersion rootProject.ext.minSdkVersion as Integer + targetSdkVersion rootProject.ext.targetSdkVersion as Integer + versionCode rootProject.ext.versionCode as Integer + versionName rootProject.ext.versionName as String + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile 'com.android.support:appcompat-v7:22.2.0' + compile project(':library') +} \ No newline at end of file diff --git a/sample/proguard-rules.pro b/sample/proguard-rules.pro new file mode 100644 index 0000000..ccf7e55 --- /dev/null +++ b/sample/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/amyu/opt/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 *; +#} diff --git a/sample/src/androidTest/java/jp/co/recruit_lifesytle/sample/ApplicationTest.java b/sample/src/androidTest/java/jp/co/recruit_lifesytle/sample/ApplicationTest.java new file mode 100644 index 0000000..d40d213 --- /dev/null +++ b/sample/src/androidTest/java/jp/co/recruit_lifesytle/sample/ApplicationTest.java @@ -0,0 +1,13 @@ +package jp.co.recruit_lifesytle.sample; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml new file mode 100644 index 0000000..19e8ed8 --- /dev/null +++ b/sample/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/sample/src/main/java/jp/co/recruit_lifesytle/sample/MainActivity.java b/sample/src/main/java/jp/co/recruit_lifesytle/sample/MainActivity.java new file mode 100644 index 0000000..174806d --- /dev/null +++ b/sample/src/main/java/jp/co/recruit_lifesytle/sample/MainActivity.java @@ -0,0 +1,36 @@ +package jp.co.recruit_lifesytle.sample; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import jp.co.recruit_lifestyle.android.widget.ColoringLoadingView; + +public class MainActivity extends AppCompatActivity { + + @Override protected void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + initView(); + + } + + private void initView() { + final ColoringLoadingView loadingView = (ColoringLoadingView) findViewById(R.id.main_loading); + loadingView.setCharacter(ColoringLoadingView.Character.BUTTERFLY); + loadingView.setColoringColor(0xFFFF1744); + + findViewById(R.id.main_start_button).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + loadingView.setVisibility(View.VISIBLE); + loadingView.startDrawAnimation(); + } + }); + } + +} diff --git a/sample/src/main/res/drawable/toolbar_dropshadow.xml b/sample/src/main/res/drawable/toolbar_dropshadow.xml new file mode 100644 index 0000000..10804dc --- /dev/null +++ b/sample/src/main/res/drawable/toolbar_dropshadow.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..5a29347 --- /dev/null +++ b/sample/src/main/res/layout/activity_main.xml @@ -0,0 +1,46 @@ + + + + + + + + + + +