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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/menu/menu_main.xml b/sample/src/main/res/menu/menu_main.xml
new file mode 100644
index 0000000..24672e5
--- /dev/null
+++ b/sample/src/main/res/menu/menu_main.xml
@@ -0,0 +1,9 @@
+
diff --git a/sample/src/main/res/mipmap-hdpi/ic_launcher.png b/sample/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
Binary files /dev/null and b/sample/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-mdpi/ic_launcher.png b/sample/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
Binary files /dev/null and b/sample/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-xhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
Binary files /dev/null and b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
Binary files /dev/null and b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/values-v21/styles.xml b/sample/src/main/res/values-v21/styles.xml
new file mode 100644
index 0000000..816e419
--- /dev/null
+++ b/sample/src/main/res/values-v21/styles.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/values-w820dp/dimens.xml b/sample/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 0000000..63fc816
--- /dev/null
+++ b/sample/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+
+
+ 64dp
+
diff --git a/sample/src/main/res/values/colors.xml b/sample/src/main/res/values/colors.xml
new file mode 100644
index 0000000..5717a78
--- /dev/null
+++ b/sample/src/main/res/values/colors.xml
@@ -0,0 +1,5 @@
+
+
+ #FF5722
+ #E64A19
+
\ No newline at end of file
diff --git a/sample/src/main/res/values/dimens.xml b/sample/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..acf94cc
--- /dev/null
+++ b/sample/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 16dp
+ 16dp
+
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
new file mode 100644
index 0000000..09eb2fe
--- /dev/null
+++ b/sample/src/main/res/values/strings.xml
@@ -0,0 +1,6 @@
+
+ ColoringLoading
+
+ Hello world!
+ Settings
+
diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml
new file mode 100644
index 0000000..1355d09
--- /dev/null
+++ b/sample/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/sc/animation.gif b/sc/animation.gif
new file mode 100644
index 0000000..5b23415
Binary files /dev/null and b/sc/animation.gif differ
diff --git a/sc/ill1.png b/sc/ill1.png
new file mode 100644
index 0000000..8ff18c8
Binary files /dev/null and b/sc/ill1.png differ
diff --git a/sc/ill2.png b/sc/ill2.png
new file mode 100644
index 0000000..4bf2f3f
Binary files /dev/null and b/sc/ill2.png differ
diff --git a/sc/ill3.png b/sc/ill3.png
new file mode 100644
index 0000000..a1f2795
Binary files /dev/null and b/sc/ill3.png differ
diff --git a/sc/ill4.png b/sc/ill4.png
new file mode 100644
index 0000000..0fa57ce
Binary files /dev/null and b/sc/ill4.png differ
diff --git a/sc/sc1.png b/sc/sc1.png
new file mode 100644
index 0000000..031a164
Binary files /dev/null and b/sc/sc1.png differ
diff --git a/sc/sc10.png b/sc/sc10.png
new file mode 100644
index 0000000..b11dfdd
Binary files /dev/null and b/sc/sc10.png differ
diff --git a/sc/sc11.png b/sc/sc11.png
new file mode 100644
index 0000000..2e550b9
Binary files /dev/null and b/sc/sc11.png differ
diff --git a/sc/sc12.png b/sc/sc12.png
new file mode 100644
index 0000000..ca916c1
Binary files /dev/null and b/sc/sc12.png differ
diff --git a/sc/sc2.png b/sc/sc2.png
new file mode 100644
index 0000000..b89adf0
Binary files /dev/null and b/sc/sc2.png differ
diff --git a/sc/sc3.png b/sc/sc3.png
new file mode 100644
index 0000000..b573711
Binary files /dev/null and b/sc/sc3.png differ
diff --git a/sc/sc4.png b/sc/sc4.png
new file mode 100644
index 0000000..b296d8c
Binary files /dev/null and b/sc/sc4.png differ
diff --git a/sc/sc5.png b/sc/sc5.png
new file mode 100644
index 0000000..13786f7
Binary files /dev/null and b/sc/sc5.png differ
diff --git a/sc/sc6.png b/sc/sc6.png
new file mode 100644
index 0000000..4b9486d
Binary files /dev/null and b/sc/sc6.png differ
diff --git a/sc/sc7.png b/sc/sc7.png
new file mode 100644
index 0000000..ee40bb7
Binary files /dev/null and b/sc/sc7.png differ
diff --git a/sc/sc8.png b/sc/sc8.png
new file mode 100644
index 0000000..a63bf97
Binary files /dev/null and b/sc/sc8.png differ
diff --git a/sc/sc9.png b/sc/sc9.png
new file mode 100644
index 0000000..31e3c12
Binary files /dev/null and b/sc/sc9.png differ
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..9053c35
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':library', ':sample'