[
  {
    "path": ".idea/.name",
    "content": "bezierCurve"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <option name=\"DEFAULT_COMPILER\" value=\"Javac\" />\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\n  <settings default=\"\" />\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" useUTFGuessing=\"true\" native2AsciiForPropertiesFiles=\"false\" />\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points version=\"2.0\" />\n  </component>\n  <component name=\"IdProvider\" IDEtalkID=\"6B8E0740783ED4A6A1DAA8231648FFE4\" />\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_6\" assert-keyword=\"true\" jdk-15=\"true\" project-jdk-name=\"1.7\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/out\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/bezierCurve.iml\" filepath=\"$PROJECT_DIR$/bezierCurve.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/scopes/scope_settings.xml",
    "content": "<component name=\"DependencyValidationManager\">\n  <state>\n    <option name=\"SKIP_IMPORT_STATEMENTS\" value=\"false\" />\n  </state>\n</component>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"AndroidConfiguredLogFilters\">\n    <filters>\n      <filter>\n        <option name=\"name\" value=\"app: com.example.bezierCurve\" />\n        <option name=\"packageNamePattern\" value=\"com.example.bezierCurve\" />\n      </filter>\n    </filters>\n  </component>\n  <component name=\"AndroidLayouts\">\n    <shared>\n      <config />\n    </shared>\n  </component>\n  <component name=\"AndroidLogFilters\">\n    <option name=\"TOOL_WINDOW_CUSTOM_FILTER\" value=\"tag\" />\n    <option name=\"TOOL_WINDOW_LOG_LEVEL\" value=\"ERROR\" />\n    <option name=\"TOOL_WINDOW_CONFIGURED_FILTER\" value=\"app: com.example.bezierCurve\" />\n  </component>\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"7d0f6ae4-0711-4b44-9119-2f4a7af0d77a\" name=\"Default\" comment=\"\" />\n    <ignored path=\"bezierCurve.iws\" />\n    <ignored path=\".idea/workspace.xml\" />\n    <ignored path=\"$PROJECT_DIR$/out/\" />\n    <ignored path=\".idea/dataSources.local.xml\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"TRACKING_ENABLED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"ChangesViewManager\" flattened_view=\"true\" show_ignored=\"false\" />\n  <component name=\"CreatePatchCommitExecutor\">\n    <option name=\"PATCH_PATH\" value=\"\" />\n  </component>\n  <component name=\"DaemonCodeAnalyzer\">\n    <disable_hints />\n  </component>\n  <component name=\"ExecutionTargetManager\" SELECTED_TARGET=\"default_target\" />\n  <component name=\"FavoritesManager\">\n    <favorites_list name=\"bezierCurve\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf>\n      <file leaf-file-name=\"MyActivity.java\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"209\" max-vertical-offset=\"2299\">\n              <caret line=\"27\" column=\"29\" selection-start-line=\"27\" selection-start-column=\"29\" selection-end-line=\"27\" selection-end-column=\"29\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"AndroidManifest.xml\" pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.5588235\" vertical-offset=\"0\" max-vertical-offset=\"494\">\n              <caret line=\"11\" column=\"50\" selection-start-line=\"11\" selection-start-column=\"50\" selection-end-line=\"11\" selection-end-column=\"50\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"Pager.java\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n              <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\" />\n        <option value=\"$PROJECT_DIR$/AndroidManifest.xml\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"JsGulpfileManager\">\n    <detection-done>true</detection-done>\n  </component>\n  <component name=\"ProjectFrameBounds\">\n    <option name=\"width\" value=\"1366\" />\n    <option name=\"height\" value=\"738\" />\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <OptionsSetting value=\"true\" id=\"Undo Check Out\" />\n    <OptionsSetting value=\"true\" id=\"Get Latest Version\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator currentView=\"ProjectPane\" proportions=\"\" version=\"1\">\n      <flattenPackages />\n      <showMembers />\n      <showModules />\n      <showLibraryContents />\n      <hideEmptyPackages />\n      <abbreviatePackageNames />\n      <autoscrollToSource />\n      <autoscrollFromSource />\n      <sortByType />\n    </navigator>\n    <panes>\n      <pane id=\"Scope\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"src\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"res\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"res\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"layout\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"bezierCurve\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"res\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"drawable-mdpi\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n        </subPane>\n      </pane>\n      <pane id=\"PackagesPane\" />\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"GoToClass.includeLibraries\" value=\"false\" />\n    <property name=\"GoToClass.toSaveIncludeLibraries\" value=\"false\" />\n    <property name=\"GoToFile.includeJavaFiles\" value=\"false\" />\n    <property name=\"MemberChooser.sorted\" value=\"false\" />\n    <property name=\"MemberChooser.showClasses\" value=\"true\" />\n    <property name=\"MemberChooser.copyJavadoc\" value=\"false\" />\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"recentsLimit\" value=\"5\" />\n    <property name=\"restartRequiresConfirmation\" value=\"true\" />\n    <property name=\"ANDROID_EXTENDED_DEVICE_CHOOSER_SERIALS\" value=\"192.168.56.101:5555\" />\n    <property name=\"ANDROID_EXTENDED_DEVICE_CHOOSER_AVD\" value=\"android4.4\" />\n    <property name=\"FullScreen\" value=\"false\" />\n  </component>\n  <component name=\"RecentsManager\">\n    <key name=\"CopyFile.RECENT_KEYS\">\n      <recent name=\"F:\\android_space\\bezierCurve\\res\\drawable-mdpi\" />\n    </key>\n  </component>\n  <component name=\"RunManager\" selected=\"Android Application.bezierCurve\">\n    <configuration default=\"true\" type=\"JUnit\" factoryName=\"JUnit\">\n      <extension name=\"coverage\" enabled=\"false\" merge=\"false\" sample_coverage=\"true\" runner=\"idea\" />\n      <module name=\"\" />\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <option name=\"PACKAGE_NAME\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"METHOD_NAME\" />\n      <option name=\"TEST_OBJECT\" value=\"class\" />\n      <option name=\"VM_PARAMETERS\" value=\"-ea\" />\n      <option name=\"PARAMETERS\" />\n      <option name=\"WORKING_DIRECTORY\" value=\"$MODULE_DIR$\" />\n      <option name=\"ENV_VARIABLES\" />\n      <option name=\"PASS_PARENT_ENVS\" value=\"true\" />\n      <option name=\"TEST_SEARCH_SCOPE\">\n        <value defaultName=\"singleModule\" />\n      </option>\n      <envs />\n      <patterns />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"Remote\" factoryName=\"Remote\">\n      <option name=\"USE_SOCKET_TRANSPORT\" value=\"true\" />\n      <option name=\"SERVER_MODE\" value=\"false\" />\n      <option name=\"SHMEM_ADDRESS\" value=\"javadebug\" />\n      <option name=\"HOST\" value=\"localhost\" />\n      <option name=\"PORT\" value=\"5005\" />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"AndroidRunConfigurationType\" factoryName=\"Android Application\">\n      <module name=\"\" />\n      <option name=\"ACTIVITY_CLASS\" value=\"\" />\n      <option name=\"MODE\" value=\"default_activity\" />\n      <option name=\"DEPLOY\" value=\"true\" />\n      <option name=\"ARTIFACT_NAME\" value=\"\" />\n      <option name=\"TARGET_SELECTION_MODE\" value=\"EMULATOR\" />\n      <option name=\"USE_LAST_SELECTED_DEVICE\" value=\"false\" />\n      <option name=\"PREFERRED_AVD\" value=\"\" />\n      <option name=\"USE_COMMAND_LINE\" value=\"true\" />\n      <option name=\"COMMAND_LINE\" value=\"\" />\n      <option name=\"WIPE_USER_DATA\" value=\"false\" />\n      <option name=\"DISABLE_BOOT_ANIMATION\" value=\"false\" />\n      <option name=\"NETWORK_SPEED\" value=\"full\" />\n      <option name=\"NETWORK_LATENCY\" value=\"none\" />\n      <option name=\"CLEAR_LOGCAT\" value=\"false\" />\n      <option name=\"SHOW_LOGCAT_AUTOMATICALLY\" value=\"true\" />\n      <option name=\"FILTER_LOGCAT_AUTOMATICALLY\" value=\"true\" />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"#org.jetbrains.idea.devkit.run.PluginConfigurationType\" factoryName=\"Plugin\">\n      <module name=\"\" />\n      <option name=\"VM_PARAMETERS\" value=\"-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea\" />\n      <option name=\"PROGRAM_PARAMETERS\" />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"Applet\" factoryName=\"Applet\">\n      <module name=\"\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"HTML_FILE_NAME\" />\n      <option name=\"HTML_USED\" value=\"false\" />\n      <option name=\"WIDTH\" value=\"400\" />\n      <option name=\"HEIGHT\" value=\"300\" />\n      <option name=\"POLICY_FILE\" value=\"$APPLICATION_HOME_DIR$/bin/appletviewer.policy\" />\n      <option name=\"VM_PARAMETERS\" />\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"Application\" factoryName=\"Application\">\n      <extension name=\"coverage\" enabled=\"false\" merge=\"false\" sample_coverage=\"true\" runner=\"idea\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"VM_PARAMETERS\" />\n      <option name=\"PROGRAM_PARAMETERS\" />\n      <option name=\"WORKING_DIRECTORY\" value=\"$PROJECT_DIR$\" />\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <option name=\"ENABLE_SWING_INSPECTOR\" value=\"false\" />\n      <option name=\"ENV_VARIABLES\" />\n      <option name=\"PASS_PARENT_ENVS\" value=\"true\" />\n      <module name=\"\" />\n      <envs />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"TestNG\" factoryName=\"TestNG\">\n      <extension name=\"coverage\" enabled=\"false\" merge=\"false\" sample_coverage=\"true\" runner=\"idea\" />\n      <module name=\"\" />\n      <option name=\"ALTERNATIVE_JRE_PATH_ENABLED\" value=\"false\" />\n      <option name=\"ALTERNATIVE_JRE_PATH\" />\n      <option name=\"SUITE_NAME\" />\n      <option name=\"PACKAGE_NAME\" />\n      <option name=\"MAIN_CLASS_NAME\" />\n      <option name=\"METHOD_NAME\" />\n      <option name=\"GROUP_NAME\" />\n      <option name=\"TEST_OBJECT\" value=\"CLASS\" />\n      <option name=\"VM_PARAMETERS\" value=\"-ea\" />\n      <option name=\"PARAMETERS\" />\n      <option name=\"WORKING_DIRECTORY\" value=\"$PROJECT_DIR$\" />\n      <option name=\"OUTPUT_DIRECTORY\" />\n      <option name=\"ANNOTATION_TYPE\" />\n      <option name=\"ENV_VARIABLES\" />\n      <option name=\"PASS_PARENT_ENVS\" value=\"true\" />\n      <option name=\"TEST_SEARCH_SCOPE\">\n        <value defaultName=\"singleModule\" />\n      </option>\n      <option name=\"USE_DEFAULT_REPORTERS\" value=\"false\" />\n      <option name=\"PROPERTIES_FILE\" />\n      <envs />\n      <properties />\n      <listeners />\n      <method />\n    </configuration>\n    <configuration default=\"false\" name=\"bezierCurve\" type=\"AndroidRunConfigurationType\" factoryName=\"Android Application\">\n      <module name=\"bezierCurve\" />\n      <option name=\"ACTIVITY_CLASS\" value=\"\" />\n      <option name=\"MODE\" value=\"default_activity\" />\n      <option name=\"DEPLOY\" value=\"true\" />\n      <option name=\"ARTIFACT_NAME\" value=\"\" />\n      <option name=\"TARGET_SELECTION_MODE\" value=\"SHOW_DIALOG\" />\n      <option name=\"USE_LAST_SELECTED_DEVICE\" value=\"false\" />\n      <option name=\"PREFERRED_AVD\" value=\"\" />\n      <option name=\"USE_COMMAND_LINE\" value=\"true\" />\n      <option name=\"COMMAND_LINE\" value=\"\" />\n      <option name=\"WIPE_USER_DATA\" value=\"false\" />\n      <option name=\"DISABLE_BOOT_ANIMATION\" value=\"false\" />\n      <option name=\"NETWORK_SPEED\" value=\"full\" />\n      <option name=\"NETWORK_LATENCY\" value=\"none\" />\n      <option name=\"CLEAR_LOGCAT\" value=\"false\" />\n      <option name=\"SHOW_LOGCAT_AUTOMATICALLY\" value=\"true\" />\n      <option name=\"FILTER_LOGCAT_AUTOMATICALLY\" value=\"true\" />\n      <RunnerSettings RunnerId=\"AndroidDebugRunner\" />\n      <ConfigurationWrapper RunnerId=\"AndroidDebugRunner\" />\n      <method />\n    </configuration>\n    <list size=\"1\">\n      <item index=\"0\" class=\"java.lang.String\" itemvalue=\"Android Application.bezierCurve\" />\n    </list>\n  </component>\n  <component name=\"ShelveChangesManager\" show_recycled=\"false\" />\n  <component name=\"SliceManager\">\n    <option name=\"analysisUIOptions\">\n      <AnalysisUIOptions />\n    </option>\n  </component>\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"7d0f6ae4-0711-4b44-9119-2f4a7af0d77a\" name=\"Default\" comment=\"\" />\n      <created>1439173802209</created>\n      <option name=\"number\" value=\"Default\" />\n      <updated>1439173802209</updated>\n      <workItem from=\"1439173803575\" duration=\"3034000\" />\n      <workItem from=\"1439192244658\" duration=\"381000\" />\n      <workItem from=\"1439193308877\" duration=\"4548000\" />\n      <workItem from=\"1439248442767\" duration=\"4001000\" />\n      <workItem from=\"1439296780871\" duration=\"1837000\" />\n      <workItem from=\"1439306234189\" duration=\"765000\" />\n      <workItem from=\"1439337461904\" duration=\"1182000\" />\n      <workItem from=\"1439429853573\" duration=\"1190000\" />\n      <workItem from=\"1439441047638\" duration=\"19000\" />\n    </task>\n    <servers />\n  </component>\n  <component name=\"TimeTrackingManager\">\n    <option name=\"totallyTimeSpent\" value=\"16957000\" />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"0\" y=\"0\" width=\"1366\" height=\"738\" extended-state=\"0\" />\n    <editor active=\"true\" />\n    <layout>\n      <window_info id=\"Palette\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"IDEtalk\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Build Variants\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"0\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Commander\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"SLIDING\" type=\"SLIDING\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"6\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Event Log\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.32852563\" sideWeight=\"0.5\" order=\"0\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Application Servers\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Maven Projects\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Designer\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Database\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Structure\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Ant Build\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"UI Designer\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Debug\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"12\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Changes\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"TODO\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"15\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Messages\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Palette&#9;\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Version Control\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Run\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.32905295\" sideWeight=\"0.5\" order=\"11\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Terminal\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Android\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" weight=\"0.33717105\" sideWeight=\"0.5\" order=\"6\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Project\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" weight=\"0.25267994\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"Memory Monitor\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"IDEtalk Messages\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"8\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Favorites\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"3\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Cvs\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"13\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Message\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"9\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Hierarchy\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"8\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"Inspection\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"14\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Preview\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Find\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"10\" side_tool=\"false\" content_ui=\"tabs\" />\n    </layout>\n  </component>\n  <component name=\"Vcs.Log.UiProperties\">\n    <option name=\"RECENTLY_FILTERED_USER_GROUPS\">\n      <collection />\n    </option>\n    <option name=\"RECENTLY_FILTERED_BRANCH_GROUPS\">\n      <collection />\n    </option>\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"VcsManagerConfiguration\">\n    <option name=\"myTodoPanelSettings\">\n      <TodoPanelSettings />\n    </option>\n  </component>\n  <component name=\"XDebuggerManager\">\n    <breakpoint-manager />\n    <watches-manager />\n  </component>\n  <component name=\"antWorkspaceConfiguration\">\n    <option name=\"IS_AUTOSCROLL_TO_SOURCE\" value=\"false\" />\n    <option name=\"FILTER_TARGETS\" value=\"false\" />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"209\" max-vertical-offset=\"2299\">\n          <caret line=\"27\" column=\"29\" selection-start-line=\"27\" selection-start-column=\"29\" selection-end-line=\"27\" selection-end-column=\"29\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"494\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"475\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"475\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"475\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"475\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"475\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1419\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1609\" max-vertical-offset=\"2299\">\n          <caret line=\"103\" column=\"26\" selection-start-line=\"103\" selection-start-column=\"17\" selection-end-line=\"103\" selection-end-column=\"26\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"8987\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1609\" max-vertical-offset=\"2299\">\n          <caret line=\"103\" column=\"26\" selection-start-line=\"103\" selection-start-column=\"17\" selection-end-line=\"103\" selection-end-column=\"26\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"8987\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/Pager.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"1424\" max-vertical-offset=\"8987\">\n          <caret line=\"87\" column=\"20\" selection-start-line=\"87\" selection-start-column=\"12\" selection-end-line=\"87\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/src/com/example/bezierCurve/MyActivity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"2299\">\n          <caret line=\"27\" column=\"29\" selection-start-line=\"27\" selection-start-column=\"29\" selection-end-line=\"27\" selection-end-column=\"29\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/AndroidManifest.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.5588235\" vertical-offset=\"0\" max-vertical-offset=\"494\">\n          <caret line=\"11\" column=\"50\" selection-start-line=\"11\" selection-start-column=\"50\" selection-end-line=\"11\" selection-end-column=\"50\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n  </component>\n</project>"
  },
  {
    "path": "AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.example.bezierCurve\"\n          android:versionCode=\"1\"\n          android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"8\"/>\n    <application\n            android:label=\"@string/app_name\"\n            android:icon=\"@drawable/ic_launcher\"\n            android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\">\n        <activity android:name=\"MyActivity\"\n                  android:label=\"@string/app_name\"\n                android:screenOrientation=\"landscape\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "README.md",
    "content": "### **成果物**\n\n![result](https://github.com/skypanda100/BezierCurve/blob/master/wiki/result.gif)\n"
  },
  {
    "path": "ant.properties",
    "content": "# This file is used to override default values used by the Ant build system.\n#\n# This file must be checked into Version Control Systems, as it is\n# integral to the build system of your project.\n\n# This file is only used by the Ant script.\n\n# You can use this to override default values such as\n#  'source.dir' for the location of your java source folder and\n#  'out.dir' for the location of your output folder.\n\n# You can also use it define how the release builds are signed by declaring\n# the following properties:\n#  'key.store' for the location of your keystore and\n#  'key.alias' for the name of the key to use.\n# The password will be asked during the build when you use the 'release' target.\n\n"
  },
  {
    "path": "bezierCurve.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"android\" name=\"Android\">\n      <configuration />\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <sourceFolder url=\"file://$MODULE_DIR$/gen\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src\" isTestSource=\"false\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 20 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>"
  },
  {
    "path": "build.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project name=\"bezierCurve\" default=\"help\">\n\n    <!-- The local.properties file is created and updated by the 'android' tool.\n         It contains the path to the SDK. It should *NOT* be checked into\n         Version Control Systems. -->\n    <property file=\"local.properties\"/>\n\n    <!-- The ant.properties file can be created by you. It is only edited by the\n         'android' tool to add properties to it.\n         This is the place to change some Ant specific build properties.\n         Here are some properties you may want to change/update:\n\n         source.dir\n             The name of the source directory. Default is 'src'.\n         out.dir\n             The name of the output directory. Default is 'bin'.\n\n         For other overridable properties, look at the beginning of the rules\n         files in the SDK, at tools/ant/build.xml\n\n         Properties related to the SDK location or the project target should\n         be updated using the 'android' tool with the 'update' action.\n\n         This file is an integral part of the build system for your\n         application and should be checked into Version Control Systems.\n\n         -->\n    <property file=\"ant.properties\"/>\n\n    <!-- if sdk.dir was not set from one of the property file, then\n         get it from the ANDROID_HOME env var.\n         This must be done before we load project.properties since\n         the proguard config can use sdk.dir -->\n    <property environment=\"env\"/>\n    <condition property=\"sdk.dir\" value=\"${env.ANDROID_HOME}\">\n        <isset property=\"env.ANDROID_HOME\"/>\n    </condition>\n\n    <!-- The project.properties file is created and updated by the 'android'\n         tool, as well as ADT.\n\n         This contains project specific properties such as project target, and library\n         dependencies. Lower level build properties are stored in ant.properties\n         (or in .classpath for Eclipse projects).\n\n         This file is an integral part of the build system for your\n         application and should be checked into Version Control Systems. -->\n    <loadproperties srcFile=\"project.properties\"/>\n\n    <!-- quick check on sdk.dir -->\n    <fail\n            message=\"sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable.\"\n            unless=\"sdk.dir\"\n            />\n\n    <!--\n        Import per project custom build rules if present at the root of the project.\n        This is the place to put custom intermediary targets such as:\n            -pre-build\n            -pre-compile\n            -post-compile (This is typically used for code obfuscation.\n                           Compiled code location: ${out.classes.absolute.dir}\n                           If this is not done in place, override ${out.dex.input.absolute.dir})\n            -post-package\n            -post-build\n            -pre-clean\n    -->\n    <import file=\"custom_rules.xml\" optional=\"true\"/>\n\n    <!-- Import the actual build file.\n\n         To customize existing targets, there are two options:\n         - Customize only one target:\n             - copy/paste the target into this file, *before* the\n               <import> task.\n             - customize it to your needs.\n         - Customize the whole content of build.xml\n             - copy/paste the content of the rules files (minus the top node)\n               into this file, replacing the <import> task.\n             - customize to your needs.\n\n         ***********************\n         ****** IMPORTANT ******\n         ***********************\n         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,\n         in order to avoid having your file be overridden by tools such as \"android update project\"\n    -->\n    <!-- version-tag: 1 -->\n    <import file=\"${sdk.dir}/tools/ant/build.xml\"/>\n\n</project>\n"
  },
  {
    "path": "local.properties",
    "content": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# This file must *NOT* be checked into Version Control Systems,\n# as it contains information specific to your local configuration.\n\n# location of the SDK. This is only used by Ant\n# For customization when using a Version Control System, please read the\n# header note.\nsdk.dir=F:\\\\android_eclipse_sdk\\\\adt-bundle-windows-x86_64-20140702\\\\sdk\n"
  },
  {
    "path": "proguard-project.txt",
    "content": "# To enable ProGuard in your project, edit project.properties\n# to define the proguard.config property as described in that file.\n#\n# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in ${sdk.dir}/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the ProGuard\n# include property in project.properties.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "project.properties",
    "content": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# This file must be checked in Version Control Systems.\n#\n# To customize properties used by the Ant build system edit\n# \"ant.properties\", and override values to adapt the script to your\n# project structure.\n#\n# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):\n#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt\n\n# Project target.\ntarget=android-20\n"
  },
  {
    "path": "res/layout/main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<FrameLayout\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n</FrameLayout>"
  },
  {
    "path": "res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\">bezierCurve</string>\n</resources>\n"
  },
  {
    "path": "src/com/example/bezierCurve/MyActivity.java",
    "content": "package com.example.bezierCurve;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.content.pm.ApplicationInfo;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.Matrix;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.DisplayMetrics;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\n\nimport java.io.InputStream;\n\npublic class MyActivity extends Activity {\n    private Pager pager;\n    private PagerFactory pagerFactory;\n    private Bitmap currentBitmap, mCurPageBitmap, mNextPageBitmap;\n    private Canvas mCurPageCanvas, mNextPageCanvas;\n    private static final String[] pages = {\"one\", \"two\", \"three\"};\n    private int screenWidth;\n    private int screenHeight;\n\n    /**\n     * Called when the activity is first created.\n     */\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.main);\n\n        initView();\n    }\n\n    private void initView() {\n\n        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();\n        screenWidth = displayMetrics.widthPixels;\n        screenHeight = displayMetrics.heightPixels;\n        pager = new Pager(this, screenWidth, screenHeight);\n\n        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);\n        addContentView(pager, layoutParams);\n\n        mCurPageBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);\n        mNextPageBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);\n\n        mCurPageCanvas = new Canvas(mCurPageBitmap);\n        mNextPageCanvas = new Canvas(mNextPageBitmap);\n        pagerFactory = new PagerFactory(getApplicationContext());\n\n        pager.setBitmaps(mCurPageBitmap, mCurPageBitmap);\n        loadImage(mCurPageCanvas, 0);\n\n        pager.setOnTouchListener(new View.OnTouchListener() {\n\n            private int count = pages.length;\n            private int currentIndex = 0;\n            private int lastIndex = 0;\n            private Bitmap lastBitmap = null;\n\n            @Override\n            public boolean onTouch(View v, MotionEvent e) {\n                boolean ret = false;\n                if (v == pager) {\n                    if (e.getAction() == MotionEvent.ACTION_DOWN) {\n                        pager.calcCornerXY(e.getX(), e.getY());\n\n                        lastBitmap = currentBitmap;\n                        lastIndex = currentIndex;\n\n                        pagerFactory.onDraw(mCurPageCanvas, currentBitmap);\n                        if (pager.DragToRight()) {    // 向右滑动，显示前一页\n                            if (currentIndex == 0) return false;\n                            pager.abortAnimation();\n                            currentIndex--;\n                            loadImage(mNextPageCanvas, currentIndex);\n                        } else {        // 向左滑动，显示后一页\n                            if (currentIndex + 1 == count) return false;\n                            pager.abortAnimation();\n                            currentIndex++;\n                            loadImage(mNextPageCanvas, currentIndex);\n                        }\n                    } else if (e.getAction() == MotionEvent.ACTION_MOVE) {\n\n                    } else if (e.getAction() == MotionEvent.ACTION_UP) {\n                        if (!pager.canDragOver()) {\n                            currentIndex = lastIndex;\n                            currentBitmap = lastBitmap;\n                        }\n                    }\n\n                    ret = pager.doTouchEvent(e);\n                    return ret;\n                }\n                return false;\n            }\n        });\n    }\n\n    private void loadImage(final Canvas canvas, int index) {\n        Bitmap bitmap = getBitmap(pages[index]);\n        currentBitmap = bitmap;\n        pagerFactory.onDraw(canvas, bitmap);\n        pager.setBitmaps(mCurPageBitmap, mNextPageBitmap);\n        pager.postInvalidate();\n    }\n\n    private Bitmap getBitmap(String name) {\n        BitmapFactory.Options opt = new BitmapFactory.Options();\n        opt.inPreferredConfig = Bitmap.Config.RGB_565;\n        opt.inPurgeable = true;\n        opt.inInputShareable = true;\n        ApplicationInfo appInfo = getApplicationInfo();\n        int resID = getResources().getIdentifier(name, \"drawable\", appInfo.packageName);\n        InputStream is = getResources().openRawResource(resID);\n        Bitmap tempBitmap = BitmapFactory.decodeStream(is, null, opt);\n        int width = tempBitmap.getWidth();\n        int height = tempBitmap.getHeight();\n        Matrix matrix = new Matrix();\n        matrix.postScale(((float)screenWidth)/width, ((float)screenHeight)/height);\n        Bitmap bitmap = Bitmap.createBitmap(tempBitmap, 0, 0, width, height, matrix, true);\n        return bitmap;\n    }\n}\n"
  },
  {
    "path": "src/com/example/bezierCurve/Pager.java",
    "content": "package com.example.bezierCurve;\n\nimport android.content.Context;\nimport android.graphics.*;\nimport android.graphics.drawable.GradientDrawable;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.widget.Scroller;\n\npublic class Pager extends View {\n\n\tprivate int mWidth = 1280;\n\tprivate int mHeight = 768;\n\tprivate int mCornerX = 0; // 拖拽点对应的页脚\n\tprivate int mCornerY = 0;\n\tprivate Path mPath0;\n\tprivate Path mPath1;\n\tBitmap mCurPageBitmap = null; // 当前页\n\tBitmap mNextPageBitmap = null;\n\n\tPointF mTouch = new PointF(); \t\t// 拖拽点\n\tPointF mBezierStart1 = new PointF(); \t\t// 贝塞尔曲线起始点\n\tPointF mBezierControl1 = new PointF(); \t\t// 贝塞尔曲线控制点\n\tPointF mBeziervertex1 = new PointF(); \t\t// 贝塞尔曲线顶点\n\tPointF mBezierEnd1 = new PointF(); \t\t\t// 贝塞尔曲线结束点\n\n\tPointF mBezierStart2 = new PointF(); \t\t// 另一条贝塞尔曲线\n\tPointF mBezierControl2 = new PointF();\n\tPointF mBeziervertex2 = new PointF();\n\tPointF mBezierEnd2 = new PointF();\n\n\tfloat mMiddleX;\n\tfloat mMiddleY;\n\tfloat mDegrees;\n\tfloat mTouchToCornerDis;\n\tColorMatrixColorFilter mColorMatrixFilter;\n\tMatrix mMatrix;\n\tfloat[] mMatrixArray = { 0, 0, 0, 0, 0, 0, 0, 0, 1.0f };\n\n\tboolean mIsRTandLB; // 是否属于右、上、左、下\n\tfloat mMaxLength = (float) Math.hypot(mWidth, mHeight);\n\tint[] mBackShadowColors;\n\tint[] mFrontShadowColors;\n\tGradientDrawable mBackShadowDrawableLR;\n\tGradientDrawable mBackShadowDrawableRL;\n\tGradientDrawable mFolderShadowDrawableLR;\n\tGradientDrawable mFolderShadowDrawableRL;\n\n\tGradientDrawable mFrontShadowDrawableHBT;\n\tGradientDrawable mFrontShadowDrawableHTB;\n\tGradientDrawable mFrontShadowDrawableVLR;\n\tGradientDrawable mFrontShadowDrawableVRL;\n\n\tPaint mPaint;\n\tScroller mScroller;\n\n\tpublic Pager(Context context, int screenWidth, int screenHeight) {\n\t\tsuper(context);\n\t\t\n\t\tthis.mWidth = screenWidth;\t\t// Pager 宽和高\n\t\tthis.mHeight = screenHeight;\n\n\t\tmPath0 = new Path();\n\t\tmPath1 = new Path();\n\t\tcreateDrawable();\n\n\t\tmPaint = new Paint();\n\t\tmPaint.setStyle(Paint.Style.FILL);\n\n\t\tColorMatrix cm = new ColorMatrix();\n\t\tfloat array[] = { 0.55f, 0, 0, 0, 80.0f, 0, 0.55f, 0, 0, 80.0f, 0, 0,\n\t\t\t\t0.55f, 0, 80.0f, 0, 0, 0, 0.2f, 0 };\n\t\tcm.set(array);\n\t\tmColorMatrixFilter = new ColorMatrixColorFilter(cm);\n\t\tmMatrix = new Matrix();\n\t\tmScroller = new Scroller(getContext());\n\n\t\tmTouch.x = 0.01f; \t\t// 不让x,y为0,否则在点计算时会有问题\n\t\tmTouch.y = 0.01f;\n\t}\n\n\t/** 计算拖拽点对应的拖拽脚 */\n\tpublic void calcCornerXY(float x, float y) {\n\t\tif (x <= mWidth / 2)\n\t\t\tmCornerX = 0;\n\t\telse\n\t\t\tmCornerX = mWidth;\n\t\tif (y <= mHeight / 2)\n\t\t\tmCornerY = 0;\n\t\telse\n\t\t\tmCornerY = mHeight;\n\t\tif ((mCornerX == 0 && mCornerY == mHeight) || (mCornerX == mWidth && mCornerY == 0))\n\t\t\tmIsRTandLB = true;\n\t\telse\n\t\t\tmIsRTandLB = false;\n\t}\n\n\tpublic boolean doTouchEvent(MotionEvent event) {\n\t\tif (event.getAction() == MotionEvent.ACTION_MOVE) {\n\t\t\tmTouch.x = event.getX();\n\t\t\tmTouch.y = event.getY();\n\t\t\tthis.postInvalidate();\n\t\t}\n\t\tif (event.getAction() == MotionEvent.ACTION_DOWN) {\n\t\t\tmTouch.x = event.getX();\n\t\t\tmTouch.y = event.getY();\n\t\t\t// calcCornerXY(mTouch.x, mTouch.y);\n\t\t\t// this.postInvalidate();\n\t\t}\n\t\tif (event.getAction() == MotionEvent.ACTION_UP) {\n\t\t\tif (canDragOver()) {\n\t\t\t\tstartAnimation(1200);\n\t\t\t} else {\n\t\t\t\tmTouch.x = mCornerX - 0.09f;\n\t\t\t\tmTouch.y = mCornerY - 0.09f;\n\t\t\t}\n\n\t\t\tthis.postInvalidate();\n\t\t}\n\t\t// return super.onTouchEvent(event);\n\t\treturn true;\n\t}\n\n\t/** 求解直线P1P2和直线P3P4的交点坐标  */\n\tpublic PointF getCross(PointF P1, PointF P2, PointF P3, PointF P4) {\n\t\tPointF CrossP = new PointF();\n\t\t// 二元函数通式： y=ax+b\n\t\tfloat a1 = (P2.y - P1.y) / (P2.x - P1.x);\n\t\tfloat b1 = ((P1.x * P2.y) - (P2.x * P1.y)) / (P1.x - P2.x);\n\n\t\tfloat a2 = (P4.y - P3.y) / (P4.x - P3.x);\n\t\tfloat b2 = ((P3.x * P4.y) - (P4.x * P3.y)) / (P3.x - P4.x);\n\t\tCrossP.x = (b2 - b1) / (a1 - a2);\n\t\tCrossP.y = a1 * CrossP.x + b1;\n\t\treturn CrossP;\n\t}\n\n\tprivate void calcPoints() {\n\t\tmMiddleX = (mTouch.x + mCornerX) / 2;\n\t\tmMiddleY = (mTouch.y + mCornerY) / 2;\n\t\tmBezierControl1.x = mMiddleX - (mCornerY - mMiddleY) * (mCornerY - mMiddleY) / (mCornerX - mMiddleX);\n\t\tmBezierControl1.y = mCornerY;\n\t\tmBezierControl2.x = mCornerX;\n\t\tmBezierControl2.y = mMiddleY - (mCornerX - mMiddleX) * (mCornerX - mMiddleX) / (mCornerY - mMiddleY);\n\n\t\tmBezierStart1.x = mBezierControl1.x - (mCornerX - mBezierControl1.x) / 2;\n\t\tmBezierStart1.y = mCornerY;\n\n\t\t// 当mBezierStart1.x < 0或者mBezierStart1.x > 480时\n\t\t// 如果继续翻页，会出现BUG故在此限制\n\t\tif (mTouch.x > 0 && mTouch.x < mWidth) {\n\t\t\tif (mBezierStart1.x < 0 || mBezierStart1.x > mWidth) {\n\t\t\t\tif (mBezierStart1.x < 0)\n\t\t\t\t\tmBezierStart1.x = mWidth - mBezierStart1.x;\n\n\t\t\t\tfloat f1 = Math.abs(mCornerX - mTouch.x);\n\t\t\t\tfloat f2 = mWidth * f1 / mBezierStart1.x;\n\t\t\t\tmTouch.x = Math.abs(mCornerX - f2);\n\n\t\t\t\tfloat f3 = Math.abs(mCornerX - mTouch.x)\n\t\t\t\t\t\t* Math.abs(mCornerY - mTouch.y) / f1;\n\t\t\t\tmTouch.y = Math.abs(mCornerY - f3);\n\n\t\t\t\tmMiddleX = (mTouch.x + mCornerX) / 2;\n\t\t\t\tmMiddleY = (mTouch.y + mCornerY) / 2;\n\n\t\t\t\tmBezierControl1.x = mMiddleX - (mCornerY - mMiddleY) * (mCornerY - mMiddleY) / (mCornerX - mMiddleX);\n\t\t\t\tmBezierControl1.y = mCornerY;\n\n\t\t\t\tmBezierControl2.x = mCornerX;\n\t\t\t\tmBezierControl2.y = mMiddleY - (mCornerX - mMiddleX) * (mCornerX - mMiddleX) / (mCornerY - mMiddleY);\n\t\t\t\tmBezierStart1.x = mBezierControl1.x - (mCornerX - mBezierControl1.x) / 2;\n\t\t\t}\n\t\t}\n\t\tmBezierStart2.x = mCornerX;\n\t\tmBezierStart2.y = mBezierControl2.y - (mCornerY - mBezierControl2.y) / 2;\n\n\t\tmTouchToCornerDis = (float) Math.hypot((mTouch.x - mCornerX), (mTouch.y - mCornerY));\n\n\t\tmBezierEnd1 = getCross(mTouch, mBezierControl1, mBezierStart1, mBezierStart2);\n\t\tmBezierEnd2 = getCross(mTouch, mBezierControl2, mBezierStart1, mBezierStart2);\n\n\t\t/*\n\t\t * mBeziervertex1.x 推导\n\t\t * ((mBezierStart1.x+mBezierEnd1.x)/2+mBezierControl1.x)/2 化简等价于\n\t\t * (mBezierStart1.x+ 2*mBezierControl1.x+mBezierEnd1.x) / 4\n\t\t */\n\t\tmBeziervertex1.x = (mBezierStart1.x + 2 * mBezierControl1.x + mBezierEnd1.x) / 4;\n\t\tmBeziervertex1.y = (2 * mBezierControl1.y + mBezierStart1.y + mBezierEnd1.y) / 4;\n\t\tmBeziervertex2.x = (mBezierStart2.x + 2 * mBezierControl2.x + mBezierEnd2.x) / 4;\n\t\tmBeziervertex2.y = (2 * mBezierControl2.y + mBezierStart2.y + mBezierEnd2.y) / 4;\n\t}\n\n\tprivate void drawCurrentPageArea(Canvas canvas, Bitmap bitmap, Path path) {\n\t\tmPath0.reset();\n\t\tmPath0.moveTo(mBezierStart1.x, mBezierStart1.y);\n\t\tmPath0.quadTo(mBezierControl1.x, mBezierControl1.y, mBezierEnd1.x, mBezierEnd1.y);\n\t\tmPath0.lineTo(mTouch.x, mTouch.y);\n\t\tmPath0.lineTo(mBezierEnd2.x, mBezierEnd2.y);\n\t\tmPath0.quadTo(mBezierControl2.x, mBezierControl2.y, mBezierStart2.x, mBezierStart2.y);\n\t\tmPath0.lineTo(mCornerX, mCornerY);\n\t\tmPath0.close();\n\n\t\tcanvas.save();\n\t\tcanvas.clipPath(path, Region.Op.XOR);\n\t\tcanvas.drawBitmap(bitmap, 0, 0, null);\n\t\tcanvas.restore();\n\t}\n\n\tprivate void drawNextPageAreaAndShadow(Canvas canvas, Bitmap bitmap) {\n\t\tmPath1.reset();\n\t\tmPath1.moveTo(mBezierStart1.x, mBezierStart1.y);\n\t\tmPath1.lineTo(mBeziervertex1.x, mBeziervertex1.y);\n\t\tmPath1.lineTo(mBeziervertex2.x, mBeziervertex2.y);\n\t\tmPath1.lineTo(mBezierStart2.x, mBezierStart2.y);\n\t\tmPath1.lineTo(mCornerX, mCornerY);\n\t\tmPath1.close();\n\n\t\tmDegrees = (float) Math.toDegrees(Math.atan2(mBezierControl1.x - mCornerX, mBezierControl2.y - mCornerY));\n\t\tint leftx;\n\t\tint rightx;\n\t\tGradientDrawable mBackShadowDrawable;\n\t\tif (mIsRTandLB) {\n\t\t\tleftx = (int) (mBezierStart1.x);\n\t\t\trightx = (int) (mBezierStart1.x + mTouchToCornerDis / 4);\n\t\t\tmBackShadowDrawable = mBackShadowDrawableLR;\n\t\t} else {\n\t\t\tleftx = (int) (mBezierStart1.x - mTouchToCornerDis / 4);\n\t\t\trightx = (int) mBezierStart1.x;\n\t\t\tmBackShadowDrawable = mBackShadowDrawableRL;\n\t\t}\n\t\tcanvas.save();\n\t\tcanvas.clipPath(mPath0);\n\t\tcanvas.clipPath(mPath1, Region.Op.INTERSECT);\n\t\tcanvas.drawBitmap(bitmap, 0, 0, null);\n\t\tcanvas.rotate(mDegrees, mBezierStart1.x, mBezierStart1.y);\n\t\tmBackShadowDrawable.setBounds(leftx, (int) mBezierStart1.y, rightx, (int) (mMaxLength + mBezierStart1.y));\n\t\tmBackShadowDrawable.draw(canvas);\n\t\tcanvas.restore();\n\t}\n\n\tpublic void setBitmaps(Bitmap bm1, Bitmap bm2) {\n\t\tmCurPageBitmap = bm1;\n\t\tmNextPageBitmap = bm2;\n\t}\n\n\tpublic void setScreen(int w, int h) {\n\t\tmWidth = w;\n\t\tmHeight = h;\n\t}\n\n\t@Override\n\tprotected void onDraw(Canvas canvas) {\n\t\tcanvas.drawColor(0xFFAAAAAA);\n\t\tcalcPoints();\n\t\tdrawCurrentPageArea(canvas, mCurPageBitmap, mPath0);\n\t\tdrawNextPageAreaAndShadow(canvas, mNextPageBitmap);\n\t\tdrawCurrentPageShadow(canvas);\n\t\tdrawCurrentBackArea(canvas, mCurPageBitmap);\n\t}\n\n\t/** 创建阴影的GradientDrawable */\n\tprivate void createDrawable() {\n\t\tint[] color = { 0x333333, 0xb0333333 };\n\t\tmFolderShadowDrawableRL = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, color);\n\t\tmFolderShadowDrawableRL.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmFolderShadowDrawableLR = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, color);\n\t\tmFolderShadowDrawableLR.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmBackShadowColors = new int[] { 0xff111111, 0x111111 };\n\t\tmBackShadowDrawableRL = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, mBackShadowColors);\n\t\tmBackShadowDrawableRL.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmBackShadowDrawableLR = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, mBackShadowColors);\n\t\tmBackShadowDrawableLR.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmFrontShadowColors = new int[] { 0x80111111, 0x111111 };\n\t\tmFrontShadowDrawableVLR = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, mFrontShadowColors);\n\t\tmFrontShadowDrawableVLR.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\t\tmFrontShadowDrawableVRL = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, mFrontShadowColors);\n\t\tmFrontShadowDrawableVRL.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmFrontShadowDrawableHTB = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, mFrontShadowColors);\n\t\tmFrontShadowDrawableHTB.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\n\t\tmFrontShadowDrawableHBT = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, mFrontShadowColors);\n\t\tmFrontShadowDrawableHBT.setGradientType(GradientDrawable.LINEAR_GRADIENT);\n\t}\n\n\t/** 绘制翻起页的阴影 */\n\tpublic void drawCurrentPageShadow(Canvas canvas) {\n\t\tdouble degree;\n\t\tif (mIsRTandLB) {\n\t\t\tdegree = Math.PI / 4 - Math.atan2(mBezierControl1.y - mTouch.y, mTouch.x - mBezierControl1.x);\n\t\t} else {\n\t\t\tdegree = Math.PI / 4 - Math.atan2(mTouch.y - mBezierControl1.y, mTouch.x - mBezierControl1.x);\n\t\t}\n\t\t// 翻起页阴影顶点与touch点的距离\n\t\tdouble d1 = (float) 25 * 1.414 * Math.cos(degree);\n\t\tdouble d2 = (float) 25 * 1.414 * Math.sin(degree);\n\t\tfloat x = (float) (mTouch.x + d1);\n\t\tfloat y;\n\t\tif (mIsRTandLB) {\n\t\t\ty = (float) (mTouch.y + d2);\n\t\t} else {\n\t\t\ty = (float) (mTouch.y - d2);\n\t\t}\n\t\tmPath1.reset();\n\t\tmPath1.moveTo(x, y);\n\t\tmPath1.lineTo(mTouch.x, mTouch.y);\n\t\tmPath1.lineTo(mBezierControl1.x, mBezierControl1.y);\n\t\tmPath1.lineTo(mBezierStart1.x, mBezierStart1.y);\n\t\tmPath1.close();\n\t\tfloat rotateDegrees;\n\t\tcanvas.save();\n\n\t\tcanvas.clipPath(mPath0, Region.Op.XOR);\n\t\tcanvas.clipPath(mPath1, Region.Op.INTERSECT);\n\t\tint leftx;\n\t\tint rightx;\n\t\tGradientDrawable mCurrentPageShadow;\n\t\tif (mIsRTandLB) {\n\t\t\tleftx = (int) (mBezierControl1.x);\n\t\t\trightx = (int) mBezierControl1.x + 25;\n\t\t\tmCurrentPageShadow = mFrontShadowDrawableVLR;\n\t\t} else {\n\t\t\tleftx = (int) (mBezierControl1.x - 25);\n\t\t\trightx = (int) mBezierControl1.x + 1;\n\t\t\tmCurrentPageShadow = mFrontShadowDrawableVRL;\n\t\t}\n\n\t\trotateDegrees = (float) Math.toDegrees(Math.atan2(mTouch.x - mBezierControl1.x, mBezierControl1.y - mTouch.y));\n\t\tcanvas.rotate(rotateDegrees, mBezierControl1.x, mBezierControl1.y);\n\t\tmCurrentPageShadow.setBounds(leftx, (int) (mBezierControl1.y - mMaxLength), rightx, (int) (mBezierControl1.y));\n\t\tmCurrentPageShadow.draw(canvas);\n\t\tcanvas.restore();\n\n\t\tmPath1.reset();\n\t\tmPath1.moveTo(x, y);\n\t\tmPath1.lineTo(mTouch.x, mTouch.y);\n\t\tmPath1.lineTo(mBezierControl2.x, mBezierControl2.y);\n\t\tmPath1.lineTo(mBezierStart2.x, mBezierStart2.y);\n\t\tmPath1.close();\n\t\tcanvas.save();\n\t\tcanvas.clipPath(mPath0, Region.Op.XOR);\n\t\tcanvas.clipPath(mPath1, Region.Op.INTERSECT);\n\t\tif (mIsRTandLB) {\n\t\t\tleftx = (int) (mBezierControl2.y);\n\t\t\trightx = (int) (mBezierControl2.y + 25);\n\t\t\tmCurrentPageShadow = mFrontShadowDrawableHTB;\n\t\t} else {\n\t\t\tleftx = (int) (mBezierControl2.y - 25);\n\t\t\trightx = (int) (mBezierControl2.y + 1);\n\t\t\tmCurrentPageShadow = mFrontShadowDrawableHBT;\n\t\t}\n\t\trotateDegrees = (float) Math.toDegrees(Math.atan2(mBezierControl2.y - mTouch.y, mBezierControl2.x - mTouch.x));\n\t\tcanvas.rotate(rotateDegrees, mBezierControl2.x, mBezierControl2.y);\n\t\tfloat temp;\n\t\tif (mBezierControl2.y < 0)\n\t\t\ttemp = mBezierControl2.y - mHeight;\n\t\telse\n\t\t\ttemp = mBezierControl2.y;\n\n\t\tint hmg = (int) Math.hypot(mBezierControl2.x, temp);\n\t\tif (hmg > mMaxLength)\n\t\t\tmCurrentPageShadow.setBounds((int) (mBezierControl2.x - 25) - hmg, leftx, (int) (mBezierControl2.x + mMaxLength) - hmg, rightx);\n\t\telse\n\t\t\tmCurrentPageShadow.setBounds((int) (mBezierControl2.x - mMaxLength), leftx, (int) (mBezierControl2.x), rightx);\n\n\t\tmCurrentPageShadow.draw(canvas);\n\t\tcanvas.restore();\n\t}\n\n\t/** 绘制翻起页背面 */\n\tprivate void drawCurrentBackArea(Canvas canvas, Bitmap bitmap) {\n\t\tint i = (int) (mBezierStart1.x + mBezierControl1.x) / 2;\n\t\tfloat f1 = Math.abs(i - mBezierControl1.x);\n\t\tint i1 = (int) (mBezierStart2.y + mBezierControl2.y) / 2;\n\t\tfloat f2 = Math.abs(i1 - mBezierControl2.y);\n\t\tfloat f3 = Math.min(f1, f2);\n\t\tmPath1.reset();\n\t\tmPath1.moveTo(mBeziervertex2.x, mBeziervertex2.y);\n\t\tmPath1.lineTo(mBeziervertex1.x, mBeziervertex1.y);\n\t\tmPath1.lineTo(mBezierEnd1.x, mBezierEnd1.y);\n\t\tmPath1.lineTo(mTouch.x, mTouch.y);\n\t\tmPath1.lineTo(mBezierEnd2.x, mBezierEnd2.y);\n\t\tmPath1.close();\n\t\tGradientDrawable mFolderShadowDrawable;\n\t\tint left;\n\t\tint right;\n\t\tif (mIsRTandLB) {\n\t\t\tleft = (int) (mBezierStart1.x - 1);\n\t\t\tright = (int) (mBezierStart1.x + f3 + 1);\n\t\t\tmFolderShadowDrawable = mFolderShadowDrawableLR;\n\t\t} else {\n\t\t\tleft = (int) (mBezierStart1.x - f3 - 1);\n\t\t\tright = (int) (mBezierStart1.x + 1);\n\t\t\tmFolderShadowDrawable = mFolderShadowDrawableRL;\n\t\t}\n\t\tcanvas.save();\n\t\tcanvas.clipPath(mPath0);\n\t\tcanvas.clipPath(mPath1, Region.Op.INTERSECT);\n\n\t\tmPaint.setColorFilter(mColorMatrixFilter);\n\n\t\tfloat dis = (float) Math.hypot(mCornerX - mBezierControl1.x, mBezierControl2.y - mCornerY);\n\t\tfloat f8 = (mCornerX - mBezierControl1.x) / dis;\n\t\tfloat f9 = (mBezierControl2.y - mCornerY) / dis;\n\t\tmMatrixArray[0] = 1 - 2 * f9 * f9;\n\t\tmMatrixArray[1] = 2 * f8 * f9;\n\t\tmMatrixArray[3] = mMatrixArray[1];\n\t\tmMatrixArray[4] = 1 - 2 * f8 * f8;\n\t\tmMatrix.reset();\n\t\tmMatrix.setValues(mMatrixArray);\n\t\tmMatrix.preTranslate(-mBezierControl1.x, -mBezierControl1.y);\n\t\tmMatrix.postTranslate(mBezierControl1.x, mBezierControl1.y);\n\t\tcanvas.drawBitmap(bitmap, mMatrix, mPaint);\n\t\t//canvas.drawBitmap(bitmap, mMatrix, null);\n\t\tmPaint.setColorFilter(null);\n\t\tcanvas.rotate(mDegrees, mBezierStart1.x, mBezierStart1.y);\n\t\tmFolderShadowDrawable.setBounds(left, (int) mBezierStart1.y, right, (int) (mBezierStart1.y + mMaxLength));\n\t\tmFolderShadowDrawable.draw(canvas);\n\t\tcanvas.restore();\n\t}\n\n\tpublic void computeScroll() {\n\t\tsuper.computeScroll();\n\t\tif (mScroller.computeScrollOffset()) {\n\t\t\tfloat x = mScroller.getCurrX();\n\t\t\tfloat y = mScroller.getCurrY();\n\t\t\tmTouch.x = x;\n\t\t\tmTouch.y = y;\n\t\t\tpostInvalidate();\n\t\t}\n\t}\n\n\tprivate void startAnimation(int delayMillis) {\n\t\tint dx, dy; // dx 水平方向滑动的距离，负值会使滚动向左滚动  dy 垂直方向滑动的距离，负值会使滚动向上滚动\n\t\tif (mCornerX > 0) {\n\t\t\tdx = -(int) (mWidth + mTouch.x);\n\t\t} else {\n\t\t\tdx = (int) (mWidth - mTouch.x + mWidth);\n\t\t}\n\t\tif (mCornerY > 0) {\n\t\t\tdy = (int) (mHeight - mTouch.y);\n\t\t} else {\n\t\t\tdy = (int) (1 - mTouch.y); // 防止mTouch.y最终变为0\n\t\t}\n\t\tmScroller.startScroll((int) mTouch.x, (int) mTouch.y, dx, dy, delayMillis);\n\t}\n\n\tpublic void abortAnimation() {\n\t\tif (!mScroller.isFinished()) {\n\t\t\tmScroller.abortAnimation();\n\t\t}\n\t}\n\n\tpublic boolean canDragOver() {\n\t\tif (mTouchToCornerDis > mWidth / 10)\n\t\t\treturn true;\n\t\treturn false;\n\t}\n\n\t/** 是否从左边翻向右边  */\n\tpublic boolean DragToRight() {\n\t\tif (mCornerX > 0)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "src/com/example/bezierCurve/PagerFactory.java",
    "content": "package com.example.bezierCurve;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Paint.Align;\n\n\npublic class PagerFactory {\n\tprivate Context mContext;\n\tprivate Bitmap m_book_bg = null;\n\n\tprivate int m_backColor = 0xffff9e85; \t// 背景颜色\n\n\tprivate boolean m_isfirstPage,m_islastPage;\n\n\tprivate Paint mPaint;\n\n\tpublic PagerFactory(Context context) {\n\t\tmContext = context;\n\t\tmPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n\t\tmPaint.setTextAlign(Align.LEFT);\n\t\tmPaint.setColor(m_backColor);\n\t}\n\n\tpublic void onDraw(Canvas c) {\n\t\tif (m_book_bg == null)\n\t\t\tc.drawColor(m_backColor);\n\t\telse\n\t\t\tc.drawBitmap(m_book_bg, 0, 0, null);\n\t}\n\n\tpublic void onDraw(Canvas c, Bitmap bitmap){\n\t\tc.drawBitmap(bitmap, 0, 0, null);\n\t}\n\n\n\tpublic void setBgBitmap(Bitmap BG) {\n\t\tm_book_bg = BG;\n\t}\n}\n"
  }
]