diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000000..0a213d6792
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: mpandroidchart
+open_collective: philippjahoda
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000000..b75838b907
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,37 @@
+
+
+**Summary**
+
+
+**Expected Behavior**
+
+
+**Possible Solution**
+
+
+
+**Device (please complete the following information):**
+ - Device: [e.g. Google Pixel]
+ - Android Version [e.g. 7.0]
+ - Library Version (e.g. 3.1.0-alpha)
+
+**Additional Context**
+
diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
new file mode 100644
index 0000000000..3a5938eee9
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -0,0 +1,44 @@
+---
+name: Bugs
+about: Create a bug report to help us improve
+
+---
+
+
+
+**Summary**
+
+
+**Expected Behavior**
+
+
+**Possible Solution**
+
+
+
+**Device (please complete the following information):**
+ - Device: [e.g. Google Pixel]
+ - Android Version [e.g. 7.0]
+ - Library Version (e.g. 3.1.0-alpha)
+
+**Additional Context**
+
+
+ADD A REWARD using [Speed](speedoss.com) to SOLVE this issue QUICKLY and SUPPORT this project.
diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md
new file mode 100644
index 0000000000..54b30c983b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Feature_request.md
@@ -0,0 +1,34 @@
+---
+name: Feature Request
+about: Suggest an idea for this project
+
+---
+
+
+
+**Is your feature request related to a problem? Please describe.**
+
+
+**Describe the solution you'd like**
+
+
+**Describe alternatives you've considered**
+
+
+**Additional context**
+
+ADD A REWARD using [Speed](speedoss.com) to SOLVE this issue QUICKLY and SUPPORT this project.
diff --git a/.github/ISSUE_TEMPLATE/Support_help.md b/.github/ISSUE_TEMPLATE/Support_help.md
new file mode 100644
index 0000000000..70a086d3d7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Support_help.md
@@ -0,0 +1,27 @@
+---
+name: Support
+about: I need help!
+
+---
+
+# *STOP RIGHT THERE!*
+
+Issues are ***NOT*** for getting help, only for reporting bugs and feature requests.
+
+Search open and closed issues to see if your question already has an answer. However, **do not create a new issue.**
+
+Instead, do the following:
+
+1. Download the [Example App](https://play.google.com/store/apps/details?id=com.xxmassdeveloper.mpchartexample) and check out the [source code](https://github.com/PhilJay/MPAndroidChart/tree/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample). 90% of the time there is an example that does exactly what you are trying to do.
+
+1. Look at the [Wiki](https://github.com/PhilJay/MPAndroidChart/wiki) for the official documentation for MPAndroidChart. You can also browse the [javadoc](https://jitpack.io/com/github/philjay/mpandroidchart/v3.1.0-alpha/javadoc/) for a more detailed tutorial of the API.
+
+1. Go to [StackOverflow](https://stackoverflow.com/questions/tagged/mpandroidchart) and ask your questions there. The community will be much more helpful and willing to offer guidance.
+
+
+### You have been warned!
+
+From now on, any issues asking for help will get closed with a link to this file.
+
+### Additional Context
+ADD A REWARD using [Speed](speedoss.com) to SOLVE this issue QUICKLY and SUPPORT this project.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000000..f65a30b178
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,15 @@
+## PR Checklist:
+- [ ] I have tested this extensively and it does not break any existing behavior.
+- [ ] I have added/updated examples and tests for any new behavior.
+- [ ] If this is a significant change, an issue has already been created where the problem / solution was discussed: [N/A, or add link to issue here]
+
+
+
+## PR Description
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index 2152318d78..feed37b27d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,12 @@
# generated files
bin/
gen/
+generated/
+docs/
+finalOutput/
+projectFilesBackup/
+
+build.xml
# Local configuration file (sdk path, etc)
local.properties
@@ -37,3 +43,5 @@ build/
# maven
target/
+
+.DS_Store
diff --git a/.idea/runConfigurations/MPChartExample.xml b/.idea/runConfigurations/MPChartExample.xml
new file mode 100644
index 0000000000..e6bcf50331
--- /dev/null
+++ b/.idea/runConfigurations/MPChartExample.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000..98cf0ab89b
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,66 @@
+> ### Notice
+> *Before you continue, this is the* **ANDROID** *library. If you have an* **iOS** *device, please go here instead*:
+>
+> – https://github.com/danielgindi/Charts
+>
+> They might tell you to come back here, if they do, listen to them and ignore this notice.
+
+# How to contribute
+
+Bug-fixes and features often come from users of the MPAndroidChart library and improve it greatly. We want to keep it as easy as possible to contribute changes that improve the experience for users all around the world. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
+
+## Creating Issues
+
+There are two main issue templates, one for bugs and another for feature requests. Please use them! You're issue will be much easier to understand, and bugs easier to fix, if you follow the templates. If your issue doesn't fit into those, just use the generic template.
+
+Search existing [issues] to see if your bug has already been reported or if a feature request already exists. Don't forget to remove `is:open` so you see all the issues! If you find that one already exists, use reactions to show how much you care!
+
+## Making Pull Requests
+
+Careful! If you fail to follow these guidlines, you're pull request may be closed, *even if it's really awesome*.
+
+ 0. **Search** open [pull requests] AND existing [issues] to make sure what you want to do isn't already being worked on or already has an open pull request.
+ 1. **Fork** the repository
+ 1. **Create** a new branch based on `master`, and name it according to your changes
+ 1. **Add** your commits, they MUST follow the [Commit Style](#commit-style) below
+ 1. **Test** your changes by actually running the example app, or create a new example
+ 1. **Create** a pull request, following the auto-generated template
+ 1. ???
+ 1. Profit :money_with_wings:
+
+You are encouraged to use [GitHub Desktop] to inspect your code changes before committing them. It can reveal small changes that might have gone unnoticed, and would be requested for removal before merging.
+
+Check out [#3975](https://github.com/PhilJay/MPAndroidChart/pull/3975) for an example of a good-made-better pull request.
+
+## Commit Style
+
+ * **Make commits of logical units**
+ Don't load your commits with tons of changes, this makes it hard to follow what is happening. However, if you have done a lot of work, and there are commits and merges all over the place, squash them down into fewer commits.
+
+ * **Conform to the code style**
+ It's easy, just look around!
+
+ * **Write good commit messages**
+ You may prefer [Tim Pope's style], you might like the [commitizen-friendly] way. Regardless of the color you pick, you MUST stay within the lines!
+ ```
+The commit title CANNOT exceed 50 characters
+
+The body of the message comes after an empty new line, and describes the
+changes more thoroughly. If the change is obvious and self-explanatory
+from the title, you can omit the body. You should describe all changes
+if many were made, or maybe some trickery that only code wizards can
+understand.
+
+Be polite and wrap your lines to 72 characters, but if you prefer going
+to 100 characters then I guess we can't stop you.
+```
+
+## Final Notes
+
+Thanks for reading the contributing file! Have some cake! :cake:
+
+[issues]: https://github.com/PhilJay/MPAndroidChart/issues
+[pull requests]: https://github.com/PhilJay/MPAndroidChart/pulls
+[GitHub Desktop]: https://desktop.github.com/
+[Tim Pope's style]: https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
+[commitizen-friendly]: https://github.com/commitizen/cz-cli
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..c1551a9dce
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+ Copyright 2020 Philipp Jahoda
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this software 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/MPChartExample/.gitignore b/MPChartExample/.gitignore
index 796b96d1c4..67e07b8fea 100644
--- a/MPChartExample/.gitignore
+++ b/MPChartExample/.gitignore
@@ -1 +1,2 @@
/build
+/release
diff --git a/MPChartExample/AndroidManifest.xml b/MPChartExample/AndroidManifest.xml
deleted file mode 100644
index 626e85c460..0000000000
--- a/MPChartExample/AndroidManifest.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MPChartExample/build.gradle b/MPChartExample/build.gradle
index 250cf844f9..2d607e9991 100644
--- a/MPChartExample/build.gradle
+++ b/MPChartExample/build.gradle
@@ -1,57 +1,26 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 21
- buildToolsVersion '21.1.1'
+ compileSdkVersion 28
defaultConfig {
+ applicationId "com.xxmassdeveloper.mpchartexample"
minSdkVersion 16
- targetSdkVersion 21
- versionCode 36
- versionName '2.0.7'
-
- sourceSets {
- main {
- java.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- manifest.srcFile 'AndroidManifest.xml'
- }
- }
+ targetSdkVersion 28
+ versionCode 57
+ versionName '3.1.0'
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
-
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
-
}
-
- lintOptions {
- abortOnError false
- }
-}
-
-buildscript {
- repositories {
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:1.1.0'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-repositories {
- maven { url "https://jitpack.io/" }
}
dependencies {
- //compile fileTree(dir: 'libs', include: ['*.jar'])
- compile project(':MPChartLib') // remove this if you only imported the example project
- compile 'com.android.support:appcompat-v7:21.0.3'
- //compile 'com.github.PhilJay:MPAndroidChart:v2.0.7'
+ implementation "androidx.appcompat:appcompat:1.0.2"
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation project(':MPChartLib')
}
diff --git a/MPChartExample/libs/android-support-v4.jar b/MPChartExample/libs/android-support-v4.jar
deleted file mode 100644
index c31cede47e..0000000000
Binary files a/MPChartExample/libs/android-support-v4.jar and /dev/null differ
diff --git a/MPChartExample/proguard-project.txt b/MPChartExample/proguard-project.txt
deleted file mode 100644
index f2fe1559a2..0000000000
--- a/MPChartExample/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# 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/MPChartExample/proguard-rules.pro b/MPChartExample/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/MPChartExample/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/MPChartExample/project.properties b/MPChartExample/project.properties
deleted file mode 100644
index a8d309b24e..0000000000
--- a/MPChartExample/project.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-19
-android.library.reference.1=../MPChartLib
diff --git a/MPChartExample/res/drawable-nodpi/marker.png b/MPChartExample/res/drawable-nodpi/marker.png
deleted file mode 100644
index 616cdd7b31..0000000000
Binary files a/MPChartExample/res/drawable-nodpi/marker.png and /dev/null differ
diff --git a/MPChartExample/res/menu/bar.xml b/MPChartExample/res/menu/bar.xml
deleted file mode 100644
index 52eadc6458..0000000000
--- a/MPChartExample/res/menu/bar.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/candle.xml b/MPChartExample/res/menu/candle.xml
deleted file mode 100644
index 972e172826..0000000000
--- a/MPChartExample/res/menu/candle.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/combined.xml b/MPChartExample/res/menu/combined.xml
deleted file mode 100644
index 9b034d7f4f..0000000000
--- a/MPChartExample/res/menu/combined.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/draw.xml b/MPChartExample/res/menu/draw.xml
deleted file mode 100644
index e519fd1cff..0000000000
--- a/MPChartExample/res/menu/draw.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/dynamical.xml b/MPChartExample/res/menu/dynamical.xml
deleted file mode 100644
index c43a3a0ae6..0000000000
--- a/MPChartExample/res/menu/dynamical.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/line.xml b/MPChartExample/res/menu/line.xml
deleted file mode 100644
index d58bcd309e..0000000000
--- a/MPChartExample/res/menu/line.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
--
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/pie.xml b/MPChartExample/res/menu/pie.xml
deleted file mode 100644
index 3013da3f2c..0000000000
--- a/MPChartExample/res/menu/pie.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/radar.xml b/MPChartExample/res/menu/radar.xml
deleted file mode 100644
index cbde056f4f..0000000000
--- a/MPChartExample/res/menu/radar.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/menu/scatter.xml b/MPChartExample/res/menu/scatter.xml
deleted file mode 100644
index 3020bdb786..0000000000
--- a/MPChartExample/res/menu/scatter.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file
diff --git a/MPChartExample/res/values-sw600dp/dimens.xml b/MPChartExample/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 44f01db75f..0000000000
--- a/MPChartExample/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/MPChartExample/res/values-sw720dp-land/dimens.xml b/MPChartExample/res/values-sw720dp-land/dimens.xml
deleted file mode 100644
index 61e3fa8fbc..0000000000
--- a/MPChartExample/res/values-sw720dp-land/dimens.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- 128dp
-
-
diff --git a/MPChartExample/res/values-v11/styles.xml b/MPChartExample/res/values-v11/styles.xml
deleted file mode 100644
index 3c02242ad0..0000000000
--- a/MPChartExample/res/values-v11/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/MPChartExample/res/values-v14/styles.xml b/MPChartExample/res/values-v14/styles.xml
deleted file mode 100644
index a91fd0372b..0000000000
--- a/MPChartExample/res/values-v14/styles.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
diff --git a/MPChartExample/res/values/dimens.xml b/MPChartExample/res/values/dimens.xml
deleted file mode 100644
index 55c1e5908c..0000000000
--- a/MPChartExample/res/values/dimens.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- 16dp
- 16dp
-
-
diff --git a/MPChartExample/res/values/strings.xml b/MPChartExample/res/values/strings.xml
deleted file mode 100644
index 7f59af64bb..0000000000
--- a/MPChartExample/res/values/strings.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- MPAndroidChart Example
- Settings
- Hello world!
-
-
diff --git a/MPChartExample/res/values/styles.xml b/MPChartExample/res/values/styles.xml
deleted file mode 100644
index 6ce89c7ba4..0000000000
--- a/MPChartExample/res/values/styles.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java
deleted file mode 100644
index e15f57b7e2..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java
+++ /dev/null
@@ -1,230 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.BarChart;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class AnotherBarActivity extends DemoBase implements OnSeekBarChangeListener {
-
- private BarChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_barchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (BarChart) findViewById(R.id.chart1);
-
- mChart.setDescription("");
-
- // if more than 60 entries are displayed in the chart, no values will be
- // drawn
- mChart.setMaxVisibleValueCount(60);
-
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mChart.setDrawBarShadow(false);
- mChart.setDrawGridBackground(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setPosition(XAxisPosition.BOTTOM);
- xAxis.setSpaceBetweenLabels(0);
- xAxis.setDrawGridLines(false);
-
- mChart.getAxisLeft().setDrawGridLines(false);
-
- // setting data
- mSeekBarX.setProgress(10);
- mSeekBarY.setProgress(100);
-
- // add a nice and smooth animation
- mChart.animateY(2500);
-
- mChart.getLegend().setEnabled(false);
-
- // Legend l = mChart.getLegend();
- // l.setPosition(LegendPosition.BELOW_CHART_CENTER);
- // l.setFormSize(8f);
- // l.setFormToTextSpace(4f);
- // l.setXEntrySpace(6f);
-
- // mChart.setDrawLegend(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.bar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
-
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlightArrow: {
- if (mChart.isDrawHighlightArrowEnabled())
- mChart.setDrawHighlightArrow(false);
- else
- mChart.setDrawHighlightArrow(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
-
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xAxis = mChart.getXAxis();
-
- if (xAxis.isAdjustXLabelsEnabled())
- xAxis.setAdjustXLabels(false);
- else
- xAxis.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleFilter: {
-
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 25);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToGallery("title" + System.currentTimeMillis(), 50)) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < mSeekBarX.getProgress() + 1; i++) {
- float mult = (mSeekBarY.getProgress() + 1);
- float val1 = (float) (Math.random() * mult) + mult / 3;
- yVals1.add(new BarEntry((int) val1, i));
- }
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < mSeekBarX.getProgress() + 1; i++) {
- xVals.add((int) yVals1.get(i).getVal() + "");
- }
-
- BarDataSet set1 = new BarDataSet(yVals1, "Data Set");
- set1.setColors(ColorTemplate.VORDIPLOM_COLORS);
- set1.setDrawValues(false);
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
-
- BarData data = new BarData(xVals, dataSets);
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java
deleted file mode 100644
index 352db3a3e7..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java
+++ /dev/null
@@ -1,290 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.annotation.SuppressLint;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.BarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.components.YAxis.AxisDependency;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.github.mikephil.charting.utils.ValueFormatter;
-import com.xxmassdeveloper.mpchartexample.custom.MyValueFormatter;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class BarChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- protected BarChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface mTf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_barchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mChart = (BarChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- mChart.setDrawBarShadow(true);
- mChart.setDrawValueAboveBar(true);
-
- mChart.setDescription("");
-
- // if more than 60 entries are displayed in the chart, no values will be
- // drawn
- mChart.setMaxVisibleValueCount(60);
-
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- // draw shadows for each bar that show the maximum value
- // mChart.setDrawBarShadow(true);
-
- // mChart.setDrawXLabels(false);
-
- mChart.setDrawGridBackground(false);
- // mChart.setDrawYLabels(false);
-
- mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setPosition(XAxisPosition.BOTTOM);
- xAxis.setTypeface(mTf);
- xAxis.setDrawGridLines(false);
-
- ValueFormatter custom = new MyValueFormatter();
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(mTf);
- leftAxis.setLabelCount(8);
- leftAxis.setValueFormatter(custom);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setDrawGridLines(false);
- rightAxis.setTypeface(mTf);
- rightAxis.setLabelCount(8);
- rightAxis.setValueFormatter(custom);
-
- setData(12, 50);
-
- // setting data
- mSeekBarY.setProgress(50);
- mSeekBarX.setProgress(12);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.BELOW_CHART_LEFT);
- l.setForm(LegendForm.SQUARE);
- l.setFormSize(9f);
- l.setTextSize(11f);
- l.setXEntrySpace(4f);
-
- // mChart.setDrawLegend(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.bar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlightArrow: {
- if (mChart.isDrawHighlightArrowEnabled())
- mChart.setDrawHighlightArrow(false);
- else
- mChart.setDrawHighlightArrow(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.notifyDataSetChanged();
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 25);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToGallery("title" + System.currentTimeMillis(), 50)) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress(), mSeekBarY.getProgress());
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add(mMonths[i % 12]);
- }
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult);
- yVals1.add(new BarEntry(val, i));
- }
-
- BarDataSet set1 = new BarDataSet(yVals1, "DataSet");
- set1.setBarSpacePercent(35f);
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
-
- BarData data = new BarData(xVals, dataSets);
-// data.setValueFormatter(new MyValueFormatter());
- data.setValueTextSize(10f);
- data.setValueTypeface(mTf);
-
- mChart.setData(data);
- }
-
- @SuppressLint("NewApi")
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
-
- if (e == null)
- return;
-
- RectF bounds = mChart.getBarBounds((BarEntry) e);
- PointF position = mChart.getPosition(e, AxisDependency.LEFT);
-
- Log.i("bounds", bounds.toString());
- Log.i("position", position.toString());
- }
-
- public void onNothingSelected() {
- };
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java
deleted file mode 100644
index 7f131a43d5..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java
+++ /dev/null
@@ -1,261 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.charts.BarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.github.mikephil.charting.utils.LargeValueFormatter;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class BarChartActivityMultiDataset extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private BarChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_barchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (BarChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
- mChart.setDescription("");
-
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mChart.setDrawBarShadow(false);
-
- mChart.setDrawGridBackground(false);
-
- // create a custom MarkerView (extend MarkerView) and specify the layout
- // to use for it
- MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
-
- // define an offset to change the original position of the marker
- // (optional)
- // mv.setOffsets(-mv.getMeasuredWidth() / 2, -mv.getMeasuredHeight());
-
- // set the marker to the chart
- mChart.setMarkerView(mv);
-
- mSeekBarX.setProgress(10);
- mSeekBarY.setProgress(100);
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART_INSIDE);
- l.setTypeface(tf);
-
- XAxis xl = mChart.getXAxis();
- xl.setTypeface(tf);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
- leftAxis.setValueFormatter(new LargeValueFormatter());
- leftAxis.setDrawGridLines(false);
- leftAxis.setSpaceTop(25f);
-
- mChart.getAxisRight().setEnabled(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.bar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlightArrow: {
- if (mChart.isDrawHighlightArrowEnabled())
- mChart.setDrawHighlightArrow(false);
- else
- mChart.setDrawHighlightArrow(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xAxis = mChart.getXAxis();
-
- if (xAxis.isAdjustXLabelsEnabled())
- xAxis.setAdjustXLabels(false);
- else
- xAxis.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- // mChart.saveToGallery("title"+System.currentTimeMillis());
- mChart.saveToPath("title" + System.currentTimeMillis(), "");
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- xVals.add((i + 1990) + "");
- }
-
- ArrayList yVals1 = new ArrayList();
- ArrayList yVals2 = new ArrayList();
- ArrayList yVals3 = new ArrayList();
-
- float mult = mSeekBarY.getProgress() * 10000000f;
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mult) + 3;
- yVals1.add(new BarEntry(val, i));
- }
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mult) + 3;
- yVals2.add(new BarEntry(val, i));
- }
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mult) + 3;
- yVals3.add(new BarEntry(val, i));
- }
-
- // create 3 datasets with different types
- BarDataSet set1 = new BarDataSet(yVals1, "Company A");
- // set1.setColors(ColorTemplate.createColors(getApplicationContext(),
- // ColorTemplate.FRESH_COLORS));
- set1.setColor(Color.rgb(104, 241, 175));
- BarDataSet set2 = new BarDataSet(yVals2, "Company B");
- set2.setColor(Color.rgb(164, 228, 251));
- BarDataSet set3 = new BarDataSet(yVals3, "Company C");
- set3.setColor(Color.rgb(242, 247, 158));
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
- dataSets.add(set2);
- dataSets.add(set3);
-
- BarData data = new BarData(xVals, dataSets);
- data.setValueFormatter(new LargeValueFormatter());
-
- // add space between the dataset groups in percent of bar-width
- data.setGroupSpace(80f);
- data.setValueTypeface(tf);
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("Activity", "Selected: " + e.toString() + ", dataSet: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- Log.i("Activity", "Nothing selected.");
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java
deleted file mode 100644
index 420a04d107..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java
+++ /dev/null
@@ -1,213 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.CandleStickChart;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.components.YAxis.AxisDependency;
-import com.github.mikephil.charting.data.CandleData;
-import com.github.mikephil.charting.data.CandleDataSet;
-import com.github.mikephil.charting.data.CandleEntry;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class CandleStickChartActivity extends DemoBase implements OnSeekBarChangeListener {
-
- private CandleStickChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_candlechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (CandleStickChart) findViewById(R.id.chart1);
-
- mChart.setDescription("");
-
- // if more than 60 entries are displayed in the chart, no values will be
- // drawn
- mChart.setMaxVisibleValueCount(60);
-
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mChart.setDrawGridBackground(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setPosition(XAxisPosition.BOTTOM);
- xAxis.setSpaceBetweenLabels(2);
-
- YAxis leftAxis = mChart.getAxisLeft();
-// leftAxis.setEnabled(false);
- leftAxis.setLabelCount(7);
- leftAxis.setDrawGridLines(false);
- leftAxis.setDrawAxisLine(false);
- leftAxis.setStartAtZero(true);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setEnabled(false);
-// rightAxis.setStartAtZero(false);
-
- // setting data
- mSeekBarX.setProgress(15);
- mSeekBarY.setProgress(100);
-
- mChart.getLegend().setEnabled(false);
-
- // Legend l = mChart.getLegend();
- // l.setPosition(LegendPosition.BELOW_CHART_CENTER);
- // l.setFormSize(8f);
- // l.setFormToTextSpace(4f);
- // l.setXEntrySpace(6f);
-
- // mChart.setDrawLegend(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.candle, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xAxis = mChart.getXAxis();
-
- if (xAxis.isAdjustXLabelsEnabled())
- xAxis.setAdjustXLabels(false);
- else
- xAxis.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToGallery("title" + System.currentTimeMillis(), 50)) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- int prog = (mSeekBarX.getProgress() + 1) * 2;
-
- tvX.setText("" + prog);
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < prog; i++) {
- float mult = (mSeekBarY.getProgress() + 1);
- float val = (float) (Math.random() * 40) + mult;
-
- float high = (float) (Math.random() * 9) + 8f;
- float low = (float) (Math.random() * 9) + 8f;
-
- float open = (float) (Math.random() * 6) + 1f;
- float close = (float) (Math.random() * 6) + 1f;
-
- boolean even = i % 2 == 0;
-
- yVals1.add(new CandleEntry(i, val + high, val - low, even ? val + open : val - open,
- even ? val - close : val + close));
- }
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < prog; i++) {
- xVals.add("" + (1990 + i));
- }
-
- CandleDataSet set1 = new CandleDataSet(yVals1, "Data Set");
- set1.setAxisDependency(AxisDependency.LEFT);
- set1.setColor(Color.rgb(80, 80, 80));
-
- CandleData data = new CandleData(xVals, set1);
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java
deleted file mode 100644
index 44e06e7bf8..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java
+++ /dev/null
@@ -1,186 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-
-import com.github.mikephil.charting.charts.CombinedChart;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.CandleData;
-import com.github.mikephil.charting.data.CandleDataSet;
-import com.github.mikephil.charting.data.CandleEntry;
-import com.github.mikephil.charting.data.CombinedData;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.ScatterData;
-import com.github.mikephil.charting.data.ScatterDataSet;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class CombinedChartActivity extends DemoBase {
-
- private CombinedChart mChart;
- private final int itemcount = 12;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_combined);
-
- mChart = (CombinedChart) findViewById(R.id.chart1);
- mChart.setDescription("");
- mChart.setDrawGridBackground(false);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setDrawGridLines(false);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setDrawGridLines(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setPosition(XAxisPosition.BOTH_SIDED);
-
- CombinedData data = new CombinedData(mMonths);
-
- data.setData(generateLineData());
- data.setData(generateBarData());
-// data.setData(generateScatterData());
-// data.setData(generateCandleData());
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- private LineData generateLineData() {
-
- LineData d = new LineData();
-
- ArrayList entries = new ArrayList();
-
- for (int index = 0; index < itemcount; index++)
- entries.add(new Entry(getRandom(15, 10), index));
-
- LineDataSet set = new LineDataSet(entries, "Line DataSet");
- set.setColor(Color.rgb(240, 238, 70));
- set.setLineWidth(2.5f);
- set.setCircleColor(Color.rgb(240, 238, 70));
- set.setCircleSize(5f);
- set.setFillColor(Color.rgb(240, 238, 70));
- set.setDrawCubic(true);
- set.setDrawValues(true);
- set.setValueTextSize(10f);
- set.setValueTextColor(Color.rgb(240, 238, 70));
-
- set.setAxisDependency(YAxis.AxisDependency.LEFT);
-
- d.addDataSet(set);
-
- return d;
- }
-
- private BarData generateBarData() {
-
- BarData d = new BarData();
-
- ArrayList entries = new ArrayList();
-
- for (int index = 0; index < itemcount; index++)
- entries.add(new BarEntry(getRandom(15, 30), index));
-
- BarDataSet set = new BarDataSet(entries, "Bar DataSet");
- set.setColor(Color.rgb(60, 220, 78));
- set.setValueTextColor(Color.rgb(60, 220, 78));
- set.setValueTextSize(10f);
- d.addDataSet(set);
-
- set.setAxisDependency(YAxis.AxisDependency.LEFT);
-
- return d;
- }
-
- private ScatterData generateScatterData() {
-
- ScatterData d = new ScatterData();
-
- ArrayList entries = new ArrayList();
-
- for (int index = 0; index < itemcount; index++)
- entries.add(new Entry(getRandom(20, 30), index));
-
- ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet");
- set.setColor(Color.GREEN);
- set.setScatterShapeSize(7.5f);
- set.setDrawValues(false);
- set.setValueTextSize(10f);
- d.addDataSet(set);
-
- return d;
- }
-
- private CandleData generateCandleData() {
-
- CandleData d = new CandleData();
-
- ArrayList entries = new ArrayList();
-
- for (int index = 0; index < itemcount; index++)
- entries.add(new CandleEntry(index, 20f, 10f, 13f, 17f));
-
- CandleDataSet set = new CandleDataSet(entries, "Candle DataSet");
- set.setColor(Color.rgb(80, 80, 80));
- set.setBodySpace(0.3f);
- set.setValueTextSize(10f);
- set.setDrawValues(false);
- d.addDataSet(set);
-
- return d;
- }
-
- private float getRandom(float range, float startsfrom) {
- return (float) (Math.random() * range) + startsfrom;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.combined, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.actionToggleLineValues: {
- for (DataSet> set : mChart.getData().getDataSets()) {
- if(set instanceof LineDataSet)
- set.setDrawValues(!set.isDrawValuesEnabled());
- }
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleBarValues: {
- for (DataSet> set : mChart.getData().getDataSets()) {
- if(set instanceof BarDataSet)
- set.setDrawValues(!set.isDrawValuesEnabled());
- }
-
- mChart.invalidate();
- break;
- }
- }
- return true;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java
deleted file mode 100644
index 026d45512d..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java
+++ /dev/null
@@ -1,292 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class CubicLineChartActivity extends DemoBase implements OnSeekBarChangeListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mSeekBarX.setProgress(45);
- mSeekBarY.setProgress(100);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- // if enabled, the chart will always start at zero on the y-axis
-
- // no description text
- mChart.setDescription("");
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mChart.setDrawGridBackground(false);
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- XAxis x = mChart.getXAxis();
- x.setTypeface(tf);
-
- YAxis y = mChart.getAxisLeft();
- y.setTypeface(tf);
- y.setLabelCount(5);
-
- mChart.getAxisRight().setEnabled(false);
-
- // add data
- setData(45, 100);
-
- mChart.getLegend().setEnabled(false);
-
- mChart.animateXY(2000, 2000);
-
- // dont forget to refresh the drawing
- mChart.invalidate();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.line, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
-
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCircles: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCirclesEnabled())
- set.setDrawCircles(false);
- else
- set.setDrawCircles(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCubic: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCubicEnabled())
- set.setDrawCubic(false);
- else
- set.setDrawCubic(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- // the angle of filtering is 35°
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 35);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
-
- // mChart.saveToGallery("title"+System.currentTimeMillis())
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress() + 1, mSeekBarY.getProgress());
-
- // redraw
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add((1990 +i) + "");
- }
-
- ArrayList vals1 = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult) + 20;// + (float)
- // ((mult *
- // 0.1) / 10);
- vals1.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(vals1, "DataSet 1");
- set1.setDrawCubic(true);
- set1.setCubicIntensity(0.2f);
- //set1.setDrawFilled(true);
- set1.setDrawCircles(false);
- set1.setLineWidth(2f);
- set1.setCircleSize(5f);
- set1.setHighLightColor(Color.rgb(244, 117, 117));
- set1.setColor(Color.rgb(104, 241, 175));
- set1.setFillColor(ColorTemplate.getHoloBlue());
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, set1);
- data.setValueTypeface(tf);
- data.setValueTextSize(9f);
- data.setDrawValues(false);
-
- // set data
- mChart.setData(data);
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java
deleted file mode 100644
index 35b8215648..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java
+++ /dev/null
@@ -1,194 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-
-import com.github.mikephil.charting.charts.Chart;
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.listener.OnDrawListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-/**
- * This Activity demonstrates drawing into the Chart with the finger. Both line,
- * bar and scatter charts can be used for drawing.
- *
- * @author Philipp Jahoda
- */
-public class DrawChartActivity extends DemoBase implements OnChartValueSelectedListener,
- OnDrawListener {
-
- private LineChart mChart;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_draw_chart);
-
- mChart = (LineChart) findViewById(R.id.chart1);
-
- // listener for selecting and drawing
- mChart.setOnChartValueSelectedListener(this);
- mChart.setOnDrawListener(this);
-
- // enable drawing with the finger
- // mChart.setDrawingEnabled(true);
-
- // mChart.setLineWidth(5f);
- // mChart.setCircleSize(5f);
-
- mChart.setHighlightEnabled(true);
-
- // if disabled, drawn datasets with the finger will not be automatically
- // finished
- // mChart.setAutoFinish(true);
- mChart.setDrawGridBackground(false);
-
- // add dummy-data to the chart
- initWithDummyData();
-
- Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- XAxis xl = mChart.getXAxis();
- xl.setTypeface(tf);
- xl.setAvoidFirstLastClipping(true);
-
- YAxis yl = mChart.getAxisLeft();
- yl.setTypeface(tf);
-
- mChart.getLegend().setEnabled(false);
-
- // mChart.setYRange(-40f, 40f, true);
- // call this to reset the changed y-range
- // mChart.resetYRange(true);
- }
-
- private void initWithDummyData() {
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < 24; i++) {
- xVals.add((i) + ":00");
- }
-
- ArrayList yVals = new ArrayList();
-
- // create a dataset and give it a type (0)
- LineDataSet set1 = new LineDataSet(yVals, "DataSet");
- set1.setLineWidth(3f);
- set1.setCircleSize(5f);
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1); // add the datasets
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, dataSets);
-
- mChart.setData(data);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.draw, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- // mChart.saveToGallery("title"+System.currentTimeMillis());
- mChart.saveToPath("title" + System.currentTimeMillis(), "");
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("VAL SELECTED",
- "Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
- + ", DataSet index: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- }
-
- /** callback for each new entry drawn with the finger */
- @Override
- public void onEntryAdded(Entry entry) {
- Log.i(Chart.LOG_TAG, entry.toString());
- }
-
- /** callback when a DataSet has been drawn (when lifting the finger) */
- @Override
- public void onDrawFinished(DataSet dataSet) {
- Log.i(Chart.LOG_TAG, "DataSet drawn. " + dataSet.toSimpleString());
-
- // prepare the legend again
- mChart.getLegendRenderer().computeLegend(mChart.getData(), mChart.getLegend());
- }
-
- @Override
- public void onEntryMoved(Entry entry) {
- Log.i(Chart.LOG_TAG, "Point moved " + entry.toString());
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java
deleted file mode 100644
index 203188bfcb..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java
+++ /dev/null
@@ -1,221 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.YAxis.AxisDependency;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class DynamicalAddingActivity extends DemoBase implements OnChartValueSelectedListener {
-
- private LineChart mChart;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart_noseekbar);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
- mChart.setDrawGridBackground(false);
- mChart.setDescription("");
-
- // add an empty data object
- mChart.setData(new LineData());
-
- mChart.invalidate();
- }
-
- int[] mColors = ColorTemplate.VORDIPLOM_COLORS;
-
- private void addEntry() {
-
- LineData data = mChart.getData();
-
- if(data != null) {
-
- LineDataSet set = data.getDataSetByIndex(0);
- // set.addEntry(...); // can be called as well
-
- if (set == null) {
- set = createSet();
- data.addDataSet(set);
- }
-
- // add a new x-value first
- data.addXValue(set.getEntryCount() + "");
-
- // choose a random dataSet
- int randomDataSetIndex = (int) (Math.random() * data.getDataSetCount());
-
- data.addEntry(new Entry((float) (Math.random() * 10) + 50f, set.getEntryCount()), randomDataSetIndex);
-
- // let the chart know it's data has changed
- mChart.notifyDataSetChanged();
-
-// mChart.setVisibleXRange(6);
-// mChart.setVisibleYRange(30, AxisDependency.LEFT);
-//
-// // this automatically refreshes the chart (calls invalidate())
-// mChart.moveViewTo(data.getXValCount()-7, 55f, AxisDependency.LEFT);
-
- // redraw the chart
- mChart.invalidate();
- }
- }
-
- private void removeLastEntry() {
-
- LineData data = mChart.getData();
-
- if(data != null) {
-
- LineDataSet set = data.getDataSetByIndex(0);
-
- if (set != null) {
-
- Entry e = set.getEntryForXIndex(set.getEntryCount() - 1);
-
- data.removeEntry(e, 0);
- // or remove by index
- // mData.removeEntry(xIndex, dataSetIndex);
-
- mChart.notifyDataSetChanged();
- mChart.invalidate();
- }
- }
- }
-
- private void addDataSet() {
-
- LineData data = mChart.getData();
-
- if(data != null) {
-
- int count = (data.getDataSetCount() + 1);
-
- // create 10 y-vals
- ArrayList yVals = new ArrayList();
-
- if(data.getXValCount() == 0) {
- // add 10 x-entries
- for (int i = 0; i < 10; i++) {
- data.addXValue("" + (i+1));
- }
- }
-
- for (int i = 0; i < data.getXValCount(); i++) {
- yVals.add(new Entry((float) (Math.random() * 50f) + 50f * count, i));
- }
-
- LineDataSet set = new LineDataSet(yVals, "DataSet " + count);
- set.setLineWidth(2.5f);
- set.setCircleSize(4.5f);
-
- int color = mColors[count % mColors.length];
-
- set.setColor(color);
- set.setCircleColor(color);
- set.setHighLightColor(color);
- set.setValueTextSize(10f);
- set.setValueTextColor(color);
-
- data.addDataSet(set);
- mChart.notifyDataSetChanged();
- mChart.invalidate();
- }
- }
-
- private void removeDataSet() {
-
- LineData data = mChart.getData();
-
- if(data != null) {
-
- data.removeDataSet(data.getDataSetByIndex(data.getDataSetCount() - 1));
-
- mChart.notifyDataSetChanged();
- mChart.invalidate();
- }
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void onNothingSelected() {
-
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.dynamical, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionAddEntry:
- addEntry();
- Toast.makeText(this, "Entry added!", Toast.LENGTH_SHORT).show();
- break;
- case R.id.actionRemoveEntry:
- removeLastEntry();
- Toast.makeText(this, "Entry removed!", Toast.LENGTH_SHORT).show();
- break;
- case R.id.actionAddDataSet:
- addDataSet();
- Toast.makeText(this, "DataSet added!", Toast.LENGTH_SHORT).show();
- break;
- case R.id.actionRemoveDataSet:
- removeDataSet();
- Toast.makeText(this, "DataSet removed!", Toast.LENGTH_SHORT).show();
- break;
- case R.id.actionAddEmptyLineData:
- mChart.setData(new LineData());
- mChart.invalidate();
- Toast.makeText(this, "Empty data added!", Toast.LENGTH_SHORT).show();
- break;
- case R.id.actionClear:
- mChart.clear();
- Toast.makeText(this, "Chart cleared!", Toast.LENGTH_SHORT).show();
- break;
- }
-
- return true;
- }
-
- private LineDataSet createSet() {
-
- LineDataSet set = new LineDataSet(null, "DataSet 1");
- set.setLineWidth(2.5f);
- set.setCircleSize(4.5f);
- set.setColor(Color.rgb(240, 99, 99));
- set.setCircleColor(Color.rgb(240, 99, 99));
- set.setHighLightColor(Color.rgb(190, 190, 190));
- set.setAxisDependency(AxisDependency.LEFT);
- set.setValueTextSize(10f);
-
- return set;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java
deleted file mode 100644
index db15dfc0db..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java
+++ /dev/null
@@ -1,288 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.annotation.SuppressLint;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.HorizontalBarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class HorizontalBarChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- protected HorizontalBarChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_horizontalbarchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mChart = (HorizontalBarChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
- // mChart.setHighlightEnabled(false);
-
- mChart.setDrawBarShadow(false);
-
- mChart.setDrawValueAboveBar(true);
-
- mChart.setDescription("");
-
- // if more than 60 entries are displayed in the chart, no values will be
- // drawn
- mChart.setMaxVisibleValueCount(60);
-
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- // draw shadows for each bar that show the maximum value
- // mChart.setDrawBarShadow(true);
-
- // mChart.setDrawXLabels(false);
-
- mChart.setDrawGridBackground(false);
-
- // mChart.setDrawYLabels(false);
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- XAxis xl = mChart.getXAxis();
- xl.setPosition(XAxisPosition.BOTTOM);
- xl.setTypeface(tf);
- xl.setDrawAxisLine(true);
- xl.setDrawGridLines(true);
- xl.setGridLineWidth(0.3f);
- // xl.setEnabled(false);
-
- YAxis yl = mChart.getAxisLeft();
- yl.setTypeface(tf);
- yl.setDrawAxisLine(true);
- yl.setDrawGridLines(true);
- yl.setGridLineWidth(0.3f);
-
- YAxis yr = mChart.getAxisRight();
- yr.setTypeface(tf);
- yr.setDrawAxisLine(true);
- yr.setDrawGridLines(false);
-
- setData(12, 50);
- mChart.animateY(2500);
-
- // setting data
- mSeekBarY.setProgress(50);
- mSeekBarX.setProgress(12);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.BELOW_CHART_LEFT);
- l.setFormSize(8f);
- l.setXEntrySpace(4f);
-
- // mChart.setDrawLegend(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.bar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlightArrow: {
- if (mChart.isDrawHighlightArrowEnabled())
- mChart.setDrawHighlightArrow(false);
- else
- mChart.setDrawHighlightArrow(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 25);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToGallery("title" + System.currentTimeMillis(), 50)) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress(), mSeekBarY.getProgress());
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add(mMonths[i % 12]);
- }
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult);
- yVals1.add(new BarEntry(val, i));
- }
-
- BarDataSet set1 = new BarDataSet(yVals1, "DataSet");
- set1.setBarSpacePercent(35f);
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
-
- BarData data = new BarData(xVals, dataSets);
- data.setValueTextSize(10f);
- data.setValueTypeface(tf);
-
- mChart.setData(data);
- }
-
- @SuppressLint("NewApi")
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
-
- if (e == null)
- return;
-
- RectF bounds = mChart.getBarBounds((BarEntry) e);
- PointF position = mChart.getPosition(e, mChart.getData().getDataSetByIndex(dataSetIndex)
- .getAxisDependency());
-
- Log.i("bounds", bounds.toString());
- Log.i("position", position.toString());
- }
-
- public void onNothingSelected() {
- };
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java
deleted file mode 100644
index a2284d3e5b..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java
+++ /dev/null
@@ -1,305 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class InvertedLineChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mSeekBarX.setProgress(45);
- mSeekBarY.setProgress(100);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- // no description text
- mChart.setDescription("");
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(true);
-
- // set an alternative background color
- // mChart.setBackgroundColor(Color.GRAY);
-
- // create a custom MarkerView (extend MarkerView) and specify the layout
- // to use for it
- MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
-
- // set the marker to the chart
- mChart.setMarkerView(mv);
-
- // enable/disable highlight indicators (the lines that indicate the
- // highlighted Entry)
- mChart.setHighlightIndicatorEnabled(false);
-
- XAxis xl = mChart.getXAxis();
- xl.setAvoidFirstLastClipping(true);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setInverted(true);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setEnabled(false);
-
- // add data
- setData(25, 50);
-
- // // restrain the maximum scale-out factor
- // mChart.setScaleMinima(3f, 3f);
- //
- // // center the view to a specific position inside the chart
- // mChart.centerViewPort(10, 50);
-
- // get the legend (only possible after setting data)
- Legend l = mChart.getLegend();
-
- // modify the legend ...
- // l.setPosition(LegendPosition.LEFT_OF_CHART);
- l.setForm(LegendForm.LINE);
-
- // dont forget to refresh the drawing
- mChart.invalidate();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.line, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
-
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCircles: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCirclesEnabled())
- set.setDrawCircles(false);
- else
- set.setDrawCircles(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- // the angle of filtering is 35°
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 35);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
-
- // mChart.saveToGallery("title"+System.currentTimeMillis())
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress() + 1, mSeekBarY.getProgress());
-
- // redraw
- mChart.invalidate();
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("VAL SELECTED",
- "Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
- + ", DataSet index: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add((i % 30) + "/" + (i % 12) + "/14");
- }
-
- ArrayList yVals = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult) + 3;// + (float)
- // ((mult *
- // 0.1) / 10);
- yVals.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(yVals, "DataSet 1");
-
- set1.setLineWidth(1.5f);
- set1.setCircleSize(4f);
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, set1);
-
- // set data
- mChart.setData(data);
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java
deleted file mode 100644
index 023218ed75..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java
+++ /dev/null
@@ -1,382 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.LimitLine;
-import com.github.mikephil.charting.components.LimitLine.LimitLabelPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartGestureListener;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class LineChartActivity1 extends DemoBase implements OnSeekBarChangeListener,
- OnChartGestureListener, OnChartValueSelectedListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mSeekBarX.setProgress(45);
- mSeekBarY.setProgress(100);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartGestureListener(this);
- mChart.setOnChartValueSelectedListener(this);
-
- // no description text
- mChart.setDescription("");
- mChart.setNoDataTextDescription("You need to provide data for the chart.");
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(true);
-
- // set an alternative background color
- // mChart.setBackgroundColor(Color.GRAY);
-
- // create a custom MarkerView (extend MarkerView) and specify the layout
- // to use for it
- MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
-
- // set the marker to the chart
- mChart.setMarkerView(mv);
-
- // enable/disable highlight indicators (the lines that indicate the
- // highlighted Entry)
- mChart.setHighlightIndicatorEnabled(false);
-
- // add data
- setData(45, 100);
- mChart.animateX(2500);
-// mChart.setVisibleYRange(30, AxisDependency.LEFT);
-
-// // restrain the maximum scale-out factor
-// mChart.setScaleMinima(3f, 3f);
-//
-// // center the view to a specific position inside the chart
-// mChart.centerViewPort(10, 50, AxisDependency.LEFT);
-
- // get the legend (only possible after setting data)
- Legend l = mChart.getLegend();
-
- // modify the legend ...
- // l.setPosition(LegendPosition.LEFT_OF_CHART);
- l.setForm(LegendForm.LINE);
-
- // // dont forget to refresh the drawing
- // mChart.invalidate();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.line, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
-
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCircles: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCirclesEnabled())
- set.setDrawCircles(false);
- else
- set.setDrawCircles(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCubic: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCubicEnabled())
- set.setDrawCubic(false);
- else
- set.setDrawCubic(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- // the angle of filtering is 35°
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 35);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
-
- //
- // for(int i = 0; i < 10; i++) {
- // mChart.addEntry(new Entry((float) (Math.random() * 100),
- // i+2), 0);
- // mChart.invalidate();
- // }
- //
- // Toast.makeText(getApplicationContext(), "valcount: " +
- // mChart.getDataOriginal().getYValCount() + ", valsum: " +
- // mChart.getDataOriginal().getYValueSum(),
- // Toast.LENGTH_SHORT).show();
- //
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
-
- // mChart.saveToGallery("title"+System.currentTimeMillis())
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress() + 1, mSeekBarY.getProgress());
-
- // redraw
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add((i) + "");
- }
-
- ArrayList yVals = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult) + 3;// + (float)
- // ((mult *
- // 0.1) / 10);
- yVals.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(yVals, "DataSet 1");
- // set1.setFillAlpha(110);
- // set1.setFillColor(Color.RED);
-
- // set the line to be drawn like this "- - - - - -"
- set1.enableDashedLine(10f, 5f, 0f);
- set1.setColor(Color.BLACK);
- set1.setCircleColor(Color.BLACK);
- set1.setLineWidth(1f);
- set1.setCircleSize(4f);
- set1.setFillAlpha(65);
- set1.setFillColor(Color.BLACK);
- // set1.setShader(new LinearGradient(0, 0, 0, mChart.getHeight(),
- // Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1); // add the datasets
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, dataSets);
- data.setValueTextSize(10f);
-
- LimitLine ll1 = new LimitLine(130f, "Upper Limit");
- ll1.setLineWidth(4f);
- ll1.enableDashedLine(10f, 10f, 0f);
- ll1.setLabelPosition(LimitLabelPosition.POS_RIGHT);
- ll1.setTextSize(10f);
-
- LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
- ll2.setLineWidth(4f);
- ll2.enableDashedLine(10f, 10f, 0f);
- ll2.setLabelPosition(LimitLabelPosition.POS_RIGHT);
- ll2.setTextSize(10f);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.addLimitLine(ll1);
- leftAxis.addLimitLine(ll2);
- leftAxis.setAxisMaxValue(220f);
- leftAxis.setAxisMinValue(-50f);
- leftAxis.setStartAtZero(false);
-
- mChart.getAxisRight().setEnabled(false);
-
- // set data
- mChart.setData(data);
- }
-
- @Override
- public void onChartLongPressed(MotionEvent me) {
- Log.i("LongPress", "Chart longpressed.");
- }
-
- @Override
- public void onChartDoubleTapped(MotionEvent me) {
- Log.i("DoubleTap", "Chart double-tapped.");
- }
-
- @Override
- public void onChartSingleTapped(MotionEvent me) {
- Log.i("SingleTap", "Chart single-tapped.");
- }
-
- @Override
- public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
- Log.i("Fling", "Chart flinged. VeloX: " + velocityX + ", VeloY: " + velocityY);
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("Entry selected", e.toString());
- }
-
- @Override
- public void onNothingSelected() {
- Log.i("Nothing selected", "Nothing selected.");
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java
deleted file mode 100644
index f381c6073f..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java
+++ /dev/null
@@ -1,352 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.components.YAxis.AxisDependency;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class LineChartActivity2 extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mSeekBarX.setProgress(45);
- mSeekBarY.setProgress(100);
-
- mSeekBarY.setOnSeekBarChangeListener(this);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- // no description text
- mChart.setDescription("");
- mChart.setNoDataTextDescription("You need to provide data for the chart.");
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
- mChart.setDrawGridBackground(false);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(true);
-
- // set an alternative background color
- mChart.setBackgroundColor(Color.LTGRAY);
-
- // add data
- setData(20, 30);
-
- mChart.animateX(2500);
-
- Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- // get the legend (only possible after setting data)
- Legend l = mChart.getLegend();
-
- // modify the legend ...
- // l.setPosition(LegendPosition.LEFT_OF_CHART);
- l.setForm(LegendForm.LINE);
- l.setTypeface(tf);
- l.setTextSize(11f);
- l.setTextColor(Color.WHITE);
- l.setPosition(LegendPosition.BELOW_CHART_LEFT);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setTypeface(tf);
- xAxis.setTextSize(12f);
- xAxis.setTextColor(Color.WHITE);
- xAxis.setDrawGridLines(false);
- xAxis.setDrawAxisLine(false);
- xAxis.setSpaceBetweenLabels(1);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
- leftAxis.setTextColor(ColorTemplate.getHoloBlue());
- leftAxis.setAxisMaxValue(200f);
- leftAxis.setDrawGridLines(true);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setTypeface(tf);
- rightAxis.setTextColor(Color.RED);
- rightAxis.setAxisMaxValue(900);
- rightAxis.setStartAtZero(false);
- rightAxis.setAxisMinValue(-200);
- rightAxis.setDrawGridLines(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.line, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
-
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCircles: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCirclesEnabled())
- set.setDrawCircles(false);
- else
- set.setDrawCircles(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCubic: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCubicEnabled())
- set.setDrawCubic(false);
- else
- set.setDrawCubic(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- // the angle of filtering is 35°
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 35);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
-
- // mChart.saveToGallery("title"+System.currentTimeMillis())
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress() + 1, mSeekBarY.getProgress());
-
- // redraw
- mChart.invalidate();
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add((i) + "");
- }
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = range / 2f;
- float val = (float) (Math.random() * mult) + 50;// + (float)
- // ((mult *
- // 0.1) / 10);
- yVals1.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(yVals1, "DataSet 1");
- set1.setAxisDependency(AxisDependency.LEFT);
- set1.setColor(ColorTemplate.getHoloBlue());
- set1.setCircleColor(ColorTemplate.getHoloBlue());
- set1.setLineWidth(2f);
- set1.setCircleSize(4f);
- set1.setFillAlpha(65);
- set1.setFillColor(ColorTemplate.getHoloBlue());
- set1.setHighLightColor(Color.rgb(244, 117, 117));
-
- ArrayList yVals2 = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = range;
- float val = (float) (Math.random() * mult) + 450;// + (float)
- // ((mult *
- // 0.1) / 10);
- yVals2.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set2 = new LineDataSet(yVals2, "DataSet 2");
- set2.setAxisDependency(AxisDependency.RIGHT);
- set2.setColor(Color.RED);
- set2.setCircleColor(Color.RED);
- set2.setLineWidth(2f);
- set2.setCircleSize(4f);
- set2.setFillAlpha(65);
- set2.setFillColor(Color.RED);
- set2.setHighLightColor(Color.rgb(244, 117, 117));
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
- dataSets.add(set2); // add the datasets
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, dataSets);
- data.setValueTextColor(Color.WHITE);
- data.setValueTextSize(9f);
-
- // set data
- mChart.setData(data);
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("Entry selected", e.toString());
- }
-
- @Override
- public void onNothingSelected() {
- Log.i("Nothing selected", "Nothing selected.");
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/MultiLineChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/MultiLineChartActivity.java
deleted file mode 100644
index 666bc45006..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/MultiLineChartActivity.java
+++ /dev/null
@@ -1,260 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class MultiLineChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_linechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- mChart.setDrawGridBackground(false);
-
- // mChart.setStartAtZero(true);
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mSeekBarX.setProgress(20);
- mSeekBarY.setProgress(100);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.line, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleCircles: {
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (LineDataSet set : sets) {
- if (set.isDrawCirclesEnabled())
- set.setDrawCircles(false);
- else
- set.setDrawCircles(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- // the angle of filtering is 35°
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 35);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- // mChart.saveToGallery("title"+System.currentTimeMillis());
- mChart.saveToPath("title" + System.currentTimeMillis(), "");
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- }
- return true;
- }
-
- private int[] mColors = new int[] {
- ColorTemplate.VORDIPLOM_COLORS[0],
- ColorTemplate.VORDIPLOM_COLORS[1],
- ColorTemplate.VORDIPLOM_COLORS[2]
- };
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress()));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- xVals.add((i) + "");
- }
-
- ArrayList dataSets = new ArrayList();
-
- for (int z = 0; z < 3; z++) {
-
- ArrayList values = new ArrayList();
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- double val = (Math.random() * mSeekBarY.getProgress()) + 3;
- values.add(new Entry((float) val, i));
- }
-
- LineDataSet d = new LineDataSet(values, "DataSet " + (z + 1));
- d.setLineWidth(2.5f);
- d.setCircleSize(4f);
-
- int color = mColors[z % mColors.length];
- d.setColor(color);
- d.setCircleColor(color);
- dataSets.add(d);
- }
-
- // make the first DataSet dashed
- dataSets.get(0).enableDashedLine(10, 10, 0);
- dataSets.get(0).setColors(ColorTemplate.VORDIPLOM_COLORS);
- dataSets.get(0).setCircleColors(ColorTemplate.VORDIPLOM_COLORS);
-
- LineData data = new LineData(xVals, dataSets);
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("VAL SELECTED",
- "Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
- + ", DataSet index: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PerformanceLineChart.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PerformanceLineChart.java
deleted file mode 100644
index 300ab09aa2..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PerformanceLineChart.java
+++ /dev/null
@@ -1,132 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.os.Bundle;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class PerformanceLineChart extends DemoBase implements OnSeekBarChangeListener {
-
- private LineChart mChart;
- private SeekBar mSeekBarValues;
- private TextView mTvCount;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_performance_linechart);
-
- mTvCount = (TextView) findViewById(R.id.tvValueCount);
- mSeekBarValues = (SeekBar) findViewById(R.id.seekbarValues);
- mTvCount.setText("500");
-
- mSeekBarValues.setProgress(500);
-
- mSeekBarValues.setOnSeekBarChangeListener(this);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setDrawGridBackground(false);
-
- // no description text
- mChart.setDescription("");
- mChart.setNoDataTextDescription("You need to provide data for the chart.");
-
- // disable value highlighting
- mChart.setHighlightEnabled(false);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- // enable/disable highlight indicators (the lines that indicate the
- // highlighted Entry)
- mChart.setHighlightIndicatorEnabled(false);
-
- mChart.getAxisLeft().setDrawGridLines(false);
- mChart.getAxisRight().setEnabled(false);
- mChart.getXAxis().setDrawGridLines(false);
- mChart.getXAxis().setDrawAxisLine(false);
-
- // dont forget to refresh the drawing
- mChart.invalidate();
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- mTvCount.setText("" + (mSeekBarValues.getProgress()));
-
- setData(mSeekBarValues.getProgress(), 500f);
-
- // redraw
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- private void setData(int count, float range) {
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add((i) + "");
- }
-
- ArrayList yVals = new ArrayList();
-
- for (int i = 0; i < count; i++) {
- float mult = (range + 1);
- float val = (float) (Math.random() * mult) + 3;// + (float)
- // ((mult *
- // 0.1) / 10);
- yVals.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(yVals, "DataSet 1");
-
- set1.setColor(Color.BLACK);
- set1.setLineWidth(1f);
- set1.setDrawValues(false);
- set1.setDrawCircles(false);
-
- // create a data object with the datasets
- LineData data = new LineData(xVals, set1);
-
- // set data
- mChart.setData(data);
-
- // get the legend (only possible after setting data)
- Legend l = mChart.getLegend();
- l.setEnabled(false);
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java
deleted file mode 100644
index fa8c91483c..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java
+++ /dev/null
@@ -1,298 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.charts.PieChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.PieData;
-import com.github.mikephil.charting.data.PieDataSet;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.github.mikephil.charting.utils.PercentFormatter;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class PieChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private PieChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_piechart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
-
- mSeekBarY.setProgress(10);
-
- mSeekBarX.setOnSeekBarChangeListener(this);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (PieChart) findViewById(R.id.chart1);
- mChart.setUsePercentValues(true);
-
- // change the color of the center-hole
- // mChart.setHoleColor(Color.rgb(235, 235, 235));
- mChart.setHoleColorTransparent(true);
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- mChart.setCenterTextTypeface(Typeface.createFromAsset(getAssets(), "OpenSans-Light.ttf"));
-
- mChart.setHoleRadius(60f);
-
- mChart.setDescription("");
-
- mChart.setDrawCenterText(true);
-
- mChart.setDrawHoleEnabled(true);
-
- mChart.setRotationAngle(0);
- // enable rotation of the chart by touch
- mChart.setRotationEnabled(true);
-
- // mChart.setUnit(" €");
- // mChart.setDrawUnitsInChart(true);
-
- // add a selection listener
- mChart.setOnChartValueSelectedListener(this);
- // mChart.setTouchEnabled(false);
-
- mChart.setCenterText("MPAndroidChart\nLibrary");
-
- setData(3, 100);
-
- mChart.animateXY(1500, 1500);
- // mChart.spin(2000, 0, 360);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART);
- l.setXEntrySpace(7f);
- l.setYEntrySpace(5f);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.pie, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHole: {
- if (mChart.isDrawHoleEnabled())
- mChart.setDrawHoleEnabled(false);
- else
- mChart.setDrawHoleEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionDrawCenter: {
- if (mChart.isDrawCenterTextEnabled())
- mChart.setDrawCenterText(false);
- else
- mChart.setDrawCenterText(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleXVals: {
-
- mChart.setDrawSliceText(!mChart.isDrawSliceTextEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- // mChart.saveToGallery("title"+System.currentTimeMillis());
- mChart.saveToPath("title" + System.currentTimeMillis(), "");
- break;
- }
- case R.id.actionTogglePercent:
- mChart.setUsePercentValues(!mChart.isUsePercentValuesEnabled());
- mChart.invalidate();
- break;
- case R.id.animateX: {
- mChart.animateX(1800);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(1800);
- break;
- }
- case R.id.animateXY: {
- mChart.animateXY(1800, 1800);
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- setData(mSeekBarX.getProgress(), mSeekBarY.getProgress());
- }
-
- private void setData(int count, float range) {
-
- float mult = range;
-
- ArrayList yVals1 = new ArrayList();
-
- // IMPORTANT: In a PieChart, no values (Entry) should have the same
- // xIndex (even if from different DataSets), since no values can be
- // drawn above each other.
- for (int i = 0; i < count + 1; i++) {
- yVals1.add(new Entry((float) (Math.random() * mult) + mult / 5, i));
- }
-
- ArrayList xVals = new ArrayList();
-
- for (int i = 0; i < count + 1; i++)
- xVals.add(mParties[i % mParties.length]);
-
- PieDataSet dataSet = new PieDataSet(yVals1, "Election Results");
- dataSet.setSliceSpace(3f);
-
- // add a lot of colors
-
- ArrayList colors = new ArrayList();
-
- for (int c : ColorTemplate.VORDIPLOM_COLORS)
- colors.add(c);
-
- for (int c : ColorTemplate.JOYFUL_COLORS)
- colors.add(c);
-
- for (int c : ColorTemplate.COLORFUL_COLORS)
- colors.add(c);
-
- for (int c : ColorTemplate.LIBERTY_COLORS)
- colors.add(c);
-
- for (int c : ColorTemplate.PASTEL_COLORS)
- colors.add(c);
-
- colors.add(ColorTemplate.getHoloBlue());
-
- dataSet.setColors(colors);
-
- PieData data = new PieData(xVals, dataSet);
- data.setValueFormatter(new PercentFormatter());
- data.setValueTextSize(11f);
- data.setValueTextColor(Color.WHITE);
- data.setValueTypeface(tf);
- mChart.setData(data);
-
- // undo all highlights
- mChart.highlightValues(null);
-
- mChart.invalidate();
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
-
- if (e == null)
- return;
- Log.i("VAL SELECTED",
- "Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
- + ", DataSet index: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- Log.i("PieChart", "nothing selected");
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- // private void removeLastEntry() {
- //
- // PieData data = mChart.getDataOriginal();
- //
- // if (data != null) {
- //
- // PieDataSet set = data.getDataSet();
- //
- // if (set != null) {
- //
- // Entry e = set.getEntryForXIndex(set.getEntryCount() - 1);
- //
- // data.removeEntry(e, 0);
- // // or remove by index
- // // mData.removeEntry(xIndex, dataSetIndex);
- //
- // mChart.notifyDataSetChanged();
- // mChart.invalidate();
- // }
- // }
- // }
- //
- // private void addEntry() {
- //
- // PieData data = mChart.getDataOriginal();
- //
- // if (data != null) {
- //
- // PieDataSet set = data.getDataSet();
- // // set.addEntry(...);
- //
- // data.addEntry(new Entry((float) (Math.random() * 25) + 20f,
- // set.getEntryCount()), 0);
- //
- // // let the chart know it's data has changed
- // mChart.notifyDataSetChanged();
- //
- // // redraw the chart
- // mChart.invalidate();
- // }
- // }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RadarChartActivitry.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RadarChartActivitry.java
deleted file mode 100644
index b8e91db183..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RadarChartActivitry.java
+++ /dev/null
@@ -1,201 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.RadarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.RadarData;
-import com.github.mikephil.charting.data.RadarDataSet;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class RadarChartActivitry extends DemoBase {
-
- private RadarChart mChart;
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_radarchart);
-
- mChart = (RadarChart) findViewById(R.id.chart1);
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- mChart.setDescription("");
-
- mChart.setWebLineWidth(1.5f);
- mChart.setWebLineWidthInner(0.75f);
- mChart.setWebAlpha(100);
-
- // create a custom MarkerView (extend MarkerView) and specify the layout
- // to use for it
- MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
-
- // set the marker to the chart
- mChart.setMarkerView(mv);
-
- setData();
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setTypeface(tf);
- xAxis.setTextSize(9f);
-
- YAxis yAxis = mChart.getYAxis();
- yAxis.setTypeface(tf);
- yAxis.setLabelCount(5);
- yAxis.setTextSize(9f);
- yAxis.setStartAtZero(true);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART);
- l.setTypeface(tf);
- l.setXEntrySpace(7f);
- l.setYEntrySpace(5f);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.radar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleRotate: {
- if (mChart.isRotationEnabled())
- mChart.setRotationEnabled(false);
- else
- mChart.setRotationEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilled: {
-
- ArrayList sets = (ArrayList) mChart.getData()
- .getDataSets();
-
- for (RadarDataSet set : sets) {
- if (set.isDrawFilledEnabled())
- set.setDrawFilled(false);
- else
- set.setDrawFilled(true);
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- case R.id.actionToggleXLabels: {
- mChart.getXAxis().setEnabled(!mChart.getXAxis().isEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleYLabels: {
-
- mChart.getYAxis().setEnabled(!mChart.getYAxis().isEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleSpin: {
- mChart.spin(2000, mChart.getRotationAngle(), mChart.getRotationAngle() + 360);
- break;
- }
- }
- return true;
- }
-
- private String[] mParties = new String[] {
- "Party A", "Party B", "Party C", "Party D", "Party E", "Party F", "Party G", "Party H",
- "Party I"
- };
-
- public void setData() {
-
- float mult = 150;
- int cnt = 9;
-
- ArrayList yVals1 = new ArrayList();
- ArrayList yVals2 = new ArrayList();
-
- // IMPORTANT: In a PieChart, no values (Entry) should have the same
- // xIndex (even if from different DataSets), since no values can be
- // drawn above each other.
- for (int i = 0; i < cnt; i++) {
- yVals1.add(new Entry((float) (Math.random() * mult) + mult / 2, i));
- }
-
- for (int i = 0; i < cnt; i++) {
- yVals2.add(new Entry((float) (Math.random() * mult) + mult / 2, i));
- }
-
- ArrayList xVals = new ArrayList();
-
- for (int i = 0; i < cnt; i++)
- xVals.add(mParties[i % mParties.length]);
-
- RadarDataSet set1 = new RadarDataSet(yVals1, "Set 1");
- set1.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
- set1.setDrawFilled(true);
- set1.setLineWidth(2f);
-
- RadarDataSet set2 = new RadarDataSet(yVals2, "Set 2");
- set2.setColor(ColorTemplate.VORDIPLOM_COLORS[4]);
- set2.setDrawFilled(true);
- set2.setLineWidth(2f);
-
- ArrayList sets = new ArrayList();
- sets.add(set1);
- sets.add(set2);
-
- RadarData data = new RadarData(xVals, sets);
- data.setValueTypeface(tf);
- data.setValueTextSize(8f);
- data.setDrawValues(false);
-
- mChart.setData(data);
-
- mChart.invalidate();
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java
deleted file mode 100644
index 6ae19d6f92..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java
+++ /dev/null
@@ -1,176 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.components.YAxis.AxisDependency;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.LineData;
-import com.github.mikephil.charting.data.LineDataSet;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-public class RealtimeLineChartActivity extends DemoBase implements
- OnChartValueSelectedListener {
-
- private LineChart mChart;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_realtime_linechart);
-
- mChart = (LineChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- // no description text
- mChart.setDescription("");
- mChart.setNoDataTextDescription("You need to provide data for the chart.");
-
- // enable value highlighting
- mChart.setHighlightEnabled(true);
-
- // enable touch gestures
- mChart.setTouchEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
- mChart.setDrawGridBackground(false);
-
- // if disabled, scaling can be done on x- and y-axis separately
- mChart.setPinchZoom(true);
-
- // set an alternative background color
- mChart.setBackgroundColor(Color.LTGRAY);
-
- LineData data = new LineData();
- data.setValueTextColor(Color.WHITE);
-
- // add empty data
- mChart.setData(data);
-
- Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- // get the legend (only possible after setting data)
- Legend l = mChart.getLegend();
-
- // modify the legend ...
- // l.setPosition(LegendPosition.LEFT_OF_CHART);
- l.setForm(LegendForm.LINE);
- l.setTypeface(tf);
- l.setTextColor(Color.WHITE);
-
- XAxis xl = mChart.getXAxis();
- xl.setTypeface(tf);
- xl.setTextColor(Color.WHITE);
- xl.setDrawGridLines(false);
- xl.setAvoidFirstLastClipping(true);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
- leftAxis.setTextColor(Color.WHITE);
- leftAxis.setAxisMaxValue(120f);
- leftAxis.setDrawGridLines(true);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setEnabled(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.realtime, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionAdd: {
- addEntry();
- break;
- }
- }
- return true;
- }
-
- private int year = 15;
-
- private void addEntry() {
-
- LineData data = mChart.getData();
-
- if (data != null) {
-
- LineDataSet set = data.getDataSetByIndex(0);
- // set.addEntry(...); // can be called as well
-
- if (set == null) {
- set = createSet();
- data.addDataSet(set);
- }
-
- // add a new x-value first
- data.addXValue(mMonths[data.getXValCount() % 12] + " " + (year + data.getXValCount() / 12));
- data.addEntry(new Entry((float) (Math.random() * 40) + 40f, set.getEntryCount()), 0);
-
- // let the chart know it's data has changed
- mChart.notifyDataSetChanged();
-
- // limit the number of visible entries
- mChart.setVisibleXRange(6);
- // mChart.setVisibleYRange(30, AxisDependency.LEFT);
-
- // move to the latest entry
- mChart.moveViewToX(data.getXValCount()-7);
-
- // this automatically refreshes the chart (calls invalidate())
-// mChart.moveViewTo(data.getXValCount()-7, 55f, AxisDependency.LEFT);
-
- // redraw the chart
-// mChart.invalidate();
- }
- }
-
- private LineDataSet createSet() {
-
- LineDataSet set = new LineDataSet(null, "Dynamic Data");
- set.setAxisDependency(AxisDependency.LEFT);
- set.setColor(ColorTemplate.getHoloBlue());
- set.setCircleColor(ColorTemplate.getHoloBlue());
- set.setLineWidth(2f);
- set.setCircleSize(4f);
- set.setFillAlpha(65);
- set.setFillColor(ColorTemplate.getHoloBlue());
- set.setHighLightColor(Color.rgb(244, 117, 117));
- set.setValueTextColor(Color.WHITE);
- set.setValueTextSize(10f);
- return set;
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("Entry selected", e.toString());
- }
-
- @Override
- public void onNothingSelected() {
- Log.i("Nothing selected", "Nothing selected.");
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ScatterChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ScatterChartActivity.java
deleted file mode 100644
index f63c7e99ca..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ScatterChartActivity.java
+++ /dev/null
@@ -1,261 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.charts.ScatterChart;
-import com.github.mikephil.charting.charts.ScatterChart.ScatterShape;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.ScatterData;
-import com.github.mikephil.charting.data.ScatterDataSet;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class ScatterChartActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private ScatterChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- private Typeface tf;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_scatterchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (ScatterChart) findViewById(R.id.chart1);
- mChart.setDescription("");
-
- tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
-
- mChart.setOnChartValueSelectedListener(this);
-
- mChart.setDrawGridBackground(false);
-
- mChart.setTouchEnabled(true);
- mChart.setHighlightEnabled(true);
-
- // enable scaling and dragging
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
-
- mChart.setMaxVisibleValueCount(200);
- mChart.setPinchZoom(true);
-
- mSeekBarX.setProgress(45);
- mSeekBarY.setProgress(100);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART);
- l.setTypeface(tf);
-
- YAxis yl = mChart.getAxisLeft();
- yl.setTypeface(tf);
-
- mChart.getAxisRight().setEnabled(false);
-
- XAxis xl = mChart.getXAxis();
- xl.setTypeface(tf);
- xl.setDrawGridLines(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.scatter, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleFilter: {
-
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 25);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- // mChart.saveToGallery("title"+System.currentTimeMillis());
- mChart.saveToPath("title" + System.currentTimeMillis(), "");
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- xVals.add((i) + "");
- }
-
- ArrayList yVals1 = new ArrayList();
- ArrayList yVals2 = new ArrayList();
- ArrayList yVals3 = new ArrayList();
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mSeekBarY.getProgress()) + 3;
- yVals1.add(new Entry(val, i));
- }
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mSeekBarY.getProgress()) + 3;
- yVals2.add(new Entry(val, i));
- }
-
- for (int i = 0; i < mSeekBarX.getProgress(); i++) {
- float val = (float) (Math.random() * mSeekBarY.getProgress()) + 3;
- yVals3.add(new Entry(val, i));
- }
-
- // create a dataset and give it a type
- ScatterDataSet set1 = new ScatterDataSet(yVals1, "DS 1");
- set1.setScatterShape(ScatterShape.SQUARE);
- set1.setColor(ColorTemplate.COLORFUL_COLORS[0]);
- ScatterDataSet set2 = new ScatterDataSet(yVals2, "DS 2");
- set2.setScatterShape(ScatterShape.CIRCLE);
- set2.setColor(ColorTemplate.COLORFUL_COLORS[1]);
- ScatterDataSet set3 = new ScatterDataSet(yVals3, "DS 3");
- set3.setScatterShape(ScatterShape.TRIANGLE);
- set3.setColor(ColorTemplate.COLORFUL_COLORS[2]);
-
- set1.setScatterShapeSize(8f);
- set2.setScatterShapeSize(8f);
- set3.setScatterShapeSize(8f);
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1); // add the datasets
- dataSets.add(set2);
- dataSets.add(set3);
-
- // create a data object with the datasets
- ScatterData data = new ScatterData(xVals, dataSets);
- data.setValueTypeface(tf);
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
- Log.i("VAL SELECTED",
- "Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
- + ", DataSet index: " + dataSetIndex);
- }
-
- @Override
- public void onNothingSelected() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java
deleted file mode 100644
index 2019c32c22..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/StackedBarActivity.java
+++ /dev/null
@@ -1,266 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.WindowManager;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.github.mikephil.charting.charts.BarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.XAxis.XAxisPosition;
-import com.github.mikephil.charting.components.YAxis;
-import com.github.mikephil.charting.data.BarData;
-import com.github.mikephil.charting.data.BarDataSet;
-import com.github.mikephil.charting.data.BarEntry;
-import com.github.mikephil.charting.data.DataSet;
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.data.filter.Approximator;
-import com.github.mikephil.charting.data.filter.Approximator.ApproximatorType;
-import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
-import com.github.mikephil.charting.utils.ColorTemplate;
-import com.github.mikephil.charting.utils.Highlight;
-import com.xxmassdeveloper.mpchartexample.custom.MyValueFormatter;
-import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
-
-import java.util.ArrayList;
-
-public class StackedBarActivity extends DemoBase implements OnSeekBarChangeListener,
- OnChartValueSelectedListener {
-
- private BarChart mChart;
- private SeekBar mSeekBarX, mSeekBarY;
- private TextView tvX, tvY;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_barchart);
-
- tvX = (TextView) findViewById(R.id.tvXMax);
- tvY = (TextView) findViewById(R.id.tvYMax);
-
- mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
- mSeekBarX.setOnSeekBarChangeListener(this);
-
- mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
- mSeekBarY.setOnSeekBarChangeListener(this);
-
- mChart = (BarChart) findViewById(R.id.chart1);
- mChart.setOnChartValueSelectedListener(this);
-
- mChart.setDescription("");
-
- // if more than 60 entries are displayed in the chart, no values will be
- // drawn
- mChart.setMaxVisibleValueCount(60);
-
- // if false values are only drawn for the stack sum, else each value is
- // drawn
- mChart.setDrawValuesForWholeStack(true);
- // scaling can now only be done on x- and y-axis separately
- mChart.setPinchZoom(false);
-
- mChart.setDrawBarShadow(false);
-
- mChart.setDrawValueAboveBar(false);
-
- // change the position of the y-labels
- YAxis yLabels = mChart.getAxisLeft();
- // yLabels.setPosition(YLabelPosition.BOTH_SIDED);
- yLabels.setLabelCount(5);
- yLabels.setValueFormatter(new MyValueFormatter());
-
- mChart.getAxisRight().setValueFormatter(new MyValueFormatter());
-
- XAxis xLabels = mChart.getXAxis();
- xLabels.setPosition(XAxisPosition.TOP);
-
- // mChart.setDrawXLabels(false);
- // mChart.setDrawYLabels(false);
-
- // setting data
- mSeekBarX.setProgress(12);
- mSeekBarY.setProgress(100);
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.BELOW_CHART_RIGHT);
- l.setFormSize(8f);
- l.setFormToTextSpace(4f);
- l.setXEntrySpace(6f);
-
- // mChart.setDrawLegend(false);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.bar, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case R.id.actionToggleValues: {
- for (DataSet> set : mChart.getData().getDataSets())
- set.setDrawValues(!set.isDrawValuesEnabled());
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlight: {
- if (mChart.isHighlightEnabled())
- mChart.setHighlightEnabled(false);
- else
- mChart.setHighlightEnabled(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionTogglePinch: {
- if (mChart.isPinchZoomEnabled())
- mChart.setPinchZoom(false);
- else
- mChart.setPinchZoom(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleHighlightArrow: {
- if (mChart.isDrawHighlightArrowEnabled())
- mChart.setDrawHighlightArrow(false);
- else
- mChart.setDrawHighlightArrow(true);
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleStartzero: {
- mChart.getAxisLeft().setStartAtZero(!mChart.getAxisLeft().isStartAtZeroEnabled());
- mChart.getAxisRight().setStartAtZero(!mChart.getAxisRight().isStartAtZeroEnabled());
- mChart.invalidate();
- break;
- }
- case R.id.actionToggleAdjustXLegend: {
- XAxis xLabels = mChart.getXAxis();
-
- if (xLabels.isAdjustXLabelsEnabled())
- xLabels.setAdjustXLabels(false);
- else
- xLabels.setAdjustXLabels(true);
-
- mChart.invalidate();
- break;
- }
- case R.id.animateX: {
- mChart.animateX(3000);
- break;
- }
- case R.id.animateY: {
- mChart.animateY(3000);
- break;
- }
- case R.id.animateXY: {
-
- mChart.animateXY(3000, 3000);
- break;
- }
- case R.id.actionToggleFilter: {
-
- Approximator a = new Approximator(ApproximatorType.DOUGLAS_PEUCKER, 25);
-
- if (!mChart.isFilteringEnabled()) {
- mChart.enableFiltering(a);
- } else {
- mChart.disableFiltering();
- }
- mChart.invalidate();
- break;
- }
- case R.id.actionSave: {
- if (mChart.saveToGallery("title" + System.currentTimeMillis(), 50)) {
- Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",
- Toast.LENGTH_SHORT).show();
- } else
- Toast.makeText(getApplicationContext(), "Saving FAILED!", Toast.LENGTH_SHORT)
- .show();
- break;
- }
- }
- return true;
- }
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-
- tvX.setText("" + (mSeekBarX.getProgress() + 1));
- tvY.setText("" + (mSeekBarY.getProgress()));
-
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < mSeekBarX.getProgress() + 1; i++) {
- xVals.add(mMonths[i % mMonths.length]);
- }
-
- ArrayList yVals1 = new ArrayList();
-
- for (int i = 0; i < mSeekBarX.getProgress() + 1; i++) {
- float mult = (mSeekBarY.getProgress() + 1);
- float val1 = (float) (Math.random() * mult) + mult / 3;
- float val2 = (float) (Math.random() * mult) + mult / 3;
- float val3 = (float) (Math.random() * mult) + mult / 3;
-
- yVals1.add(new BarEntry(new float[] {
- val1, val2, val3
- }, i));
- }
-
- BarDataSet set1 = new BarDataSet(yVals1, "Statistics Vienna 2014");
- set1.setColors(ColorTemplate.VORDIPLOM_COLORS);
- set1.setStackLabels(new String[] {
- "Births", "Divorces", "Marriages"
- });
-
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1);
-
- BarData data = new BarData(xVals, dataSets);
- data.setValueFormatter(new MyValueFormatter());
-
- mChart.setData(data);
- mChart.invalidate();
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
-
- BarEntry entry = (BarEntry) e;
- Log.i("VAL SELECTED",
- "Value: " + entry.getVals()[h.getStackIndex()]);
- }
-
- @Override
- public void onNothingSelected() {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/MyValueFormatter.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/MyValueFormatter.java
deleted file mode 100644
index c71b1ac1b8..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/MyValueFormatter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.custom;
-
-import com.github.mikephil.charting.utils.ValueFormatter;
-
-import java.text.DecimalFormat;
-
-public class MyValueFormatter implements ValueFormatter {
-
- private DecimalFormat mFormat;
-
- public MyValueFormatter() {
- mFormat = new DecimalFormat("###,###,###,##0.0");
- }
-
- @Override
- public String getFormattedValue(float value) {
- return mFormat.format(value) + " $";
- }
-
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/BarChartFrag.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/BarChartFrag.java
deleted file mode 100644
index 91c8316e5f..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/BarChartFrag.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.fragments;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.github.mikephil.charting.charts.BarChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.xxmassdeveloper.mpchartexample.R;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-
-
-public class BarChartFrag extends SimpleFragment {
-
- public static Fragment newInstance() {
- return new BarChartFrag();
- }
-
- private BarChart mChart;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.frag_simple_bar, container, false);
-
- // create a new chart object
- mChart = new BarChart(getActivity());
- mChart.setDescription("");
-
- MyMarkerView mv = new MyMarkerView(getActivity(), R.layout.custom_marker_view);
-
- mChart.setMarkerView(mv);
-
- mChart.setHighlightIndicatorEnabled(false);
-
- mChart.setDrawGridBackground(false);
- mChart.setDrawBarShadow(false);
-
- Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"OpenSans-Light.ttf");
-
- mChart.setData(generateBarData(1, 20000, 12));
-
- Legend l = mChart.getLegend();
- l.setTypeface(tf);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
-
- mChart.getAxisRight().setEnabled(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setEnabled(false);
-
- // programatically add the chart
- FrameLayout parent = (FrameLayout) v.findViewById(R.id.parentLayout);
- parent.addView(mChart);
-
- return v;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ComplexityFragment.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ComplexityFragment.java
deleted file mode 100644
index 6968d09b1f..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ComplexityFragment.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.fragments;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.xxmassdeveloper.mpchartexample.R;
-
-
-public class ComplexityFragment extends SimpleFragment {
-
- public static Fragment newInstance() {
- return new ComplexityFragment();
- }
-
- private LineChart mChart;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.frag_simple_line, container, false);
-
- mChart = (LineChart) v.findViewById(R.id.lineChart1);
-
- mChart.setDescription("");
-
- mChart.setHighlightIndicatorEnabled(false);
- mChart.setDrawGridBackground(false);
-
- mChart.setData(getComplexity());
- mChart.animateX(3000);
-
-// mChart.setScaleMinima(3f, 3f);
-// mChart.centerViewPort(300, 0);
-
- Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"OpenSans-Light.ttf");
-
- Legend l = mChart.getLegend();
- l.setTypeface(tf);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
-
- mChart.getAxisRight().setEnabled(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setEnabled(false);
-
- return v;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java
deleted file mode 100644
index 851351b1c4..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.fragments;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.github.mikephil.charting.charts.PieChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendPosition;
-import com.xxmassdeveloper.mpchartexample.R;
-
-
-public class PieChartFrag extends SimpleFragment {
-
- public static Fragment newInstance() {
- return new PieChartFrag();
- }
-
- private PieChart mChart;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.frag_simple_pie, container, false);
-
- mChart = (PieChart) v.findViewById(R.id.pieChart1);
- mChart.setDescription("");
-
- mChart.setCenterTextTypeface(Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf"));
- mChart.setCenterText("Quarterly\nRevenue");
- mChart.setCenterTextSize(22f);
-
- // radius of the center hole in percent of maximum radius
- mChart.setHoleRadius(45f);
- mChart.setTransparentCircleRadius(50f);
-
- // enable / disable drawing of x- and y-values
-// mChart.setDrawYValues(false);
-// mChart.setDrawXValues(false);
-
- mChart.setData(generatePieData());
-
- Legend l = mChart.getLegend();
- l.setPosition(LegendPosition.RIGHT_OF_CHART);
-
- return v;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ScatterChartFrag.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ScatterChartFrag.java
deleted file mode 100644
index 41a44d4104..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/ScatterChartFrag.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.fragments;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.github.mikephil.charting.charts.ScatterChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.xxmassdeveloper.mpchartexample.R;
-import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
-
-
-public class ScatterChartFrag extends SimpleFragment {
-
- public static Fragment newInstance() {
- return new ScatterChartFrag();
- }
-
- private ScatterChart mChart;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.frag_simple_scatter, container, false);
-
- mChart = (ScatterChart) v.findViewById(R.id.scatterChart1);
- mChart.setDescription("");
-
- Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"OpenSans-Light.ttf");
-
- MyMarkerView mv = new MyMarkerView(getActivity(), R.layout.custom_marker_view);
-
- mChart.setMarkerView(mv);
-
- mChart.setHighlightIndicatorEnabled(false);
-// mChart.setBorderStyles(new BorderStyle[] { BorderStyle.LEFT });
- mChart.setDrawGridBackground(false);
- mChart.setData(generateScatterData(3, 10000, 150));
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setEnabled(false);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
-
- YAxis rightAxis = mChart.getAxisRight();
- rightAxis.setTypeface(tf);
- rightAxis.setDrawGridLines(false);
-
- Legend l = mChart.getLegend();
- l.setTypeface(tf);
-
- return v;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SineCosineFragment.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SineCosineFragment.java
deleted file mode 100644
index 35f459eff4..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SineCosineFragment.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.xxmassdeveloper.mpchartexample.fragments;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.github.mikephil.charting.charts.LineChart;
-import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
-import com.xxmassdeveloper.mpchartexample.R;
-
-
-public class SineCosineFragment extends SimpleFragment {
-
- public static Fragment newInstance() {
- return new SineCosineFragment();
- }
-
- private LineChart mChart;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.frag_simple_line, container, false);
-
- mChart = (LineChart) v.findViewById(R.id.lineChart1);
-
- mChart.setDescription("");
-// mChart.setCircleSize(5f);
-
- mChart.setHighlightIndicatorEnabled(false);
- mChart.setDrawGridBackground(false);
-
- mChart.setData(generateLineData());
- mChart.animateX(3000);
-
-// mChart.setScaleMinima(3f, 3f);
-// mChart.centerViewPort(300, 0);
-
- Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"OpenSans-Light.ttf");
-
- Legend l = mChart.getLegend();
- l.setTypeface(tf);
-
- YAxis leftAxis = mChart.getAxisLeft();
- leftAxis.setTypeface(tf);
- leftAxis.setStartAtZero(false);
- leftAxis.setAxisMaxValue(1.2f);
- leftAxis.setAxisMinValue(-1.2f);
-
- mChart.getAxisRight().setEnabled(false);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setEnabled(false);
-
- return v;
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/DemoBase.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/DemoBase.java
deleted file mode 100644
index 774aff1f75..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/DemoBase.java
+++ /dev/null
@@ -1,31 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample.notimportant;
-
-import android.support.v4.app.FragmentActivity;
-
-import com.xxmassdeveloper.mpchartexample.R;
-
-/**
- * Baseclass of all Activities of the Demo Application.
- *
- * @author Philipp Jahoda
- */
-public abstract class DemoBase extends FragmentActivity {
-
- protected String[] mMonths = new String[] {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"
- };
-
- protected String[] mParties = new String[] {
- "Party A", "Party B", "Party C", "Party D", "Party E", "Party F", "Party G", "Party H",
- "Party I", "Party J", "Party K", "Party L", "Party M", "Party N", "Party O", "Party P",
- "Party Q", "Party R", "Party S", "Party T", "Party U", "Party V", "Party W", "Party X",
- "Party Y", "Party Z"
- };
-
- @Override
- public void onBackPressed() {
- super.onBackPressed();
- overridePendingTransition(R.anim.move_left_in_activity, R.anim.move_right_out_activity);
- }
-}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java
deleted file mode 100644
index d41335f7ff..0000000000
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java
+++ /dev/null
@@ -1,322 +0,0 @@
-
-package com.xxmassdeveloper.mpchartexample.notimportant;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.github.mikephil.charting.utils.Utils;
-import com.xxmassdeveloper.mpchartexample.AnotherBarActivity;
-import com.xxmassdeveloper.mpchartexample.BarChartActivity;
-import com.xxmassdeveloper.mpchartexample.BarChartActivityMultiDataset;
-import com.xxmassdeveloper.mpchartexample.CandleStickChartActivity;
-import com.xxmassdeveloper.mpchartexample.CombinedChartActivity;
-import com.xxmassdeveloper.mpchartexample.CubicLineChartActivity;
-import com.xxmassdeveloper.mpchartexample.DynamicalAddingActivity;
-import com.xxmassdeveloper.mpchartexample.HorizontalBarChartActivity;
-import com.xxmassdeveloper.mpchartexample.InvertedLineChartActivity;
-import com.xxmassdeveloper.mpchartexample.LineChartActivity1;
-import com.xxmassdeveloper.mpchartexample.LineChartActivity2;
-import com.xxmassdeveloper.mpchartexample.LineChartActivityColored;
-import com.xxmassdeveloper.mpchartexample.ListViewBarChartActivity;
-import com.xxmassdeveloper.mpchartexample.ListViewMultiChartActivity;
-import com.xxmassdeveloper.mpchartexample.MultiLineChartActivity;
-import com.xxmassdeveloper.mpchartexample.PerformanceLineChart;
-import com.xxmassdeveloper.mpchartexample.PieChartActivity;
-import com.xxmassdeveloper.mpchartexample.R;
-import com.xxmassdeveloper.mpchartexample.RadarChartActivitry;
-import com.xxmassdeveloper.mpchartexample.RealtimeLineChartActivity;
-import com.xxmassdeveloper.mpchartexample.ScatterChartActivity;
-import com.xxmassdeveloper.mpchartexample.StackedBarActivity;
-import com.xxmassdeveloper.mpchartexample.fragments.SimpleChartDemo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class MainActivity extends Activity implements OnItemClickListener {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.activity_main);
-
- // initialize the utilities
- Utils.init(getResources());
-
- ArrayList objects = new ArrayList();
-
- objects.add(new ContentItem("Line Chart", "A simple demonstration of the linechart."));
- objects.add(new ContentItem("Line Chart (Dual YAxis)",
- "Demonstration of the linechart with dual y-axis."));
- objects.add(new ContentItem("Bar Chart", "A simple demonstration of the bar chart."));
- objects.add(new ContentItem("Horizontal Bar Chart",
- "A simple demonstration of the horizontal bar chart."));
- objects.add(new ContentItem("Combined Chart",
- "Demonstrates how to create a combined chart (bar and line in this case)."));
- objects.add(new ContentItem("Pie Chart", "A simple demonstration of the pie chart."));
- objects.add(new ContentItem("Scatter Chart", "A simple demonstration of the scatter chart."));
- objects.add(new ContentItem("Stacked Bar Chart",
- "A simple demonstration of a bar chart with stacked bars."));
- objects.add(new ContentItem("Another Bar Chart",
- "Implementation of a BarChart that only shows values at the bottom."));
- objects.add(new ContentItem("Multiple Lines Chart",
- "A line chart with multiple DataSet objects. One color per DataSet."));
- objects.add(new ContentItem("Multiple Bars Chart",
- "A bar chart with multiple DataSet objects. One multiple colors per DataSet."));
- objects.add(new ContentItem("Draw Chart",
- "Demonstration of drawing values into the chart per touch-gesture. With callbacks."));
- objects.add(new ContentItem(
- "Charts in Fragments, awesome design.",
- "Demonstration of charts inside ViewPager Fragments. In this example the focus was on the design and look and feel of the chart."));
- objects.add(new ContentItem(
- "BarChart inside ListView",
- "Demonstrates the usage of a BarChart inside a ListView item."));
- objects.add(new ContentItem(
- "Multiple charts inside ListView",
- "Demonstrates the usage of different chart types inside a ListView."));
- objects.add(new ContentItem(
- "Inverted Line Chart",
- "Demonstrates the feature of inverting the y-axis."));
- objects.add(new ContentItem(
- "Candle Stick Chart",
- "Demonstrates usage of the CandleStickChart."));
- objects.add(new ContentItem(
- "Cubic Line Chart",
- "Demonstrates cubic lines in a LineChart."));
- objects.add(new ContentItem(
- "Radar Chart",
- "Demonstrates the use of a spider-web like (net) chart."));
- objects.add(new ContentItem(
- "Colored Line Chart",
- "Shows a LineChart with different background and line color."));
- objects.add(new ContentItem(
- "Realtime Chart",
- "This chart is fed with new data in realtime. It also restrains the view on the x-axis."));
- objects.add(new ContentItem(
- "Dynamical data adding",
- "This Activity demonstrates dynamical adding of Entries and DataSets (real time graph)."));
-// objects.add(new ContentItem(
-// "Performance Line Chart",
-// "Renders up to 3000 objects."));
-
- MyAdapter adapter = new MyAdapter(this, objects);
-
- ListView lv = (ListView) findViewById(R.id.listView1);
- lv.setAdapter(adapter);
-
- lv.setOnItemClickListener(this);
- }
-
- @Override
- public void onItemClick(AdapterView> av, View v, int pos, long arg3) {
-
- Intent i;
-
- switch (pos) {
- case 0:
- i = new Intent(this, LineChartActivity1.class);
- startActivity(i);
- break;
- case 1:
- i = new Intent(this, LineChartActivity2.class);
- startActivity(i);
- break;
- case 2:
- i = new Intent(this, BarChartActivity.class);
- startActivity(i);
- break;
- case 3:
- i = new Intent(this, HorizontalBarChartActivity.class);
- startActivity(i);
- break;
- case 4:
- i = new Intent(this, CombinedChartActivity.class);
- startActivity(i);
- break;
- case 5:
- i = new Intent(this, PieChartActivity.class);
- startActivity(i);
- break;
- case 6:
- i = new Intent(this, ScatterChartActivity.class);
- startActivity(i);
- break;
- case 7:
- i = new Intent(this, StackedBarActivity.class);
- startActivity(i);
- break;
- case 8:
- i = new Intent(this, AnotherBarActivity.class);
- startActivity(i);
- break;
- case 9:
- i = new Intent(this, MultiLineChartActivity.class);
- startActivity(i);
- break;
- case 10:
- i = new Intent(this, BarChartActivityMultiDataset.class);
- startActivity(i);
- break;
- case 11:
- // i = new Intent(this, DrawChartActivity.class);
- // startActivity(i);
-
- AlertDialog.Builder b = new AlertDialog.Builder(this);
- b.setTitle("Feature not available");
- b.setMessage("Due to recent changes to the data model of the library, this feature is temporarily not available.");
- b.setPositiveButton("OK", null);
- b.create().show();
- break;
- case 12:
- i = new Intent(this, SimpleChartDemo.class);
- startActivity(i);
- break;
- case 13:
- i = new Intent(this, ListViewBarChartActivity.class);
- startActivity(i);
- break;
- case 14:
- i = new Intent(this, ListViewMultiChartActivity.class);
- startActivity(i);
- break;
- case 15:
- i = new Intent(this, InvertedLineChartActivity.class);
- startActivity(i);
- break;
- case 16:
- i = new Intent(this, CandleStickChartActivity.class);
- startActivity(i);
- break;
- case 17:
- i = new Intent(this, CubicLineChartActivity.class);
- startActivity(i);
- break;
- case 18:
- i = new Intent(this, RadarChartActivitry.class);
- startActivity(i);
- break;
- case 19:
- i = new Intent(this, LineChartActivityColored.class);
- startActivity(i);
- break;
- case 20:
- i = new Intent(this, RealtimeLineChartActivity.class);
- startActivity(i);
- break;
- case 21:
- i = new Intent(this, DynamicalAddingActivity.class);
- startActivity(i);
- break;
- case 22:
- i = new Intent(this, PerformanceLineChart.class);
- startActivity(i);
- break;
- }
-
- overridePendingTransition(R.anim.move_right_in_activity, R.anim.move_left_out_activity);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- Intent i = null;
-
- switch (item.getItemId()) {
- case R.id.viewGithub:
- i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart"));
- startActivity(i);
- break;
- case R.id.report:
- i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
- "mailto", "philjay.librarysup@gmail.com", null));
- i.putExtra(Intent.EXTRA_SUBJECT, "MPAndroidChart Issue");
- i.putExtra(Intent.EXTRA_TEXT, "Your error report here...");
- startActivity(Intent.createChooser(i, "Report Problem"));
- break;
- case R.id.blog:
- i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse("http://www.xxmassdeveloper.com/"));
- startActivity(i);
- break;
- case R.id.website:
- i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse("http://at.linkedin.com/in/philippjahoda"));
- startActivity(i);
- break;
- }
-
- return true;
- }
-
- private class ContentItem {
- String name;
- String desc;
-
- public ContentItem(String n, String d) {
- name = n;
- desc = d;
- }
- }
-
- private class MyAdapter extends ArrayAdapter {
-
- public MyAdapter(Context context, List objects) {
- super(context, 0, objects);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
-
- ContentItem c = getItem(position);
-
- ViewHolder holder = null;
-
- if (convertView == null) {
-
- holder = new ViewHolder();
-
- convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null);
- holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
- holder.tvDesc = (TextView) convertView.findViewById(R.id.tvDesc);
-
- convertView.setTag(holder);
-
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
-
- holder.tvName.setText(c.name);
- holder.tvDesc.setText(c.desc);
-
- return convertView;
- }
-
- private class ViewHolder {
-
- TextView tvName, tvDesc;
- }
- }
-}
diff --git a/MPChartExample/src/main/AndroidManifest.xml b/MPChartExample/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..99334e601a
--- /dev/null
+++ b/MPChartExample/src/main/AndroidManifest.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MPChartExample/assets/OpenSans-Bold.ttf b/MPChartExample/src/main/assets/OpenSans-Bold.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-Bold.ttf
rename to MPChartExample/src/main/assets/OpenSans-Bold.ttf
diff --git a/MPChartExample/assets/OpenSans-BoldItalic.ttf b/MPChartExample/src/main/assets/OpenSans-BoldItalic.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-BoldItalic.ttf
rename to MPChartExample/src/main/assets/OpenSans-BoldItalic.ttf
diff --git a/MPChartExample/assets/OpenSans-ExtraBold.ttf b/MPChartExample/src/main/assets/OpenSans-ExtraBold.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-ExtraBold.ttf
rename to MPChartExample/src/main/assets/OpenSans-ExtraBold.ttf
diff --git a/MPChartExample/assets/OpenSans-ExtraBoldItalic.ttf b/MPChartExample/src/main/assets/OpenSans-ExtraBoldItalic.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-ExtraBoldItalic.ttf
rename to MPChartExample/src/main/assets/OpenSans-ExtraBoldItalic.ttf
diff --git a/MPChartExample/assets/OpenSans-Italic.ttf b/MPChartExample/src/main/assets/OpenSans-Italic.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-Italic.ttf
rename to MPChartExample/src/main/assets/OpenSans-Italic.ttf
diff --git a/MPChartExample/assets/OpenSans-Light.ttf b/MPChartExample/src/main/assets/OpenSans-Light.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-Light.ttf
rename to MPChartExample/src/main/assets/OpenSans-Light.ttf
diff --git a/MPChartExample/assets/OpenSans-LightItalic.ttf b/MPChartExample/src/main/assets/OpenSans-LightItalic.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-LightItalic.ttf
rename to MPChartExample/src/main/assets/OpenSans-LightItalic.ttf
diff --git a/MPChartExample/assets/OpenSans-Regular.ttf b/MPChartExample/src/main/assets/OpenSans-Regular.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-Regular.ttf
rename to MPChartExample/src/main/assets/OpenSans-Regular.ttf
diff --git a/MPChartExample/assets/OpenSans-Semibold.ttf b/MPChartExample/src/main/assets/OpenSans-Semibold.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-Semibold.ttf
rename to MPChartExample/src/main/assets/OpenSans-Semibold.ttf
diff --git a/MPChartExample/assets/OpenSans-SemiboldItalic.ttf b/MPChartExample/src/main/assets/OpenSans-SemiboldItalic.ttf
similarity index 100%
rename from MPChartExample/assets/OpenSans-SemiboldItalic.ttf
rename to MPChartExample/src/main/assets/OpenSans-SemiboldItalic.ttf
diff --git a/MPChartExample/assets/cosine.txt b/MPChartExample/src/main/assets/cosine.txt
similarity index 100%
rename from MPChartExample/assets/cosine.txt
rename to MPChartExample/src/main/assets/cosine.txt
diff --git a/MPChartExample/assets/hugecosine.txt b/MPChartExample/src/main/assets/hugecosine.txt
similarity index 100%
rename from MPChartExample/assets/hugecosine.txt
rename to MPChartExample/src/main/assets/hugecosine.txt
diff --git a/MPChartExample/assets/hugesine.txt b/MPChartExample/src/main/assets/hugesine.txt
similarity index 100%
rename from MPChartExample/assets/hugesine.txt
rename to MPChartExample/src/main/assets/hugesine.txt
diff --git a/MPChartExample/assets/n.txt b/MPChartExample/src/main/assets/n.txt
similarity index 100%
rename from MPChartExample/assets/n.txt
rename to MPChartExample/src/main/assets/n.txt
diff --git a/MPChartExample/assets/nlogn.txt b/MPChartExample/src/main/assets/nlogn.txt
similarity index 100%
rename from MPChartExample/assets/nlogn.txt
rename to MPChartExample/src/main/assets/nlogn.txt
diff --git a/MPChartExample/src/main/assets/othersine.txt b/MPChartExample/src/main/assets/othersine.txt
new file mode 100644
index 0000000000..142857b056
--- /dev/null
+++ b/MPChartExample/src/main/assets/othersine.txt
@@ -0,0 +1,8000 @@
+0.0#0
+0.09983341664682815#1
+0.19866933079506122#2
+0.2955202066613396#3
+0.3894183423086505#4
+0.479425538604203#5
+0.5646424733950354#6
+0.644217687237691#7
+0.7173560908995227#8
+0.7833269096274833#9
+0.8414709848078964#10
+0.8912073600614353#11
+0.9320390859672263#12
+0.963558185417193#13
+0.9854497299884603#14
+0.9974949866040544#15
+0.9995736030415051#16
+0.9916648104524686#17
+0.973847630878195#18
+0.9463000876874144#19
+0.9092974268256815#20
+0.8632093666488735#21
+0.8084964038195899#22
+0.7457052121767197#23
+0.6754631805511504#24
+0.5984721441039558#25
+0.5155013718214634#26
+0.42737988023382895#27
+0.33498815015590383#28
+0.23924932921398112#29
+0.1411200080598659#30
+0.04158066243328916#31
+-0.05837414342758142#32
+-0.15774569414324996#33
+-0.25554110202683294#34
+-0.3507832276896215#35
+-0.44252044329485407#36
+-0.5298361409084948#37
+-0.6118578909427207#38
+-0.6877661591839753#39
+-0.7568024953079294#40
+-0.8182771110644114#41
+-0.8715757724135886#42
+-0.9161659367494552#43
+-0.9516020738895161#44
+-0.977530117665097#45
+-0.9936910036334644#46
+-0.9999232575641008#47
+-0.9961646088358408#48
+-0.9824526126243328#49
+-0.958924274663139#50
+-0.9258146823277331#51
+-0.8834546557201545#52
+-0.8322674422239027#53
+-0.7727644875559894#54
+-0.7055403255703945#55
+-0.6312666378723244#56
+-0.5506855425976414#57
+-0.4646021794137613#58
+-0.37387666483024096#59
+-0.27941549819893097#60
+-0.18216250427210112#61
+-0.0830894028175026#62
+0.016813900484343496#63
+0.11654920485048659#64
+0.21511998808780858#65
+0.3115413635133711#66
+0.40484992061659103#67
+0.4941133511386012#68
+0.5784397643881929#69
+0.6569865987187824#70
+0.7289690401258698#71
+0.7936678638491472#72
+0.8504366206285593#73
+0.8987080958116223#74
+0.9379999767747351#75
+0.9679196720314837#76
+0.9881682338769986#77
+0.9985433453746043#78
+0.9989413418397726#79
+0.9893582466233836#80
+0.9698898108450894#81
+0.9407305566797773#82
+0.9021718337562995#83
+0.8545989080882879#84
+0.7984871126234988#85
+0.734397097874123#86
+0.662969230082194#87
+0.5849171928917747#88
+0.5010208564578985#89
+0.41211848524177114#90
+0.3190983623493673#91
+0.22288991410026324#92
+0.12445442350707933#93
+0.024775425453375525#94
+-0.07515112046179159#95
+-0.17432678122296213#96
+-0.27176062641092535#97
+-0.36647912925191023#98
+-0.457535893775304#99
+-0.5440211108893535#100
+-0.6250706488928668#101
+-0.6998746875935284#102
+-0.7676858097635688#103
+-0.8278264690856417#104
+-0.8796957599716599#105
+-0.9227754216127984#106
+-0.9566350162701817#107
+-0.980936230066487#108
+-0.9954362533063752#109
+-0.9999902065507036#110
+-0.9945525882039916#111
+-0.9791777291513221#112
+-0.9540192499020964#113
+-0.9193285256646855#114
+-0.8754521746884406#115
+-0.822828594968723#116
+-0.7619835839190494#117
+-0.6935250847771416#118
+-0.6181371122370543#119
+-0.5365729180004575#120
+-0.4496474645346253#121
+-0.3582292822368536#122
+-0.26323179136582836#123
+-0.16560417544833742#124
+-0.06632189735122905#125
+0.03362304722110829#126
+0.13323204141991404#127
+0.23150982510150958#128
+0.3274744391376645#129
+0.4201670368266135#130
+0.5086614643723477#131
+0.5920735147071987#132
+0.6695697621965786#133
+0.7403758899524271#134
+0.8037844265516019#135
+0.8591618148564795#136
+0.9059547423084483#137
+0.9436956694440937#138
+0.972007501394968#139
+0.9906073556948657#140
+0.9993093887479164#141
+0.9980266527163638#142
+0.9867719642746191#143
+0.9656577765492868#144
+0.9348950555246957#145
+0.8947911721405201#146
+0.8457468311429532#147
+0.7882520673753391#148
+0.7228813495120019#149
+0.6502878401571452#150
+0.5711968696600193#151
+0.4863986888538323#152
+0.3967405731306479#153
+0.3031183567457395#154
+0.20646748193783482#155
+0.10775365229948292#156
+0.007963183785976422#157
+-0.09190685022764096#158
+-0.19085858137414927#159
+-0.28790331666502617#160
+-0.3820714171839697#161
+-0.4724219863984317#162
+-0.558052271286747#163
+-0.6381066823479201#164
+-0.7117853423690981#165
+-0.7783520785342762#166
+-0.8371417780197293#167
+-0.8875670335814898#168
+-0.9291240127343579#169
+-0.961397491879549#170
+-0.9840650050816383#171
+-0.9969000660415941#172
+-0.9997744310730117#173
+-0.9926593804706357#174
+-0.9756260054681622#175
+-0.9488444979181307#176
+-0.9125824497911917#177
+-0.8672021794855902#178
+-0.8131571116614967#179
+-0.7509872467716855#180
+-0.6813137655555104#181
+-0.6048328224062927#182
+-0.5223085896267406#183
+-0.43456562207190313#184
+-0.34248061846961925#185
+-0.24697366173662777#186
+-0.14899902581420232#187
+-0.049535640878370965#188
+0.05042268780681122#189
+0.14987720966295234#190
+0.24783420798295983#191
+0.3433149288198987#192
+0.4353653603728964#193
+0.5230657651577025#194
+0.6055398697196067#195
+0.6819636200681407#196
+0.7515734153521554#197
+0.8136737375071116#198
+0.8676441006416744#199
+0.9129452507276334#200
+0.949124553647899#201
+0.9758205177669794#202
+0.9927664058359092#203
+0.9997929001426696#204
+0.9968297942787976#205
+0.9839066946186122#206
+0.9611527245021096#207
+0.9287952340772312#208
+0.887157528692338#209
+0.8366556385360404#210
+0.777794161801075#211
+0.71116122290596#212
+0.6374225961502142#213
+0.5573150535176319#214
+0.47163900309416484#215
+0.3812504916549073#216
+0.28705265132769103#217
+0.18998667579539935#218
+0.09102241619980542#219
+-0.008851309290446507#220
+-0.10863659542412214#221
+-0.20733642060680393#222
+-0.30396460881109105#223
+-0.39755568312147854#224
+-0.487174512460553#225
+-0.5719256551096047#226
+-0.6509623056662873#227
+-0.7234947560442817#228
+-0.7887982859754514#229
+-0.846220404175201#230
+-0.8951873678197072#231
+-0.9352099151945603#232
+-0.9658881542360861#233
+-0.986915558120659#234
+-0.9980820279794003#235
+-0.9992759921366252#236
+-0.9904855208971471#237
+-0.9717984457438473#238
+-0.9434014817545319#239
+-0.9055783620065937#240
+-0.8587070026098931#241
+-0.8032557266939103#242
+-0.7397785850778432#243
+-0.6689098203779662#244
+-0.5913575298650613#245
+-0.5078965903905548#246
+-0.4193609160731571#247
+-0.326635126104645#248
+-0.2306457059273127#249
+-0.13235175009768851#250
+-0.0327353793307601#251
+0.06720807252556354#252
+0.16648000353724682#253
+0.2640885213845585#254
+0.3590583540222545#255
+0.4504405942754718#256
+0.5373221810065527#257
+0.6188350221201147#258
+0.6941646682523136#259
+0.7625584504796671#260
+0.823333000738138#261
+0.875881079810939#262
+0.9196776446620603#263
+0.9542850944927288#264
+0.9793576431039386#265
+0.9946447738778491#266
+0.999993742857021#267
+0.9953511049115485#268
+0.9807632477451307#269
+0.9563759284044698#270
+0.9224328169230419#271
+0.8792730616506684#272
+0.8273279005953128#273
+0.7671163526354526#274
+0.6992400316550114#275
+0.624377135416297#276
+0.5432756692321434#277
+0.45674597214408225#278
+0.3656526202825023#279
+0.2709057883077459#280
+0.17345215524576615#281
+0.07426544558423022#282
+-0.025663299860690898#283
+-0.12533562609656307#284
+-0.223755640186928#285
+-0.31993996188432605#286
+-0.4129275492406663#287
+-0.501789301020694#288
+-0.5856373399744128#289
+-0.6636338842130738#290
+-0.734999618048874#291
+-0.7990214786597013#292
+-0.8550597807771457#293
+-0.9025546082102497#294
+-0.941031408343004#295
+-0.9701057337072216#296
+-0.9894870832545573#297
+-0.9989818049469563#298
+-0.9984950306638061#299
+-0.9880316240928376#300
+-0.9676961321337658#301
+-0.9376917403002256#302
+-0.8983182425572844#303
+-0.8499690458792419#304
+-0.7931272394571857#305
+-0.7283607678314815#306
+-0.6563167561776644#307
+-0.5777150444455955#308
+-0.49334099495663#309
+-0.40403764532290903#310
+-0.3106972850942102#311
+-0.21425254029571766#312
+-0.11566705493706401#313
+-0.015925862599924186#314
+0.08397445569192384#315
+0.18303572898076265#316
+0.28026816976919344#317
+0.37470026364963#318
+0.465388476355119#319
+0.5514266812418447#320
+0.6319552130070282#321
+0.7061694571804652#322
+0.7733278895663422#323
+0.8327594853078859#324
+0.8838704235459204#325
+0.9261500206806009#326
+0.9591758329531347#327
+0.9826178773641765#328
+0.9962419287548808#329
+0.9999118601072645#330
+0.9935910026803725#331
+0.9773425123922165#332
+0.9513287387867192#333
+0.9158096028907363#334
+0.8711400001690751#335
+0.8177662545263231#336
+0.7562216587859281#337
+0.6871211462045894#338
+0.6111551462624274#339
+0.529082686119843#340
+0.44172380666903255#341
+0.34995136895646245#342
+0.2546823328438221#343
+0.15686859504819245#344
+0.05748747810470466#345
+-0.04246803471717159#346
+-0.14199922097421971#347
+-0.24011159795399523#348
+-0.33582485921735605#349
+-0.42818266949635647#350
+-0.5162622200801217#351
+-0.5991834492144473#352
+-0.676117835387937#353
+-0.7462966756450723#354
+-0.8090187662120443#355
+-0.8636574086930742#356
+-0.9096666718336256#357
+-0.9465868462850383#358
+-0.974049037868381#359
+-0.9917788534431466#360
+-0.9995991425528098#361
+-0.9974317674536307#362
+-0.9852983838411613#363
+-0.9633202244736941#364
+-0.9317168878546153#365
+-0.8908041440767483#366
+-0.840990779751967#367
+-0.7827745135504952#368
+-0.7167370231604792#369
+-0.6435381333568037#370
+-0.5639092232500512#371
+-0.4786459185881904#372
+-0.38860014212710114#373
+-0.2946716015000064#374
+-0.19779879963620456#375
+-0.09894965755002794#376
+8.881568059804928E-4#377
+0.10071709699276916#378
+0.19953970523905196#379
+0.29636857870964317#380
+0.39023623530819473#381
+0.48020478043849585#382
+0.5653752781372515#383
+0.6448967329450791#384
+0.7179745927718371#385
+0.783878687798465#386
+0.8419505260924545#387
+0.8916098730415694#388
+0.9323605488662917#389
+0.9637953862841635#390
+0.9856002987906811#391
+0.997557418907825#392
+0.9995472750438832#393
+0.9915499852141032#394
+0.9736454556949117#395
+0.9460125826268136#396
+0.9089274645432923#397
+0.862760643685528#398
+0.8079734036668093#399
+0.7451131604791498#400
+0.6748079928936466#401
+0.5977603669050155#402
+0.5147401169235761#403
+0.42657675384429683#404
+0.33415117684813256#405
+0.23838687174859532#406
+0.1402406838267691#407
+0.040693257349552474#408
+-0.059260762703698414#409
+-0.15862266880501766#410
+-0.2563996696333202#411
+-0.35161480971710896#412
+-0.4433167308506074#413
+-0.5305891777504746#414
+-0.6125601529757225#415
+-0.6884106296379023#416
+-0.7573827348470396#417
+-0.8187873221270313#418
+-0.8720108571394337#419
+-0.9165215479157646#420
+-0.9518746583470648#421
+-0.9777169518400896#422
+-0.9937902207405829#423
+-0.9999338662588075#424
+-0.9960865031195645#425
+-0.9822865729035719#426
+-0.9586719599518976#427
+-0.9254786136712014#428
+-0.8830381910052587#429
+-0.831774742628409#430
+-0.7722004759713906#431
+-0.7049106374140062#432
+-0.6305775647800578#433
+-0.549943969560057#434
+-0.46381551598351894#435
+-0.3730527710882991#436
+-0.2785626062192159#437
+-0.18128913586934542#438
+-0.08220428440008934#439
+0.017701925105768793#440
+0.11743126282744855#441
+0.21598726618857098#442
+0.312385196181835#443
+0.4056618765556671#444
+0.49488531755294296#445
+0.5791640280445662#446
+0.6576559230141424#447
+0.7295767373931061#448
+0.7942078621780435#449
+0.8509035245343125#450
+0.8990972401447438#451
+0.9383074733336821#452
+0.9681424484122837#453
+0.9883040641716944#454
+0.9985908724117905#455
+0.9989000907450034#456
+0.989228629563962#457
+0.969673122911827#458
+0.9404289629468755#459
+0.9017883476486434#460
+0.8541373612723012#461
+0.7979521167223996#462
+0.7337939983901085#463
+0.6623040529859501#464
+0.5841965844129685#465
+0.5002520166782486#466
+0.4113090961542109#467
+0.318256511102111#468
+0.2220240121926944#469
+0.12357312274482915#470
+0.023887531502341068#471
+-0.07603673605875032#472
+-0.1752012696875459#473
+-0.2726152501434634#474
+-0.367305349134568#475
+-0.4583254544921258#476
+-0.5447661234106508#477
+-0.6257636692997951#478
+-0.7005087914552633#479
+-0.7682546613239306#480
+-0.8283243845678764#481
+-0.8801177643688576#482
+-0.923117298396518#483
+-0.9568933495206096#484
+-0.9811084386031781#485
+-0.995520616478555#486
+-0.9999858814294422#487
+-0.9944596180044706#488
+-0.9789970428010428#489
+-0.9537526527593436#490
+-0.918978681479984#491
+-0.8750225789892403#492
+-0.8223235401332446#493
+-0.7614081162882599#494
+-0.6928849542333831#495
+-0.6174387147531208#496
+-0.5358232317331488#497
+-0.4488539801013109#498
+-0.3573999278716999#499
+-0.26237485370350366#500
+-0.16472821672669768#501
+-0.06543566986026736#502
+0.03451068858925011#503
+0.13411222764610073#504
+0.2323737616559199#505
+0.32831349385182623#506
+0.42097282614317716#507
+0.5094259371108206#508
+0.5927890325086789#509
+0.6702291758437122#510
+0.740972610802025#511
+0.8043124923661843#512
+0.859615949376982#513
+0.9063304079728589#514
+0.9439891127252716#515
+0.9722157903046471#516
+0.9907284090791111#517
+0.9993419970813273#518
+0.9979704901872514#519
+0.9866275920404088#520
+0.9654266371296195#521
+0.9345794583882479#522
+0.8943942706295563#523
+0.8452725909661725#524
+0.7877052269838246#525
+0.7222673727541837#526
+0.6496128616858338#527
+0.5704676336369813#528
+0.48562248156435645#529
+0.3959251501813905#530
+0.3022718655732663#531
+0.20559838040212833#532
+0.10687062417580104#533
+0.007075051999440675#534
+-0.09279121175779685#535
+-0.19173033639984702#536
+-0.2887537548982128#537
+-0.38289204132693666#538
+-0.47320459704600304#539
+-0.5587890488520287#540
+-0.6387902651930264#541
+-0.712408900360203#542
+-0.7789093812860535#543
+-0.8376272571473031#544
+-0.8879758383378954#545
+-0.929452058477602#546
+-0.9616415008850029#547
+-0.984222539291978#548
+-0.9969695514270638#549
+-0.9997551733586085#550
+-0.9925515720730763#551
+-0.9754307235733183#552
+-0.948563693718144#553
+-0.9122189289888067#554
+-0.8667595742605005#555
+-0.8126398443788057#556
+-0.7504004857950958#557
+-0.6806633736067427#558
+-0.6041252979867081#559
+-0.5215510020864632#560
+-0.43376554097521025#561
+-0.3416460379623573#562
+-0.2461129206713498#563
+-0.14812072443110932#564
+-0.04864855487455499#565
+0.0513096949612317#566
+0.1507552752856959#567
+0.24869455873257396#568
+0.34414896835608744#569
+0.4361647552483109#570
+0.5238225280829925#571
+0.6062464393697752#572
+0.6826129366328042#573
+0.7521589910748351#574
+0.8141897215087521#575
+0.8680853373806932#576
+0.9133073315123875#577
+0.9494038606868752#578
+0.9760142603165708#579
+0.9928726480846032#580
+0.9998105805530361#581
+0.9967587361940206#582
+0.9837476080275863#583
+0.9609071989454651#584
+0.9284657227651701#585
+0.8867473239929686#586
+0.8361688390791232#587
+0.7772356315258688#588
+0.7105365424623492#589
+0.6367380071386995#590
+0.5565773961253213#591
+0.4708556477498852#592
+0.38042926538631583#593
+0.28620175955620214#594
+0.18911462035032636#595
+0.09013791037089226#596
+-0.009739427813336072#597
+-0.10951945285428034#598
+-0.20820519572462254#599
+-0.30481062110277163#600
+-0.3983704795118571#601
+-0.48794995177343276#602
+-0.5726539894116975#603
+-0.6516362576820022#604
+-0.7241075918678563#605
+-0.7893438823539132#606
+-0.8466933096898865#607
+-0.8955828573550356#608
+-0.935524037149826#609
+-0.966117770008547#610
+-0.9870583734654177#611
+-0.9981366159327402#612
+-0.999241807273761#613
+-0.9903629047819286#614
+-0.9715886235159662#615
+-0.9431065498883311#616
+-0.9052012673637889#617
+-0.8582515129955042#618
+-0.8027263932095995#619
+-0.7391806966488114#620
+-0.6682493509077604#621
+-0.5906410785463059#622
+-0.5071313157679993#623
+-0.418554464517864#624
+-0.3257955554139773#625
+-0.2297814048140864#626
+-0.131471354372927#627
+-0.03184768561752508#628
+0.06809419468512197#629
+0.1673557003034234#630
+0.26494504308473243#631
+0.3598871425747261#632
+0.4512333686989858#633
+0.5380710201611258#634
+0.6195324438524475#635
+0.6948037041549939#636
+0.7631327155171924#637
+0.8238367570440802#638
+0.8763092940188087#639
+0.9200260381970413#640
+0.9545501863217811#641
+0.9795367845171353#642
+0.9947361749534073#643
+0.9999964903456082#644
+0.9952651713611683#645
+0.9805894917754141#646
+0.9561160861276317#647
+0.9220894845972212#648
+0.8788496697389755#649
+0.8268286794897758#650
+0.7665462903883387#651
+0.6986048241398573#652
+0.6236831294166234#653
+0.542529799026492#654
+0.4559556902209967#655
+0.3648258228777264#656
+0.27005073650764577#657
+0.17257739244528622#658
+0.07337971212411498#659
+-0.026551154024492412#660
+-0.12621672981873175#661
+-0.2246211897703263#662
+-0.3207813090436296#663
+-0.41373628751317226#664
+-0.5025573497609173#665
+-0.5863570250932251#666
+-0.664298014854665#667
+-0.7356015584394067#668
+-0.7995552144097693#669
+-0.8555199789755651#670
+-0.9029366707087443#671
+-0.9413315176993833#672
+-0.9703208913280009#673
+-0.9896151393559127#674
+-0.9990214800346544#675
+-0.9984459283174868#676
+-0.9878942349269157#677
+-0.9674718288953736#678
+-0.9373827641531779#679
+-0.8979276806891099#680
+-0.849500800655026#681
+-0.7925859894284285#682
+-0.7277519209895582#683
+-0.6556463959189626#684
+-0.5769898687882292#685
+-0.4925682496160574#686
+-0.40322505131513814#687
+-0.30985296158995934#688
+-0.21338492349634555#689
+-0.1147848137828343#690
+-0.015037812152819907#691
+0.08485944232538563#692
+0.18390880930667822#693
+0.2811206202575485#694
+0.37552356689692795#695
+0.46617440618746125#696
+0.552167384908141#697
+0.6326432896410897#698
+0.7067980317480133#699
+0.773890681558078#700
+0.8332508714922635#701
+0.8842854941546171#702
+0.9264846284653002#703
+0.9594266346234597#704
+0.9827823669927427#705
+0.9963184628156941#706
+0.9998996738972894#707
+0.9934902179601922#708
+0.9771541361694416#709
+0.9510546532542999#710
+0.9154525466207135#711
+0.870703540749673#712
+0.8172547529157873#713
+0.7556402257392723#714
+0.6864755912086206#715
+0.610451919489274#716
+0.5283288139789675#717
+0.44092682160167046#718
+0.3491192341739591#719
+0.2538233627618576#720
+0.1559913722118884#721
+0.056600767434670324#722
+-0.04335537350102874#723
+-0.14287832187608665#724
+-0.2409736772882528#725
+-0.3366613033722623#726
+-0.42898512099840763#727
+-0.5170226610991652#728
+-0.5998942816751899#729
+-0.6767719568874018#730
+-0.7468875504174615#731
+-0.8095404904319502#732
+-0.8641047694645521#733
+-0.9100351992757256#734
+-0.9468728581933795#735
+-0.9742496765065195#736
+-0.9918921140961338#737
+-0.9996238935576413#738
+-0.9973677615064493#739
+-0.9851462604682352#740
+-0.9630815036414816#741
+-0.9313939547827625#742
+-0.8904002254057634#743
+-0.8405099113036936#744
+-0.7822215000035158#745
+-0.7161173900433542#746
+-0.6428580718388172#747
+-0.5631755282810933#748
+-0.47786592100586434#749
+-0.38778163540941735#750
+-0.29382276389552614#751
+-0.19692811244968383#752
+-0.09806582040002382#753
+0.001776312910822753#754
+0.10160069789023536#755
+0.2004099222810544#756
+0.29721671697515395#757
+0.3910538204800225#758
+0.480983643475862#759
+0.5661076368981451#760
+0.645575269942848#761
+0.7185925282890948#762
+0.7844298476277866#763
+0.8424294032270155#764
+0.8920116826993384#765
+0.9326812762979901#766
+0.9640318268873135#767
+0.9857500901289341#768
+0.9976190643156452#769
+0.9995201585807343#770
+0.9914343778187229#771
+0.9734425124781813#772
+0.945724331330272#773
+0.9085567852786125#774
+0.8623112401573938#775
+0.807449766166722#776
+0.7445205210199198#777
+0.6741522729328512#778
+0.5970481181797517#779
+0.5139784559876693#780
+0.4257732909620477#781
+0.33331393995507175#782
+0.23752422623900496#783
+0.1393612489694287#784
+0.03980582016685425#785
+-0.06014733523277261#786
+-0.15949951834081932#787
+-0.2572580349851358#788
+-0.3524461143820813#789
+-0.44411266870731736#790
+-0.5313417960509607#791
+-0.6132619318067095#792
+-0.6890545570572891#793
+-0.7579623769449068#794
+-0.8192968873111423#795
+-0.8724452540029098#796
+-0.9168764361087397#797
+-0.9521464919440266#798
+-0.9779030147695946#799
+-0.9938886539233454#800
+-0.9999436861830043#801
+-0.9960076116677604#802
+-0.9821197583330767#803
+-0.9584188890187596#804
+-0.9251418149765318#805
+-0.882621029730285#806
+-0.8312813869106968#807
+-0.7716358552581907#808
+-0.7042803932088473#809
+-0.6298879942747078#810
+-0.5492019627150644#811
+-0.463028486686005#812
+-0.37222858307484785#813
+-0.277709494504018#814
+-0.18041562446265824#815
+-0.0813191011391443#816
+0.018589935762430915#817
+0.1183132281708837#818
+0.2168543739126067#819
+0.3132287824327208#820
+0.406473512498437#821
+0.4956568935895487#822
+0.5798878348422998#823
+0.6583247285347402#824
+0.7301838591528853#825
+0.7947472340170689#826
+0.8513697572274626#827
+0.8994856752490656#828
+0.9386142297340143#829
+0.9683644611000755#830
+0.9884391148695585#831
+0.998637611737797#832
+0.9988580516952584#833
+0.9890982321787556#834
+0.9694556700787299#835
+0.9401266273827171#836
+0.9014041501904432#837
+0.853675140694064#838
+0.7974164913793547#839
+0.7331903200736304#840
+0.6616383534502285#841
+0.5834755151077143#842
+0.4994827822896071#843
+0.41049938261791885#844
+0.31741440880816796#845
+0.22115793514885987#846
+0.12269172450663844#847
+0.022999618709638837#848
+-0.07692229167484431#849
+-0.17607561994804152#850
+-0.2734696588295798#851
+-0.36813127927714384#852
+-0.4591146536701932#853
+-0.5455107062068977#854
+-0.6264561960890486#855
+-0.701142342738765#856
+-0.7688229068666809#857
+-0.8288216466482501#858
+-0.880539074508522#859
+-0.9234584470038253#860
+-0.9571509279514455#861
+-0.9812798732190074#862
+-0.9956041943613665#863
+-0.9999807674966593#864
+-0.9943658633528207#865
+-0.9788155841960154#866
+-0.9534853032753393#867
+-0.9186281123846742#868
+-0.8745922930531441#869
+-0.8218178366312031#870
+-0.7608320480425032#871
+-0.6922442771274011#872
+-0.6167398302207777#873
+-0.5350731227976723#874
+-0.4480601416032317#875
+-0.35657029158288345#876
+-0.2615177090755071#877
+-0.16385212806530994#878
+-0.06454939075379683#879
+0.035398302732936385#880
+0.13499230807988533#881
+0.23323751490702455#882
+0.3291522895832851#883
+0.4217782833853109#884
+0.5101900080011152#885
+0.5935040827033676#886
+0.6708880607976146#887
+0.7415687471544812#888
+0.8048399237198179#889
+0.8600694058120545#890
+0.9067053587025647#891
+0.9442818113658633#892
+0.9724233123080624#893
+0.990848680954091#894
+0.999373817111055#895
+0.9979135404365095#896
+0.9864824415322831#897
+0.9651947361600082#898
+0.9342631240349845#899
+0.8939966636009335#900
+0.8447976840201904#901
+0.7871577652337052#902
+0.7216528262567685#903
+0.6489373707865839#904
+0.5697379476176754#905
+0.4848458912064981#906
+0.3951094149191295#907
+0.30142513596369747#908
+0.20472911668761928#909
+0.1059875117520471#910
+0.006186914633861963#911
+-0.09367550009022263#912
+-0.19260194018240928#913
+-0.2896039653540304#914
+-0.3837123634341776#915
+-0.47398683441733475#916
+-0.5595253856302109#917
+-0.6394733441443728#918
+-0.7130318963856286#919
+-0.7794660696152083#920
+-0.8381120755344199#921
+-0.888383942637911#922
+-0.9297793710472535#923
+-0.9618847513252905#924
+-0.9843792971249118#925
+-0.9970382503801957#926
+-0.9997351270147091#927
+-0.9924429807285888#928
+-0.9752346722370627#929
+-0.9482821412702676#930
+-0.9118546886083012#931
+-0.8663162853168473#932
+-0.8121219360685991#933
+-0.7498131328869748#934
+-0.6800124447368134#935
+-0.6034172970210714#936
+-0.5207930031367345#937
+-0.4329651177163347#938
+-0.3408111879589536#939
+-0.2452519854686876#940
+-0.1472423062091467#941
+-0.047761430497799545#942
+0.05219666163925169#943
+0.15163322198712595#944
+0.2495547133041842#945
+0.3449827364177279#946
+0.43696380606511737#947
+0.524578877803335#948
+0.6069525307972649#949
+0.6832617147353013#950
+0.7527439734759979#951
+0.8147050632577988#952
+0.8685258893532176#953
+0.9136686918587087#954
+0.9496824188138638#955
+0.9762072329635024#956
+0.9929781071325793#957
+0.9998274722901109#958
+0.9966868918435423#959
+0.9835877454345576#960
+0.9606609154040736#961
+0.9281354790591521#962
+0.8863364198082719#963
+0.8356813800345357#964
+0.7766764881510327#965
+0.7099113015330387#966
+0.6360529158556042#967
+0.5558392996940816#968
+0.4700719209860606#969
+0.3796077390286655#970
+0.28535064202453175#971
+0.1882424157296708#972
+0.08925333344150882#973
+-0.010627538651171125#974
+-0.11040222389064579#975
+-0.20907380660312846#976
+-0.3056563929506449#977
+-0.3991849616563692#978
+-0.4887250061782283#979
+-0.5733818719893634#980
+-0.6523096956704291#981
+-0.7247198564972739#982
+-0.7898888560785331#983
+-0.8471655473123978#984
+-0.8959776404332164#985
+-0.9358374211416584#986
+-0.9663466236847766#987
+-0.9872004101957622#988
+-0.9981904165331424#989
+-0.9992068341864074#990
+-0.9902395074463488#991
+-0.9713780348775489#992
+-0.9428108740791415#993
+-0.9048234586787762#994
+-0.8577953463741634#995
+-0.8021964265180238#996
+-0.7385822251390002#997
+-0.6675883543092127#998
+-0.5899241613185386#999
+-0.5063656411109719#1000
+-0.41774768279965196#1001
+-0.3249557277308229#1002
+-0.22891692244659007#1003
+-0.1305908549431452#1004
+-0.03095996678470595#1005
+0.06898026312784167#1006
+0.16823126505305938#1007
+0.26580135578772984#1008
+0.3607156472376163#1009
+0.45202578717704495#1010
+0.5388194348708605#1011
+0.6202293768814718#1012
+0.6954421919788581#1013
+0.7637063785766175#1014
+0.8243398634874052#1015
+0.8767368169727581#1016
+0.9203737059935807#1017
+0.9548145251792146#1018
+0.9797151532489783#1019
+0.9948267913582519#1020
+0.9999984490142912#1021
+0.9951784527233196#1022
+0.9804149622949977#1023
+0.955855489645524#1024
+0.9217454249073299#1025
+0.8784255845719909#1026
+0.8263288061645024#1027
+0.7659756234738067#1028
+0.697969065551239#1029
+0.6229886314435827#1030
+0.5417835008632049#1031
+0.4551650486320175#1032
+0.3639987376924607#1033
+0.2691954716878667#1034
+0.17170249351436012#1035
+0.07249392078295652#1036
+-0.02743898724160609#1037
+-0.1270977339757739#1038
+-0.225486562164981#1039
+-0.3216224031609835#1040
+-0.41454469941883354#1041
+-0.5033250020703501#1042
+-0.5870762476783056#1043
+-0.6649616214810665#1044
+-0.7362029185690774#1045
+-0.8000883194510767#1046
+-0.8559795023191575#1047
+-0.9033180209492709#1048
+-0.9416308845112984#1049
+-0.9705352835370772#1050
+-0.989742414826066#1051
+-0.9990603670714583#1052
+-0.9983960383745241#1053
+-0.987756066488005#1054
+-0.9672467624938841#1055
+-0.9370730485781962#1056
+-0.8975364105162827#1057
+-0.8490318853265837#1058
+-0.79204411419133#1059
+-0.7271425000820525#1060
+-0.6549755184733097#1061
+-0.5762642379901035#1062
+-0.4917951157285321#1063
+-0.40241213923645325#1064
+-0.3090083936688921#1065
+-0.21251713837638628#1066
+-0.11390248208604994#1067
+-0.014149749845864671#1068
+0.08574436201749502#1069
+0.18478174455889376#1070
+0.28197284898938413#1071
+0.37634657392060444#1072
+0.466959968288848#1073
+0.5529076530103934#1074
+0.63333086723003#1075
+0.7074260487756557#1076
+0.7744528630858774#1077
+0.8337416003882263#1078
+0.8846998672178285#1079
+0.926818505417086#1080
+0.9596766794756827#1081
+0.9829460813798933#1082
+0.9963942109577327#1083
+0.9998866989438198#1084
+0.9933886495526604#1085
+0.9769649891458017#1086
+0.9507798175090885#1087
+0.915094768221848#1088
+0.8702663945006491#1089
+0.8167426066374239#1090
+0.7550581966278896#1091
+0.6858294947067065#1092
+0.6097482111795045#1093
+0.5275745250821587#1094
+0.4401294887231446#1095
+0.3482868240002752#1096
+0.2529641924603128#1097
+0.15511402632813187#1098
+0.05571401211876051#1099
+-0.04424267808309759#1100
+-0.1437573100702344#1101
+-0.24183556653499838#1102
+-0.33749748195915497#1103
+-0.42978723410541103#1104
+-0.5177826942772574#1105
+-0.600604640924089#1106
+-0.6774255445323065#1107
+-0.7474778360266712#1108
+-0.8100615760667802#1109
+-0.864551448609587#1110
+-0.910403008860601#1111
+-0.9471581231863048#1112
+-0.9744495466339814#1113
+-0.9920045923218871#1114
+-0.9996478560364346#1115
+-0.9973029688131155#1116
+-0.9849933599899484#1117
+-0.9628420231092787#1118
+-0.9310702870069596#1119
+-0.8899956043677858#1120
+-0.840028379843203#1121
+-0.7816678694236923#1122
+-0.7154971920379454#1123
+-0.6421775032212828#1124
+-0.5624413890680937#1125
+-0.4770855464737418#1126
+-0.3869628228025392#1127
+-0.29297369451879685#1128
+-0.19605726992365072#1129
+-0.0971819058953447#1130
+0.0026644676126004055#1131
+0.1024842186409163#1132
+0.20127998123335095#1133
+0.29806462078761803#1134
+0.3918710971780397#1135
+0.48176212710082145#1136
+0.5668395490989988#1137
+0.6462532976948229#1138
+0.7192098969630194#1139
+0.7849803886799459#1140
+0.8429076158332012#1141
+0.8924127887172654#1142
+0.9330012680089154#1143
+0.9642675070398367#1144
+0.9858991038848767#1145
+0.9976799227788151#1146
+0.9994922536734847#1147
+0.9913179883576629#1148
+0.9732388013883325#1149
+0.9454353340255065#1150
+0.9081853893244696#1151
+0.8618611564194799#1152
+0.8069254917329687#1153
+0.743927294267167#1154
+0.6734960211867176#1155
+0.5963353984907568#1156
+0.5132163896153517#1157
+0.42496949222169395#1158
+0.3324764401379949#1159
+0.2366613933665366#1160
+0.13848170418241593#1161
+0.038918351586070044#1162
+-0.06103386031462717#1163
+-0.16037624205817258#1164
+-0.2581161974044102#1165
+-0.35327714102805435#1166
+-0.4449082562364434#1167
+-0.5320939952156349#1168
+-0.6139632268815225#1169
+-0.6896979409336707#1170
+-0.7585414211438385#1171
+-0.819805806214395#1172
+-0.8728789626610285#1173
+-0.9172306010481774#1174
+-0.9524175744657799#1175
+-0.9780883063067141#1176
+-0.9939863031040413#1177
+-0.9999527173289418#1178
+-0.9959279345427144#1179
+-0.9819521690445431#1180
+-0.9581650620635117#1181
+-0.9248042865096023#1182
+-0.8822031722245435#1183
+-0.8307873754602152#1184
+-0.771070625862084#1185
+-0.7036495934524011#1186
+-0.629197926900574#1187
+-0.5484595226483394#1188
+-0.46224109214241743#1189
+-0.37140410144039926#1190
+-0.27685616372666233#1191
+-0.1795419707414492#1192
+-0.08043385373327268#1193
+0.019477931753509533#1194
+0.1191951001847589#1195
+0.217721310575624#1196
+0.31407212160031445#1197
+0.40728482780441533#1198
+0.49642807863955946#1199
+0.5806111842102433#1200
+0.6589930147528394#1201
+0.730790404926155#1202
+0.7952859789406399#1203
+0.851835318340144#1204
+0.8998734008181136#1205
+0.938920245733708#1206
+0.9685857099197014#1207
+0.988573385864046#1208
+0.9986835633157533#1209
+0.9988152247237061#1210
+0.9889670545706377#1211
+0.9692374525173453#1212
+0.9398235502258059#1213
+0.9010192416847732#1214
+0.8532122467181903#1215
+0.7968802370168715#1216
+0.7325860634008656#1217
+0.6609721320001158#1218
+0.5827539855447597#1219
+0.4987131538986974#1220
+0.409689345271531#1221
+0.3165720561317042#1222
+0.22029168365181864#1223
+0.12181022948763352#1224
+0.022111687775516597#1225
+-0.07780778661170105#1226
+-0.17694983131492942#1227
+-0.27432385179549673#1228
+-0.36895691902833305#1229
+-0.45990349068718106#1230
+-0.5462548586909652#1231
+-0.6271482287145591#1232
+-0.70177534094448#1233
+-0.7693905459437702#1234
+-0.8293182549346921#1235
+-0.8809596900584754#1236
+-0.9237988671657521#1237
+-0.9574077513596155#1238
+-0.9814505337788207#1239
+-0.9956869868889223#1240
+-0.9999748647563899#1241
+-0.9942713243229557#1242
+-0.9786333534792907#1243
+-0.953217201660839#1244
+-0.9182768186551078#1245
+-0.8741613172193351#1246
+-0.8213114848612212#1247
+-0.7602553796358565#1248
+-0.6916030539641876#1249
+-0.616040459190884#1250
+-0.5343225917852477#1251
+-0.4472659496660599#1252
+-0.35574037402427566#1253
+-0.2606603581573747#1254
+-0.1629759101546243#1255
+-0.06366306073028243#1256
+0.03628588895266636#1257
+0.1358722820277203#1258
+0.2341010841741585#1259
+0.3299908256710588#1260
+0.42258340791831867#1261
+0.510953676441162#1262
+0.5942186647278355#1263
+0.6715464165391247#1264
+0.7421642985400877#1265
+0.805366720196939#1266
+0.8605221838044265#1267
+0.9070795942021564#1268
+0.9445737651352686#1269
+0.9726300672417244#1270
+0.9909681712250566#1271
+0.9994048488120352#1272
+0.9978558035090056#1273
+0.9863365128645896#1274
+0.9649620738231349#1275
+0.9339460527140935#1276
+0.8935983513678535#1277
+0.8443221106790897#1278
+0.7866096825562044#1279
+0.7210377105038093#1280
+0.6482613679914285#1281
+0.5690078121768063#1282
+0.48406891839188965#1283
+0.3942933679863122#1284
+0.3005781685838748#1285
+0.20385969147888025#1286
+0.10510431572368364#1287
+0.005298772388643717#1288
+-0.09455971452856225#1289
+-0.1934733920354848#1290
+-0.2904539473629896#1291
+-0.38453238285975366#1292
+-0.4747686978964897#1293
+-0.5602612810415106#1294
+-0.6401559186641225#1295
+-0.7136543299548559#1296
+-0.7800221430834386#1297
+-0.8385962327993722#1298
+-0.8887913461602351#1299
+-0.9301059501856239#1300
+-0.9621272430089094#1301
+-0.9845352784570335#1302
+-0.9971061628469102#1303
+-0.9997142920570979#1304
+-0.9923336065226613#1305
+-0.9750378516137301#1306
+-0.9479998407961381#1307
+-0.9114897289363962#1308
+-0.8658723130035688#1309
+-0.8116033871385435#1310
+-0.749225188509642#1311
+-0.6793609794580729#1312
+-0.6027088200666426#1313
+-0.5200345933741548#1314
+-0.43216435292525485#1315
+-0.3399760691164684#1316
+-0.24439085680621755#1317
+-0.14636377183963595#1318
+-0.04687426844626337#1319
+0.05308358714285112#1320
+0.15251104907633528#1321
+0.25041467102089904#1322
+0.3458162323487072#1323
+0.43776251219453577#1324
+0.5253348137235645#1325
+0.6076581434464698#1326
+0.6839099538651353#1327
+0.753328362095355#1328
+0.8152197623487677#1329
+0.8689657562126182#1330
+0.9140293314822825#1331
+0.9499602278097037#1332
+0.9763994355559533#1333
+0.9930827828968712#1334
+0.9998435753406082#1335
+0.9966142612838874#1336
+0.9834271069652942#1337
+0.9604138740716864#1338
+0.9278045032189735#1339
+0.8859248164614908#1340
+0.8351932617857352#1341
+0.7761167321164042#1342
+0.7092855006098496#1343
+0.6353673228398167#1344
+0.5551007648044826#1345
+0.4692878234191396#1346
+0.37878591322812316#1347
+0.28449929940210755#1348
+0.1873700626194315#1349
+0.08836868610737038#1350
+-0.011515641105471527#1351
+-0.11128490783895244#1352
+-0.2099422525592064#1353
+-0.306501923689571#1354
+-0.3999991289144955#1355
+-0.4894996750654395#1356
+-0.57410930227021#1357
+-0.6529826191020013#1358
+-0.7253315494510825#1359
+-0.7904332067207822#1360
+-0.8476371166714086#1361
+-0.8963717167438338#1362
+-0.9361500669236509#1363
+-0.9665747150848376#1364
+-0.9873416682000192#1365
+-0.9982434297383107#1366
+-0.9991710729020646#1367
+-0.9901153289874269#1368
+-0.9711666799941617#1369
+-0.9425144545594192#1370
+-0.9044449362485765#1371
+-0.857338503104486#1372
+-0.8016658270358069#1373
+-0.7379831710188773#1374
+-0.6669268311019312#1375
+-0.5892067787453151#1376
+-0.5055995670213429#1377
+-0.41694057155269054#1378
+-0.3241156437153132#1379
+-0.2280522595043203#1380
+-0.12971025250041487#1381
+-0.03007222353003439#1382
+0.06986627715730269#1383
+0.1691066970980048#1384
+0.2666574588205459#1385
+0.36154386735978916#1386
+0.45281784908688705#1387
+0.5395674245475895#1388
+0.6209258206594904#1389
+0.6960801312221501#1390
+0.7642794392071385#1391
+0.8248423196727637#1392
+0.8771636483368399#1393
+0.9207206477784876#1394
+0.9550781108573155#1395
+0.9798927491593076#1396
+0.9949166230211789#1397
+0.9999996188615343#1398
+0.9950909490661519#1399
+0.9802396594410367#1400
+0.9555941391629392#1401
+0.9214006381237522#1402
+0.8780008064829905#1403
+0.8258282810123316#1404
+0.7654043523403342#1405
+0.6973327563887936#1406
+0.6222936420429795#1407
+0.5410367753288019#1408
+0.4543740479985197#1409
+0.36317136537672806#1410
+0.2683399945205851#1411
+0.1708274591406018#1412
+0.07160807225693622#1413
+-0.028326798814238986#1414
+-0.1279786378752571#1415
+-0.226351756690739#1416
+-0.32246324357531025#1417
+-0.415352784322254#1418
+-0.5040922573456266#1419
+-0.5877950071643484#1420
+-0.6656247035706814#1421
+-0.7368036979652107#1422
+-0.8006207933645937#1423
+-0.8564383504467267#1424
+-0.9036986586320765#1425
+-0.941929508543436#1426
+-0.9707489101659298#1427
+-0.9898689095649735#1428
+-0.9990984660268033#1429
+-0.9983453608741385#1430
+-0.987617118884721#1431
+-0.9670209331062237#1432
+-0.9367625938187515#1433
+-0.8971444323463876#1434
+-0.848562300262541#1435
+-0.7915016141718754#1436
+-0.7265325055880536#1437
+-0.6543041243681132#1438
+-0.5755381526216753#1439
+-0.4910215939018614#1440
+-0.40159890972594#1441
+-0.30816358199498733#1442
+-0.211649185618078#1443
+-0.1130200605403922#1444
+-0.013261676377251867#1445
+0.08662921407252257#1446
+0.1856545340510954#1447
+0.2828248552946596#1448
+0.37716928407358735#1449
+0.46774516204164157#1450
+0.5536474849665701#1451
+0.6340179452332398#1452
+0.7080535077696084#1453
+0.7750144337077156#1454
+0.8342316716099273#1455
+0.8851135424097409#1456
+0.9271516512734351#1457
+0.9599259673131953#1458
+0.9831090203969006#1459
+0.9964691731214373#1460
+0.999872935257061#1461
+0.9932862975376467#1462
+0.9767750714700341#1463
+0.9505042317672048#1464
+0.9147362679754845#1465
+0.8698285617657631#1466
+0.816229816093974#1467
+0.7544755719094801#1468
+0.6851828572069336#1469
+0.609044021886516#1470
+0.5268198200225961#1471
+0.43933180866049054#1472
+0.34745413909003786#1473
+0.2521048226148663#1474
+0.15423655808690193#1475
+0.05482721285436108#1476
+-0.04512994776555348#1477
+-0.14463618486537203#1478
+-0.24269726501638209#1479
+-0.3383333943203984#1480
+-0.4305890081865166#1481
+-0.518542319016638#1482
+-0.6013145264024473#1483
+-0.6780785978085996#1484
+-0.748067532008433#1485
+-0.8105820227066887#1486
+-0.8649974457768529#1487
+-0.910770100298956#1488
+-0.9474426410394413#1489
+-0.97464864809356#1490
+-0.9921162880319376#1491
+-0.9996710299703442#1492
+-0.9972373894245966#1493
+-0.9848396825265736#1494
+-0.962601783065463#1495
+-0.930745884781808#1496
+-0.8895902812810987#1497
+-0.8395461857492807#1498
+-0.7811136222465291#1499
+-0.7148764296321258#1500
+-0.6414964280395691#1501
+-0.5617068061885679#1502
+-0.4763047956057153#1503
+-0.38614370495060346#1504
+-0.292124394037764#1505
+-0.19518627274318584#1506
+-0.09629791473136161#1507
+0.0035526202125998304#1508
+0.10336765854973708#1509
+0.20214988141145054#1510
+0.2989122894799676#1511
+0.3926880647592674#1512
+0.4825402307009092#1513
+0.5675710141639814#1514
+0.6469308156675612#1515
+0.7198266983078874#1516
+0.7855303105217932#1517
+0.843385163534764#1518
+0.892813190779766#1519
+0.9333205237473006#1520
+0.9645024265563005#1521
+0.9860473399412646#1522
+0.9977399942494521#1523
+0.9994635603440932#1524
+0.9912008169225054#1525
+0.9730343225856573#1526
+0.9451455909399181#1527
+0.9078132769731031#1528
+0.8614103928259461#1529
+0.8064005807780915#1530
+0.7433334806876951#1531
+0.6728392381716484#1532
+0.5956222083988731#1533
+0.5124539184063026#1534
+0.42416535825576057#1535
+0.3316386780559536#1536
+0.23579837381018381#1537
+0.13760205015788235#1538
+0.03803085230559389#1539
+-0.06192033725160367#1540
+-0.16125283926712547#1541
+-0.2589741562157922#1542
+-0.35410788900102547#1543
+-0.44570349281186655#1544
+-0.5328457746525187#1545
+-0.6146640376482388#1546
+-0.6903407807606958#1547
+-0.7591198669881154#1548
+-0.8203140784362564#1549
+-0.8733119827724461#1550
+-0.9175840424553352#1551
+-0.9526879056989698#1552
+-0.9782728263056137#1553
+-0.9940831682058159#1554
+-0.9999609596895136#1555
+-0.9958474718071414#1556
+-0.9817838051698816#1557
+-0.9579104792859435#1558
+-0.9244660285360871#1559
+-0.8817846188169394#1560
+-0.8302927086658156#1561
+-0.7705047882279834#1562
+-0.7030182386411985#1563
+-0.6285073632008448#1564
+-0.5477166499443011#1565
+-0.4614533329725679#1566
+-0.370579326833965#1567
+-0.2760026145588766#1568
+-0.17866817539345065#1569
+-0.07954854287934016#1570
+0.02036591237996836#1571
+0.12007687817485184#1572
+0.21858807549515108#1573
+0.3149152130207141#1574
+0.408095821834904#1575
+0.49719887209586344#1576
+0.5813340755789376#1577
+0.6596607811423243#1578
+0.7313963742354008#1579
+0.7958240965246156#1580
+0.8523002075058284#1581
+0.9002604165466352#1582
+0.9392255210918378#1583
+0.9688061946969714#1584
+0.9887068770494445#1585
+0.998728727109482#1586
+0.9987716098640673#1587
+0.9888350968428918#1588
+0.9690184703994884#1589
+0.9395197317147739#1590
+0.9006336224346992#1591
+0.8527486797091522#1592
+0.7963433540571888#1593
+0.7319812288476018#1594
+0.6603053891601949#1595
+0.5820319962922426#1596
+0.49794313211153723#1597
+0.4088789847528897#1598
+0.31572945373601446#1599
+0.21942525838369095#1600
+0.12092863838194484#1601
+0.021223739399179705#1602
+-0.07869322017202651#1603
+-0.1778239030997941#1604
+-0.275177828368556#1605
+-0.369782267737956#1606
+-0.46069196492188513#1607
+-0.5469985802768322#1608
+-0.6278397666313447#1609
+-0.7024077855739117#1610
+-0.7699575781081692#1611
+-0.8298142090361076#1612
+-0.8813796106874666#1613
+-0.9241385586142015#1614
+-0.9576638195428573#1615
+-0.9816204201482128#1616
+-0.9957689939960187#1617
+-0.9999681732132844#1618
+-0.994176000989335#1619
+-0.9784503507943949#1620
+-0.9529483481270028#1621
+-0.91792480056797#1622
+-0.8737296518272608#1623
+-0.8208044852221184#1624
+-0.7596781115225273#1625
+-0.6909612852488008#1626
+-0.6153406022143034#1627
+-0.5335716392870412#1628
+-0.4464714049153578#1629
+-0.35491017584958534#1630
+-0.2598028016244306#1631
+-0.16209956368483314#1632
+-0.06277668048788872#1633
+0.03717344654927897#1634
+0.13675214879643402#1635
+0.2349644687770656#1636
+0.33082910145460404#1637
+0.42338819910797#1638
+0.511716941829381#1639
+0.5949327780191651#1640
+0.6722042425496124#1641
+0.742759264489685#1642
+0.8058928813825473#1643
+0.8609742829974049#1644
+0.9074531141768128#1645
+0.9448649738034854#1646
+0.9728360549427497#1647
+0.9910868797978722#1648
+0.9994350921598212#1649
+0.9977972794502282#1650
+0.9861898061522987#1651
+0.9647286503023048#1652
+0.9336282446753849#1653
+0.8931993342441357#1654
+0.8438458713175653#1655
+0.78606097938315#1656
+0.7204220259799529#1657
+0.6475848538330251#1658
+0.5682772278896909#1659
+0.48329156373276017#1660
+0.3934770100259633#1661
+0.2997309641011942#1662
+0.20299010546101035#1663
+0.10422103678666807#1664
+0.0044106259636479345#1665
+-0.09544385437604187#1666
+-0.19434469127235002#1667
+-0.29130370025527885#1668
+-0.3853520989574582#1669
+-0.47555018686732337#1670
+-0.5609967345060028#1671
+-0.6408379882143644#1672
+-0.714276200577364#1673
+-0.7805776012525157#1674
+-0.8390797285606031#1675
+-0.8891980485837959#1676
+-0.9304317956353363#1677
+-0.9623689757447501#1678
+-0.9846904831654123#1679
+-0.9971732887736847#1680
+-0.9996926685021967#1681
+-0.9922234495414972#1682
+-0.9748402618584459#1683
+-0.9477167925182539#1684
+-0.9111240502607415#1685
+-0.8654276576705933#1686
+-0.8110841979973509#1687
+-0.7486366531265098#1688
+-0.6787089782840057#1689
+-0.6019998676818485#1690
+-0.5192757733965142#1691
+-0.43136324723315195#1692
+-0.3391406820931682#1693
+-0.24352953536271474#1694
+-0.14548512201507893#1695
+-0.04598706941925612#1696
+0.053970470772899765#1697
+0.1533887558613586#1698
+0.25127443120483245#1699
+0.34664945549199166#1700
+0.4385608730069506#1701
+0.5260903352477752#1702
+0.6083632767611484#1703
+0.6845576535112877#1704
+0.753912156472218#1705
+0.8157338183759043#1706
+0.8694049376121297#1707
+0.9143892500987989#1708
+0.9502372874553822#1709
+0.976590867942398#1710
+0.9931866752949559#1711
+0.9998588896918333#1712
+0.996540844572318#1713
+0.9832656927464438#1714
+0.9601660751430733#1715
+0.9274727955055809#1716
+0.8855125142771431#1717
+0.8347044847175692#1718
+0.775556363863317#1719
+0.7086591401861929#1720
+0.6346812286318964#1721
+0.5543617920388316#1722
+0.4685033556673605#1723
+0.3779637886326811#1724
+0.2836477323602019#1725
+0.18649756170745438#1726
+0.08748396906602378#1727
+-0.012403734475959032#1728
+-0.11216750400318758#1729
+-0.21081053290806362#1730
+-0.30734721265281995#1731
+-0.40081298064423065#1732
+-0.49027395782420097#1733
+-0.5748362796806161#1734
+-0.6536550274460741#1735
+-0.7259426702469165#1736
+-0.7909769338513953#1737
+-0.848108017395044#1738
+-0.8967650859761198#1739
+-0.9364619742492493#1740
+-0.966802044028854#1741
+-0.9874821473667896#1742
+-0.9982956555064372#1743
+-0.9991345234489356#1744
+-0.9899903695030964#1745
+-0.970954559032491#1746
+-0.9422172915629393#1747
+-0.9040657003717193#1748
+-0.8568809835467744#1749
+-0.8011345951814257#1750
+-0.7373835347609137#1751
+-0.666264781807661#1752
+-0.5884889313924426#1753
+-0.5048330941033291#1754
+-0.41613313141356995#1755
+-0.32327530403005167#1756
+-0.2271874166692736#1757
+-0.12882954773931182#1758
+-0.029184456553725577#1759
+0.07075223607464673#1760
+0.16998199574774103#1761
+0.26751335150790145#1762
+0.3623718022879524#1763
+0.45360955380373474#1764
+0.5403149886012937#1765
+0.6216217746371384#1766
+0.6967175213816488#1767
+0.7648518969567075#1768
+0.8253441252037987#1769
+0.8775897877743497#1770
+0.9210668632780755#1771
+0.9553409431481533#1772
+0.9800695721080259#1773
+0.9950056698713242#1774
+0.9999999998864149#1775
+0.995002660458693#1776
+0.9800635833518199#1777
+0.9553320348860447#1778
+0.9210551245184746#1779
+0.8775753358070623#1780
+0.8253271044281046#1781
+0.7648324774385712#1782
+0.6966958971544762#1783
+0.6215981617630594#1784
+0.5402896230123407#1785
+0.4535826889444879#1786
+0.36234370658320497#1787
+0.26748430568064796#1788
+0.1699522900142862#1789
+0.0707221672448598#1790
+-0.029214588042036787#1791
+-0.12885944082227627#1792
+-0.22721677266508764#1793
+-0.32330382962330895#1794
+-0.4161605415859719#1795
+-0.5048591149814937#1796
+-0.5885133029843566#1797
+-0.6662872606004342#1798
+-0.7374038961538791#1799
+-0.8011526357302755#1800
+-0.8568965229963079#1801
+-0.9040785834568934#1802
+-0.9422273895602254#1803
+-0.9709617710460383#1804
+-0.9899946234728495#1805
+-0.9991357768706348#1806
+-0.9982938958563073#1807
+-0.9874773922266732#1808
+-0.966794340910539#1809
+-0.9364514001197477#1810
+-0.8967517464886383#1811
+-0.848092045833332#1812
+-0.790958489798018#1813
+-0.7259219379887585#1814
+-0.6536322141330055#1815
+-0.5748116132557202#1816
+-0.49024768474624164#1817
+-0.4007853634251181#1818
+-0.30731852723467856#1819
+-0.21078106590610934#1820
+-0.11213754984196339#1821
+-0.012373592447542393#1822
+0.08751399779244858#1823
+0.18652717709477906#1824
+0.2836766385012659#1825
+0.37799169670687793#1826
+0.46852998682643804#1827
+0.5543868801930514#1828
+0.6347045231087146#1829
+0.7086804082348972#1830
+0.7755753929805951#1831
+0.8347210847707713#1832
+0.8855265194040249#1833
+0.9274840657715442#1834
+0.960174497939346#1835
+0.9832711839152297#1836
+0.9965433492476736#1837
+0.9998583828478708#1838
+0.9931831619958922#1839
+0.9765843832919562#1840
+0.9502278962460459#1841
+0.9143770461644276#1842
+0.8693900428904013#1843
+0.8157163816899551#1844
+0.7538923520436499#1845
+0.6845356792194047#1846
+0.6083393521658111#1847
+0.5260646993956318#1848
+0.43853378204296184#1849
+0.3466211801001145#1850
+0.25124525390343583#1851
+0.1533589681803935#1852
+0.05394037034102778#1853
+-0.04601718184846958#1854
+-0.145514945568195#1855
+-0.24355877205264906#1856
+-0.3391690397965793#1857
+-0.4313904426092411#1858
+-0.5193015347180733#1859
+-0.6020239375502678#1860
+-0.6787311162011166#1861
+-0.7486566378975624#1862
+-0.8111018299411188#1863
+-0.8654427606145227#1864
+-0.9111364733012091#1865
+-0.9477264115283458#1866
+-0.9748469807281929#1867
+-0.9922272011381739#1868
+-0.9996934153410891#1869
+-0.9971710233926254#1870
+-0.98468522819934#1871
+-0.9623607836995489#1872
+-0.9304207483632138#1873
+-0.8891842564654433#1874
+-0.8390633294023081#1875
+-0.7805587589092471#1876
+-0.7142551033155872#1877
+-0.6408148468309454#1878
+-0.5609717802219951#1879
+-0.47552366901768395#1880
+-0.3853242824997751#1881
+-0.29127486312240225#1882
+-0.1943151215953794#1883
+-0.09541384760541509#1884
+0.0044407700101977065#1885
+0.10425101691979201#1886
+0.20301962212912839#1887
+0.2997597223835154#1888
+0.39350472257923697#1889
+0.48331795366231456#1890
+0.5683020315160732#1891
+0.6476078233265996#1892
+0.7204429318371323#1893
+0.7860796127195201#1894
+0.8438620459549884#1895
+0.8932128885709812#1896
+0.9336390432612995#1897
+0.9647365852513876#1898
+0.9861947981811614#1899
+0.9977992786801687#1900
+0.9994340786151946#1901
+0.9910828636056814#1902
+0.9728290762314595#1903
+0.9448551023020723#1904
+0.9074404485180556#1905
+0.8609589497323792#1906
+0.8058750337161689#1907
+0.7427390807499367#1908
+0.6721819244057498#1909
+0.5949085484667043#1910
+0.5116910429620009#1911
+0.42336088969859254#1912
+0.3308006543698204#1913
+0.23493516825074362#1914
+0.1367222875897472#1915
+0.03714332302553373#1916
+-0.06280676534440063#1917
+-0.16212930927617017#1918
+-0.25983191074247675#1919
+-0.35493835764565523#1920
+-0.4464983778062608#1921
+-0.5335971337685674#1922
+-0.6153643635540208#1923
+-0.6909830760312574#1924
+-0.7596977140214278#1925
+-0.8208217035757736#1926
+-0.8737443139955725#1927
+-0.9179367600513992#1928
+-0.9529574854303443#1929
+-0.9784565746207341#1930
+-0.9941792491522566#1931
+-0.999968413258218#1932
+-0.9957662235245147#1933
+-0.9816146668419067#1934
+-0.9576551408868839#1935
+-0.9241270413228225#1936
+-0.8813653698376505#1937
+-0.8297973869177182#1938
+-0.7699383428022528#1939
+-0.7023863292732867#1940
+-0.6278163037202744#1941
+-0.5469733451889683#1942
+-0.4606652097978839#1943
+-0.36975425990617233#1944
+-0.27514884767398695#1945
+-0.1777942391079601#1946
+-0.07866316927572836#1947
+0.021253876941319732#1948
+0.12095856144556782#1949
+0.21945466798743643#1950
+0.3157580560288433#1951
+0.40890649395014667#1952
+0.49796927335041663#1953
+0.5820565083781266#1954
+0.6603280271764242#1955
+0.7320017666026011#1956
+0.7963615863444993#1957
+0.8527644243577857#1958
+0.9006467221293312#1959
+0.9395300555675856#1960
+0.9690259152579552#1961
+0.9888395883204489#1962
+0.9987731030833557#1963
+0.998727207150748#1964
+0.9887023590996133#1965
+0.9687987238979044#1966
+0.9392151720892897#1967
+0.9002472927444187#1968
+0.8522844400326369#1969
+0.7958058429238293#1970
+0.731375816890965#1971
+0.6596381254564291#1972
+0.5813095479197075#1973
+0.49717271753556175#1974
+0.40806830170125163#1975
+0.3148866022857897#1976
+0.2185586600279604#1977
+0.12004695188501968#1978
+0.020335774281090385#1979
+-0.07957859165734228#1980
+-0.17869783461311994#1981
+-0.27603158787509413#1982
+-0.37060732475493247#1983
+-0.46148007575231387#1984
+-0.5477418703778104#1985
+-0.6285308092938824#1986
+-0.7030396761281532#1987
+-0.7705240029125717#1988
+-0.8303095085612607#1989
+-0.8817988360642393#1990
+-0.9244775210812064#1991
+-0.9579191322991703#1992
+-0.9817895321931679#1993
+-0.9958502156179638#1994
+-0.9999606928726213#1995
+-0.9940798934271551#1996
+-0.9782665762856902#1997
+-0.9526787428859168#1998
+-0.9175720584009519#1999
+-0.8732972972174424#2000
+-0.8202968381138436#2001
+-0.759100244157896#2002
+-0.6903189714875031#2003
+-0.6146402598431213#2004
+-0.5328202658954452#2005
+-0.44567650797790564#2006
+-0.3540796977137181#2007
+-0.25894504015316233#2008
+-0.16122308934724644#2009
+-0.0618902507258409#2010
+0.03806097482262027#2011
+0.13763190769193942#2012
+0.23582766803466082#2013
+0.33166711627264295#2014
+0.4241926563194016#2015
+0.5124798035636668#2016
+0.5956464220140248#2017
+0.6728615383101487#2018
+0.7433536445339318#2019
+0.8064184068615782#2020
+0.8614257030343491#2021
+0.9078259183318809#2022
+0.9451554371407925#2023
+0.9730412752486439#2024
+0.9912048065788938#2025
+0.9994645471305557#2026
+0.9977379683063444#2027
+0.9860423215111407#2028
+0.9644944657816552#2029
+0.9333097001695628#2030
+0.8927996125445465#2031
+0.8433689663113009#2032
+0.7855116561473892#2033
+0.7198057731708851#2034
+0.6469078288450127#2035
+0.5675461953326192#2036
+0.48251382784229224#2037
+0.3926603416820314#2038
+0.29888352318393624#2039
+0.20212035931994485#2040
+0.1033376756377367#2041
+0.003522476059450432#2042
+-0.09632791893524607#2043
+-0.19521583720571825#2044
+-0.29215322336060745#2045
+-0.38617151108069375#2046
+-0.47633130071339214#2047
+-0.5617317454435568#2048
+-0.6415195522570779#2049
+-0.7148975077626172#2050
+-0.7811324436842906#2051
+-0.8395625624367278#2052
+-0.8896040495877838#2053
+-0.9307569071393618#2054
+-0.9626099493421324#2055
+-0.9848449111276216#2056
+-0.9972396281075698#2057
+-0.9996702563670624#2058
+-0.9921125098719891#2059
+-0.97464190312707#2060
+-0.9474329966598855#2061
+-0.9107576528697868#2062
+-0.864982319668668#2063
+-0.8105643690545611#2064
+-0.7480475272018192#2065
+-0.6780564417289145#2066
+-0.6012904404259155#2067
+-0.5185165438023752#2068
+-0.4305618012719435#2069
+-0.338305027548012#2070
+-0.24266802181759525#2071
+-0.1446063574285605#2072
+-0.04509983411660629#2073
+0.054857311829817915#2074
+0.15426634164985503#2075
+0.2521339931777998#2076
+0.34748240519032947#2077
+0.43935888787260957#2078
+0.5268454417800063#2079
+0.6090679301850868#2080
+0.6852048131628486#2081
+0.7544953561460856#2082
+0.8162472309337178#2083
+0.8698434332053228#2084
+0.9147484474243518#2085
+0.9505135975323528#2086
+0.9767815299718332#2087
+0.993289784244882#2088
+0.9998734153317062#2089
+0.9964666417667453#2090
+0.9831035029053308#2091
+0.9599175188136995#2092
+0.9271403561806276#2093
+0.8850995135804554#2094
+0.8342150492155885#2095
+0.7749953838337934#2096
+0.7080322207561459#2097
+0.633994633773039#2098
+0.5536223819800354#2099
+0.4677185183495166#2100
+0.37714136589083663#2101
+0.2827959415705366#2102
+0.18562491368197392#2103
+0.08659918301533971#2104
+-0.013291818062099673#2105
+-0.11305001168715346#2106
+-0.21167864696479485#2107
+-0.308192259173622#2108
+-0.4016265162036029#2109
+-0.49104785384375327#2110
+-0.5755628036471371#2111
+-0.6543269201722473#2112
+-0.7265532184027201#2113
+-0.7915200370414769#2114
+-0.8485782491118543#2115
+-0.8971577478197825#2116
+-0.9367731428724192#2117
+-0.967028610337507#2118
+-0.9876218475852627#2119
+-0.9983470937963259#2120
+-0.9990971858558507#2121
+-0.9898646290919259#2122
+-0.970741672159859#2123
+-0.9419193853241061#2124
+-0.9036857513473486#2125
+-0.8564227880619233#2126
+-0.8006027313739196#2127
+-0.7367833168381062#2128
+-0.6656022069486314#2129
+-0.5877706198261639#2130
+-0.5040662229615295#2131
+-0.4153253630192043#2132
+-0.32243470933790386#2133
+-0.22632239462364384#2134
+-0.1279487413545418#2135
+-0.02829666655605602#2136
+0.07163813918102345#2137
+0.17085716031182666#2138
+0.26836903317466254#2139
+0.3631994513690255#2140
+0.45440090070308614#2141
+0.5410621264422896#2142
+0.6223172382654424#2143
+0.6973543619545768#2144
+0.7654237513737662#2145
+0.8258452796846828#2146
+0.8780152349491458#2147
+0.9214123522192472#2148
+0.9556030218444039#2149
+0.9802456219556541#2150
+0.995093931838447#2151
+0.9999995920886321#2152
+0.9949135869705855#2153
+0.9798867341662368#2154
+0.9550691770215901#2155
+0.9207088843640407#2156
+0.8771491728798204#2157
+0.824825276807153#2158
+0.7642599992196163#2159
+0.6960584883506457#2160
+0.6209021911524217#2161
+0.5395420445031802#2162
+0.4527909720941514#2163
+0.3615157619647542#2164
+0.2666284058430285#2165
+0.16907698682575256#2166
+0.06983620644553508#2167
+-0.030102354224705447#2168
+-0.1297401421220481#2169
+-0.22808160940569652#2170
+-0.3241441606419197#2171
+-0.41696797057282303#2172
+-0.5056255743730492#2173
+-0.5892311345717338#2174
+-0.6669492920476956#2175
+-0.7380035126616422#2176
+-0.8016838461286017#2177
+-0.8573540196064917#2178
+-0.9044577951240342#2179
+-0.9425245273266959#2180
+-0.9711738660094966#2181
+-0.99011955645053#2182
+-0.9991722995735218#2183
+-0.9982416433616265#2184
+-0.9873368866240788#2185
+-0.9665669860855675#2186
+-0.9361394677266565#2187
+-0.896358353252788#2188
+-0.8476211224098967#2189
+-0.7904147414981781#2190
+-0.7253107977657867#2191
+-0.6529597882979938#2192
+-0.5740846204653375#2193
+-0.48947338887213754#2194
+-0.3999715009757185#2195
+-0.3064732300545506#2196
+-0.2099127799252589#2197
+-0.11125495068689388#2198
+-0.01148549875726277#2199
+0.08839871247934979#2200
+0.18739967300159813#2201
+0.28452819793731066#2202
+0.3788138111717516#2203
+0.4693144420241625#2204
+0.5551258381065974#2205
+0.6353906003148769#2206
+0.709306749677019#2207
+0.7761357404620275#2208
+0.8352098394847063#2209
+0.8859387978749215#2210
+0.9278157486492024#2211
+0.9604222711580919#2212
+0.9834325718069646#2213
+0.9966167392779312#2214
+0.999843041727728#2215
+0.9930792430087505#2216
+0.9763929247619841#2217
+0.9499508111635871#2218
+0.9140171030720339#2219
+0.8689508382204706#2220
+0.8152023038303673#2221
+0.7533085374904468#2222
+0.6838879612546183#2223
+0.6076342025732385#2224
+0.5253091637969104#2225
+0.43773540950004725#2226
+0.34578794768754867#2227
+0.2503854870040551#2228
+0.15248125730085532#2229
+0.05305348527830788#2230
+-0.046904379631989734#2231
+-0.1463935914855311#2232
+-0.24442008696423675#2233
+-0.3400044177285349#2234
+-0.43219153674140776#2235
+-0.5200603407826888#2236
+-0.6027328738079627#2237
+-0.6793830991951469#2238
+-0.7492451532293688#2239
+-0.8116209973600432#2240
+-0.8658873927713292#2241
+-0.9115021275783626#2242
+-0.9480094344291783#2243
+-0.9750445443814343#2244
+-0.9923373315531067#2245
+-0.9997150121310117#2246
+-0.9971038707695518#2247
+-0.9845299971300822#2248
+-0.9621190252016383#2249
+-0.9300948780076469#2250
+-0.8887775302410945#2251
+-0.8385798111831653#2252
+-0.780003279849526#2253
+-0.7136332135784356#2254
+-0.6401327601330475#2255
+-0.5602363117481685#2256
+-0.4747421673258055#2257
+-0.3845045560964199#2258
+-0.2904251024428272#2259
+-0.19344381716740122#2260
+-0.09452970521486317#2261
+0.005328916304815557#2262
+0.10513429305428211#2263
+0.2038892027003272#2264
+0.3006069188298006#2265
+0.3943210699937632#2266
+0.4840952953715645#2267
+0.569032600578643#2268
+0.64828432013791#2269
+0.7210585970646649#2270
+0.7866282948398333#2271
+0.8443382627177061#2272
+0.8936118817756269#2273
+0.9339568262996617#2274
+0.9649699829403923#2275
+0.9863414784882509#2276
+0.9978577760242008#2277
+0.9994038085100443#2278
+0.9909641285002334#2279
+0.9726230624876389#2280
+0.9445638683411081#2281
+0.9070669042534167#2282
+0.8605068274948806#2283
+0.8053488509617559#2284
+0.7421440949227586#2285
+0.6715240804075154#2286
+0.5941944192571897#2287
+0.5109277638842079#2288
+0.42255608718475995#2289
+0.3299623697406341#2290
+0.23407177736911827#2291
+0.135842417171973#2292
+0.03625576444597857#2293
+-0.0636931438937977#2294
+-0.16300565139394135#2295
+-0.26068946030786144#2296
+-0.3557685463068644#2297
+-0.44729291059261544#2298
+-0.534348071971104#2299
+-0.6160642040464467#2300
+-0.6916248262387088#2301
+-0.7602749617879662#2302
+-0.8213286812325286#2303
+-0.8741759559893822#2304
+-0.9182887535581434#2305
+-0.9532263134472572#2306
+-0.9786395511071335#2307
+-0.9942745458675742#2308
+-0.9999750780291754#2309
+-0.9956841897589236#2310
+-0.9814447541940361#2311
+-0.9573990470677456#2312
+-0.9237873251372041#2313
+-0.8809454256173832#2314
+-0.8293014106066361#2315
+-0.7693712900317081#2316
+-0.7017538658471201#2317
+-0.6271247490039753#2318
+-0.5462296089686645#2319
+-0.45987672324004214#2320
+-0.3689289013078397#2321
+-0.2742948637454506#2322
+-0.17692016257434437#2323
+-0.07777773362082588#2324
+0.022141824737131294#2325
+0.12184014930142922#2326
+0.2203210873689061#2327
+0.3166006499598618#2328
+0.4097168435106797#2329
+0.4987392817955214#2330
+0.5827784820379505#2331
+0.6609947523288111#2332
+0.7326065815502183#2333
+0.7968984479763155#2334
+0.8532279685298386#2335
+0.901032317261481#2336
+0.9398338489207327#2337
+0.9692448714293358#2338
+0.9889715195723757#2339
+0.9988166912023702#2340
+0.9986820166187732#2341
+0.9885688414455068#2342
+0.968578213185931#2343
+0.9389098715895922#2344
+0.8998602529186711#2345
+0.8518195280548398#2346
+0.7952677040407854#2347
+0.7307698280085084#2348
+0.6589703414151602#2349
+0.5805866409970266#2350
+0.49640191077847906#2351
+0.407257296756089#2352
+0.31404350244587664#2353
+0.21769188926820557#2354
+0.1191651706923382#2355
+0.019447793121681437#2356
+-0.08046390036926145#2357
+-0.17957162516554395#2358
+-0.27688512964165996#2359
+-0.37143208942845196#2360
+-0.4622678225568002#2361
+-0.5484847284075876#2362
+-0.6292213561570731#2363
+-0.7036710121087649#2364
+-0.7710898199101781#2365
+-0.8308041531194559#2366
+-0.8822173658581055#2367
+-0.9248157542993909#2368
+-0.9581736894271621#2369
+-0.9819578697802895#2370
+-0.9959306516906896#2371
+-0.9999524237403014#2372
+-0.993983001712226#2373
+-0.9780820300981395#2374
+-0.9524083861502476#2375
+-0.917218592432299#2376
+-0.8728642537309242#2377
+-0.8197885439368322#2378
+-0.7585217779977886#2379
+-0.6896761131869558#2380
+-0.6139394326297725#2381
+-0.532068472203148#2382
+-0.44488125948072355#2383
+-0.35324894027176074#2384
+-0.2580870744201778#2385
+-0.16034648783323305#2386
+-0.061003772143360675#2387
+0.03894847307260204#2388
+0.13851155802027681#2389
+0.23669068126604687#2390
+0.33250486946414387#2391
+0.4249967789180523#2392
+0.5132422610422692#2393
+0.5963595961494876#2394
+0.6735183033022544#2395
+0.7439474382039768#2396
+0.8069432962194937#2397
+0.861876443559176#2398
+0.9081980063732902#2399
+0.9454451549180705#2400
+0.9732457279975278#2401
+0.9913219514750999#2402
+0.9994932137010042#2403
+0.9976778701241392#2404
+0.9858940590574525#2405
+0.9642595204459123#2406
+0.9329904194478973#2407
+0.8923991865843892#2408
+0.8428913960364823#2409
+0.7849617132822316#2410
+0.7191889525627104#2411
+0.6462302935614438#2412
+0.5668147150822461#2413
+0.4817357113339816#2414
+0.39184336359872296#2415
+0.2980358465005815#2416
+0.20125045374175918#2417
+0.1024542329737048#2418
+0.0026343233766439834#2419
+-0.09721190750880472#2420
+-0.19608682914840989#2421
+-0.29300251600885235#2422
+-0.3869906185830895#2423
+-0.47711203881853564#2424
+-0.5624663132743792#2425
+-0.6422006102546296#2426
+-0.7155182510205144#2427
+-0.7816866699410908#2428
+-0.840044734046876#2429
+-0.890009348851936#2430
+-0.9310812844412447#2431
+-0.9628501636109706#2432
+-0.9849985622218451#2433
+-0.9973051807962356#2434
+-0.999647055669374#2435
+-0.9920007876016487#2436
+-0.9744427755760723#2437
+-0.9471484534448972#2438
+-0.9103905370525548#2439
+-0.8645362993490856#2440
+-0.8100439007202268#2441
+-0.7474578112002859#2442
+-0.6774033703075353#2443
+-0.6005805388584559#2444
+-0.5177569051906351#2445
+-0.42976001567382827#2446
+-0.33746910614018294#2447
+-0.2418063168504405#2448
+-0.14372747877327008#2449
+-0.0442125632381852#2450
+0.05574410961404525#2451
+0.155143805749565#2452
+0.2529933562617591#2453
+0.34831508078667095#2454
+0.44015655616202054#2455
+0.5276001327246129#2456
+0.6097721031624384#2457
+0.6858514323093241#2458
+0.7550779606569172#2459
+0.8167599996172166#2460
+0.8702812426463021#2461
+0.9151069231755982#2462
+0.9507891578226558#2463
+0.9769714214938605#2464
+0.9933921096653152#2465
+0.9998871522487686#2466
+0.9963916529257024#2467
+0.9829405375698944#2468
+0.959668205279632#2469
+0.9268071855063493#2470
+0.8846858146972121#2471
+0.8337249556658711#2472
+0.774433792470347#2473
+0.7074047428142367#2474
+0.633307538804846#2475
+0.5528825352113574#2476
+0.4669333120847054#2477
+0.3763186456513355#2478
+0.28194392770502347#2479
+0.18475211923135468#2480
+0.08571432865325745#2481
+-0.014179891163352991#2482
+-0.11393243019470806#2483
+-0.212546594044612#2484
+-0.3090370625853853#2485
+-0.402439734950877#2486
+-0.49182136251362973#2487
+-0.5762888735966745#2488
+-0.6549982967505166#2489
+-0.7271631934368789#2490
+-0.7920625158626148#2491
+-0.8490478114509101#2492
+-0.8975497019650812#2493
+-0.9370835725477036#2494
+-0.9672544138320761#2495
+-0.9877607687452395#2496
+-0.9983977445674013#2497
+-0.9990590601522629#2498
+-0.9897381078531023#2499
+-0.9705280195441958#2500
+-0.9416207360779147#2501
+-0.9033050894751768#2502
+-0.8559639170113676#2503
+-0.8000702360328346#2504
+-0.7361825177239204#2505
+-0.664939107047496#2506
+-0.5870518446130994#2507
+-0.5032989542008693#2508
+-0.4145172670067797#2509
+-0.32159386030194986#2510
+-0.22545719404978#2511
+-0.12706783404090483#2512
+-0.027408854237334586#2513
+0.07252398577761245#2514
+0.17173219009991203#2515
+0.26922450314584817#2516
+0.36402681395014#2517
+0.4551918891607088#2518
+0.5418088374812179#2519
+0.6230122109958052#2520
+0.6979906524385796#2521
+0.7659950020072227#2522
+0.8263457827200938#2523
+0.8784399895256259#2524
+0.9217571143294733#2525
+0.9558643467393337#2526
+0.9804208985633203#2527
+0.9951814088529242#2528
+0.9999983954685079#2529
+0.9948237286720926#2530
+0.9797091120237905#2531
+0.9548055657769237#2532
+0.9203619179335726#2533
+0.8767223180374318#2534
+0.8243227985453299#2535
+0.7636869181350534#2536
+0.6954205304801045#2537
+0.620205730760064#2538
+0.5387940403910272#2539
+0.45199889807203436#2540
+0.3606875321744773#2541
+0.26577229568287974#2542
+0.16820155026545985#2543
+0.068950190557828#2544
+-0.03099009666195487#2545
+-0.13062074107985552#2546
+-0.2289462662303628#2547
+-0.32498423596827036#2548
+-0.41777507064588915#2549
+-0.5063916349156925#2550
+-0.5899485013602381#2551
+-0.6676107973902402#2552
+-0.738602547015509#2553
+-0.8022144241405411#2554
+-0.8578108399163944#2555
+-0.9048362933343682#2556
+-0.9428209216084585#2557
+-0.9713851948889993#2558
+-0.9902437083994649#2559
+-0.9992080341066545#2560
+-0.9981886034313139#2561
+-0.9871956021877676#2562
+-0.966338868810637#2563
+-0.9358267968855071#2564
+-0.8959642529491038#2565
+-0.8471495303636348#2566
+-0.7898703697011723#2567
+-0.7246990854010827#2568
+-0.6522868473933305#2569
+-0.5733571748237859#2570
+-0.48869870689008327#2571
+-0.39915732301944756#2572
+-0.30562769112106847#2573
+-0.20904432836008902#2574
+-0.11037226377100239#2575
+-0.010597396006535125#2576
+0.0892833574357961#2577
+0.18827202108378255#2578
+0.2853795329315549#2579
+0.37963562682020546#2580
+0.4700985270165206#2581
+0.5558643581247975#2582
+0.6360761763110162#2583
+0.7099325316023618#2584
+0.7766954757104277#2585
+0.8356979353665813#2586
+0.8863503774975581#2587
+0.9281466996450561#2588
+0.9606692867742049#2589
+0.9835931839449478#2590
+0.9966893431543875#2591
+0.9998269119087179#2592
+0.992974540658088#2593
+0.9762006960309414#2594
+0.9496729767380968#2595
+0.9136564389818304#2596
+0.8685109481019182#2597
+0.8146875829201173#2598
+0.7527241287096857#2599
+0.6832397038226994#2600
+0.6069285736641322#2601
+0.5245532138214233#2602
+0.43693669166044735#2603
+0.34495444250846585#2604
+0.2495255225937167#2605
+0.15160342613938146#2606
+0.052166558364490814#2607
+-0.047791540417606526#2608
+-0.14727212192563383#2609
+-0.24528120907307063#2610
+-0.3408395274586362#2611
+-0.4329922899524019#2612
+-0.520818736613183#2613
+-0.6034413346175079#2614
+-0.6800345462775168#2615
+-0.7498330775406523#2616
+-0.8121395245548596#2617
+-0.8663313418973455#2618
+-0.911867062842657#2619
+-0.9482917095192162#2620
+-0.9752413388978184#2621
+-0.9924466791900753#2622
+-0.9997358203231163#2623
+-0.9970359316082094#2624
+-0.9843739894409296#2625
+-0.9618765077619307#2626
+-0.9297682739714707#2627
+-0.888370102928013#2628
+-0.8380956314722081#2629
+-0.7794471855043118#2630
+-0.713010760909837#2631
+-0.6394501684823696#2632
+-0.5595004013455463#2633
+-0.4739602911447193#2634
+-0.38368452638521455#2635
+-0.28957511266730906#2636
+-0.19257236014443638#2637
+-0.0936454882549586#2638
+0.006217058398080305#2639
+0.10601748625869184#2640
+0.2047586224413277#2641
+0.3014538781527306#2642
+0.3951371063610338#2643
+0.48487225521753735#2644
+0.5697627207773633#2645
+0.6489603055696946#2646
+0.7216736935065267#2647
+0.7871763564514449#2648
+0.8448138134486051#2649
+0.8940101700801013#2650
+0.934273872612625#2651
+0.9652026194398814#2652
+0.986487380747257#2653
+0.9979154862355749#2654
+0.9993727500524254#2655
+0.9908446116994578#2656
+0.9724162815160672#2657
+0.9442718892858502#2658
+0.9066926444726718#2659
+0.860054026468659#2660
+0.8048220329282305#2661
+0.7415485236735729#2662
+0.6708657066937176#2663
+0.5934798213312947#2664
+0.5101640817724733#2665
+0.42175095134640345#2666
+0.32912382482680763#2667
+0.23320820184341287#2668
+0.13496243959558005#2669
+0.035368177263958724#2670
+-0.06457947220371922#2671
+-0.16388186493227264#2672
+-0.26154680423856425#2673
+-0.3565984543327818#2674
+-0.4480870905470817#2675
+-0.5350985886705324#2676
+-0.6167635585760615#2677
+-0.6922660308792223#2678
+-0.7608516098345607#2679
+-0.8218350110085325#2680
+-0.8746069084150397#2681
+-0.918640022699266#2682
+-0.9534943895386959#2683
+-0.9788217556211913#2684
+-0.9943690582769701#2685
+-0.9999809539971505#2686
+-0.9956013705747425#2687
+-0.9812740673596052#2688
+-0.9571421980294875#2689
+-0.9234468802458005#2690
+-0.8805247864856478#2691
+-0.8288047801217232#2692
+-0.7688036303612542#2693
+-0.7011208488589045#2694
+-0.6264326995944929#2695
+-0.54548544186685#2696
+-0.4590878739175849#2697
+-0.3681032516864081#2698
+-0.2734406634431365#2699
+-0.17604594647820584#2700
+-0.07689223660911715#2701
+0.023029755070976092#2702
+0.12272164105102494#2703
+0.22118733296007248#2704
+0.31744299415299343#2705
+0.4105268698810389#2706
+0.4995088968273724#2707
+0.5834999959922931#2708
+0.6616609560767109#2709
+0.7332108186040404#2710
+0.797434680999148#2711
+0.8536908396585681#2712
+0.9014172016407891#2713
+0.9401369009131222#2714
+0.9694630630394689#2715
+0.9891026707018031#2716
+0.9988594914323538#2717
+0.9986360383035573#2718
+0.988434543985213#2719
+0.9683569384363839#2720
+0.9386038304549402#2721
+0.8994725032607627#2722
+0.8513539441400785#2723
+0.7947289378297411#2724
+0.730163262675065#2725
+0.6583020375596216#2726
+0.5798632760906015#2727
+0.4956307124441966#2728
+0.4064459705527783#2729
+0.31320015487677#2730
+0.2168249467834381#2731
+0.11828329549464342#2732
+0.018559796616524828#2733
+-0.08134914561433308#2734
+-0.18044527407266456#2735
+-0.2777384529997385#2736
+-0.37225656111256417#2737
+-0.4630552047184104#2738
+-0.5492271537844082#2739
+-0.6299114066801492#2740
+-0.7043017930213666#2741
+-0.7716550286579311#2742
+-0.8312981423233815#2743
+-0.8826351997413644#2744
+-0.9251532580039342#2745
+-0.9584274907275325#2746
+-0.9821254327777841#2747
+-0.9960103021512207#2748
+-0.9999433658227904#2749
+-0.9938853259203851#2750
+-0.9778967123761879#2751
+-0.9521372781315993#2752
+-0.9168644029386548#2753
+-0.8724305217066197#2754
+-0.8192796030888767#2755
+-0.7579427134948966#2756
+-0.6890327108502228#2757
+-0.6132381211226626#2758
+-0.531316258798414#2759
+-0.4440856600460539#2760
+-0.3524179041737139#2761
+-0.2572289050967394#2762
+-0.15946975982860834#2763
+-0.06011724543396326#2764
+0.039835940604938974#2765
+0.13939109909332772#2766
+0.23755350779614662#2767
+0.3333423603738149#2768
+0.425800566274961#2769
+0.5140043136688397#2770
+0.5970722998677733#2771
+0.6741745370122875#2772
+0.7445406450354447#2773
+0.8074675490458203#2774
+0.862326504219411#2775
+0.908569378010082#2776
+0.9457341269087781#2777
+0.9734494130295364#2778
+0.9914383143948933#2779
+0.9995210918487465#2780
+0.997616984950588#2781
+0.9857450189071303#2782
+0.9640238144787292#2783
+0.932670402759958#2784
+0.8919980566766509#2785
+0.8424131608663822#2786
+0.7844111512175009#2787
+0.7185715646375037#2788
+0.6455522485118246#2789
+0.5660827877102146#2790
+0.4809572148158928#2791
+0.39102607641444626#2792
+0.29718793471350063#2793
+0.20038038940616668#2794
+0.10157070948483571#2795
+0.001746168609144461#2796
+-0.09809581940608277#2797
+-0.1969576664199707#2798
+-0.2938515775365379#2799
+-0.38780942082477593#2800
+-0.4778924005728819#2801
+-0.5632004374246865#2802
+-0.6428811616750538#2803
+-0.7161384298662196#2804
+-0.7822402795900505#2805
+-0.8405262430144722#2806
+-0.8904139460597256#2807
+-0.9314049272876644#2808
+-0.9630896183636759#2809
+-0.9851514363280947#2810
+-0.9973699467884874#2811
+-0.9996230664272368#2812
+-0.9918882828176945#2813
+-0.9742428793609076#2814
+-0.9468631630954215#2815
+-0.9100227030956302#2816
+-0.8640895970600148#2817
+-0.8095227934006172#2818
+-0.746867505582215#2819
+-0.6767497645296058#2820
+-0.5998701635335436#2821
+-0.5169968581541643#2822
+-0.4289578910645463#2823
+-0.33663291852203614#2824
+-0.24094442113370063#2825
+-0.14284848673503256#2826
+-0.04332525747633915#2827
+0.056630863433631995#2828
+0.15602114747584864#2829
+0.25385251978622037#2830
+0.34914748163137366#2831
+0.44095387725287755#2832
+0.5283544074928413#2833
+0.610475795143881#2834
+0.6864975104463086#2835
+0.7556599695502599#2836
+0.8172721240264376#2837
+0.8707183655935856#2838
+0.9154646770729435#2839
+0.9510639681113735#2840
+0.9771605423603803#2841
+0.9934936514764484#2842
+0.9999001004322978#2843
+0.9963158781076524#2844
+0.9827767968671937#2845
+0.9594181347352508#2846
+0.9264732837424994#2847
+0.8842714179499392#2848
+0.8332342044504877#2849
+0.7738715902107717#2850
+0.7067767068496035#2851
+0.6326199442629082#2852
+0.5521422523094861#2853
+0.4661477374849479#2854
+0.3754956285554135#2855
+0.281091691427704#2856
+0.1838791790358073#2857
+0.08482940666935936#2858
+-0.015067953087655503#2859
+-0.11481475883822152#2860
+-0.21341437347118883#2861
+-0.3098816222298437#2862
+-0.4032526362524221#2863
+-0.4925944832311636#2864
+-0.5770144889635445#2865
+-0.6556691566578302#2866
+-0.7277725948741954#2867
+-0.7926043698922097#2868
+-0.8495167040464284#2869
+-0.8979409481066987#2870
+-0.9373932630332972#2871
+-0.9674794543366784#2872
+-0.9878989107385114#2873
+-0.9984476077802041#2874
+-0.9990201463678514#2875
+-0.9896108058851415#2876
+-0.9703136013518633#2877
+-0.9413213440569057#2878
+-0.902923715051594#2879
+-0.8555043707523807#2880
+-0.7995371095727526#2881
+-0.7355811378860999#2882
+-0.6642754826204825#2883
+-0.5863326063127988#2884
+-0.5025312884186264#2885
+-0.41370884400533103#2886
+-0.3207527575766946#2887
+-0.22459181562111544#2888
+-0.12618682648403282#2889
+-0.026521020288540302#2890
+0.07340977517499168#2891
+0.17260708443102024#2892
+0.27007976075572954#2893
+0.3648538893874657#2894
+0.4559825185611017#2895
+0.5425551211370541#2896
+0.623706692287481#2897
+0.6986263923385901#2898
+0.7665656484126308#2899
+0.8268456339206427#2900
+0.878864051173344#2901
+0.9221011493405477#2902
+0.9561249176296516#2903
+0.9805954017946731#2904
+0.995268100846702#2905
+0.9999964100269597#2906
+0.9947330856330885#2907
+0.979530717062608#2908
+0.9545412013570396#2909
+0.920014225496878#2910
+0.876294771611817#2911
+0.8238196700333464#2912
+0.7631132346304763#2913
+0.6947820240388727#2914
+0.6195087811274721#2915
+0.5380456112574195#2916
+0.45120646749391313#2917
+0.35985901785623386#2918
+0.26491597586570953#2919
+0.16732598101391277#2920
+0.06806412027043987#2921
+-0.03187781466376874#2922
+-0.13150123701126137#2923
+-0.22981074246706656#2924
+-0.3258240549494714#2925
+-0.41858184117793273#2926
+-0.507157296014103#2927
+-0.5906654027924112#2928
+-0.6682717761140383#2929
+-0.7392009987500107#2930
+-0.8027443693538329#2931
+-0.8582669835710771#2932
+-0.9052140777938206#2933
+-0.9431165721752354#2934
+-0.9715957575203611#2935
+-0.9903670792231963#2936
+-0.9992429804422601#2937
+-0.9981347761065544#2938
+-0.987053539027478#2939
+-0.9661099892629551#2940
+-0.9355133878392158#2941
+-0.8955694458837944#2942
+-0.8466772700609979#2943
+-0.7893253748300435#2944
+-0.724086801370063#2945
+-0.6516133919420634#2946
+-0.5726292768965259#2947
+-0.4879236394023083#2948
+-0.3983428301892924#2949
+-0.3047819110916564#2950
+-0.2081757118858963#2951
+-0.1094894897807127#2952
+-0.009709284886053158#2953
+0.090167931973725#2954
+0.18914422066277686#2955
+0.28623064282173216#2956
+0.38045714301288247#2957
+0.47088224119345734#2958
+0.5566024396729995#2959
+0.6367612505636312#2960
+0.7105577535239129#2961
+0.7772545982901459#2962
+0.8361853720364713#2963
+0.8867612579515394#2964
+0.9284769185014516#2965
+0.9609155445953574#2966
+0.9837530202041103#2967
+0.9967611608204933#2968
+0.9998099934033869#2969
+0.9928690550254331#2970
+0.9760076972485352#2971
+0.9493943931859762#2972
+0.9132950541747605#2973
+0.8680703728774336#2974
+0.8141722193602262#2975
+0.7521391261567218#2976
+0.6825909074287959#2977
+0.6062224659883935#2978
+0.523796850058337#2979
+0.4361376291467138#2980
+0.3441206652125872#2981
+0.24866536134282327#2982
+0.1507254753803607#2983
+0.05127959029111491#2984
+-0.04867866351354105#2985
+-0.1481505362033963#2986
+-0.2461421377075628#2987
+-0.3416743683355274#2988
+-0.43379270161761196#2989
+-0.521576721617934#2990
+-0.6041493194261889#2991
+-0.6806854569399482#2992
+-0.7504204103726574#2993
+-0.8126574111209275#2994
+-0.8667746076460986#2995
+-0.9122312788092578#2996
+-0.9485732365781204#2997
+-0.9754373641237138#2998
+-0.9925552439637022#2999
+-0.9997558399011433#3000
+-0.9969672059616304#3001
+-0.9842172052536875#3002
+-0.9616332315697985#3003
+-0.9294409365097438#3004
+-0.8879619748444056#3005
+-0.8376107906476223#3006
+-0.778890476308#3007
+-0.712387745796065#3008
+-0.6387670724122129#3009
+-0.5587640495891363#3010
+-0.4731780410854005#3011
+-0.38286419400700217#3012
+-0.2887248944601604#3013
+-0.1917007512076325#3014
+-0.09276119741688045#3015
+0.007105195595686342#3016
+0.10690059584252641#3017
+0.20562788067234633#3018
+0.30230059969002754#3019
+0.39595283104289725#3020
+0.48564883259258895#3021
+0.5704923915411738#3022
+0.649635779093189#3023
+0.7222882206815403#3024
+0.7877237971255806#3025
+0.8452886977756067#3026
+0.8944077531727492#3027
+0.9345901819520811#3028
+0.9654344945677839#3029
+0.9866325048439754#3030
+0.9979724092691066#3031
+0.9993409032666355#3032
+0.9907243132969028#3033
+0.9722087334786201#3034
+0.9439791653648948#3035
+0.9063176694688648#3036
+0.8596005470082881#3037
+0.8042945800281633#3038
+0.7409523674688342#3039
+0.670206803780042#3040
+0.5927647552487915#3041
+0.5093999972250692#3042
+0.42094548281432353#3043
+0.32828502028537193#3044
+0.23234444235032745#3045
+0.13408235555017892#3046
+0.0344805621751064#3047
+-0.06546574957946144#3048
+-0.16475794920433068#3049
+-0.26240394186248667#3050
+-0.3574280810727624#3051
+-0.4488809170469727#3052
+-0.5358486832783511#3053
+-0.6174624265944348#3054
+-0.6929066894499258#3055
+-0.7614276577089293#3056
+-0.8223406925066218#3057
+-0.8750371709344767#3058
+-0.9189905671991826#3059
+-0.9537617134943233#3060
+-0.9790031880199306#3061
+-0.9944627863062665#3062
+-0.9999860411575177#3063
+-0.9955177660369557#3064
+-0.9811026064725701#3065
+-0.9568845939737097#3066
+-0.9231057069158529#3067
+-0.8801034527726663#3068
+-0.8283074958528935#3069
+-0.7682353642366102#3070
+-0.7004872788057198#3071
+-0.6257401560353084#3072
+-0.5447408444679848#3073
+-0.45829866245011713#3074
+-0.36727731169044214#3075
+-0.27258624743809257#3076
+-0.17517159150637399#3077
+-0.07600667893635255#3078
+0.0239176672451336#3079
+0.12360303600163591#3080
+0.22205340408014085#3081
+0.3182850879461725#3082
+0.41133657242450644#3083
+0.5002781178409661#3084
+0.5842210496739159#3085
+0.6623266378963246#3086
+0.7338144772889486#3087
+0.7979702849913142#3088
+0.8541530373799495#3089
+0.901801374964536#3090
+0.9404392113063745#3091
+0.969680489916708#3092
+0.9892330416055432#3093
+0.9989015037396196#3094
+0.9985892722412621#3095
+0.9882994668243924#3096
+0.9681348998233783#3097
+0.9382970489261745#3098
+0.8990840440758637#3099
+0.8508876886548145#3100
+0.7941895447147971#3101
+0.7295561213681458#3102
+0.6576332144159718#3103
+0.5791394537699889#3104
+0.49485912313998487#3105
+0.40563432373024166#3106
+0.31235656024266445#3107
+0.21595783325649234#3108
+0.11740132698658906#3109
+0.017671785465154324#3110
+-0.08223432669513268#3111
+-0.18131878064613588#3112
+-0.2785915572769423#3113
+-0.37308073915756135#3114
+-0.4638422216166124#3115
+-0.5499691459231215#3116
+-0.6306009603191937#3117
+-0.704932018368717#3118
+-0.7722196287102416#3119
+-0.8317914757835613#3120
+-0.8830523373845538#3121
+-0.9254900319286898#3122
+-0.9586805360001208#3123
+-0.9822922210534869#3124
+-0.9960891669367201#3125
+-0.9999335191272192#3126
+-0.9937868661286703#3127
+-0.9777106232660219#3128
+-0.951865419043858#3129
+-0.9165094901994781#3130
+-0.8719961014867792#3131
+-0.8187700159716086#3132
+-0.7573630511062297#3133
+-0.6883887649851336#3134
+-0.6125363258753749#3135
+-0.530563626275056#3136
+-0.4432897103020118#3137
+-0.3515865900757242#3138
+-0.2563705328604733#3139
+-0.1585929060257105#3140
+-0.05923067129778288#3141
+0.040723376718695616#3142
+0.14027053021635935#3143
+0.23841614694337318#3144
+0.3341795883400279#3145
+0.4266040177550728#3146
+0.5147659608412467#3147
+0.597784532605696#3148
+0.6748302389216413#3149
+0.7451332645594977#3150
+0.807991164926182#3151
+0.8627758846592893#3152
+0.908940032948667#3153
+0.9460223528844458#3154
+0.9736523301836125#3155
+0.99155389524625#3156
+0.9995481815517231#3157
+0.9975553128338268#3158
+0.985595201178036#3159
+0.9637873480665278#3160
+0.9323496503588747#3161
+0.8915962231386506#3162
+0.8419342611793482#3163
+0.783859970388803#3164
+0.7179536098837859#3165
+0.6448736942327173#3166
+0.5653504137957747#3167
+0.4801783389041825#3168
+0.3902084807761133#3169
+0.29633978849390213#3170
+0.19951016700196894#3171
+0.10068710587064418#3172
+8.58012460191664E-4#3173
+-0.09897965392714189#3174
+-0.19782834833075857#3175
+-0.2947004072712111#3176
+-0.3886279171572114#3177
+-0.4786723853582849#3178
+-0.5639341173129099#3179
+-0.6435612059791769#3180
+-0.7167580438083482#3181
+-0.7827932721924921#3182
+-0.8410070889579382#3183
+-0.8908178408904955#3184
+-0.931727835422099#3185
+-0.9633283134104351#3186
+-0.9853035333251733#3187
+-0.9974339260329675#3188
+-0.9995982886596559#3189
+-0.991774995609316#3190
+-0.9740422146400699#3191
+-0.9465771258376843#3192
+-0.9096541512907214#3193
+-0.8636422131557419#3194
+-0.8090010475090663#3195
+-0.7462766108158684#3196
+-0.6760956249136447#3197
+-0.5991593150147811#3198
+-0.5162364032960245#3199
+-0.4281554280805988#3200
+-0.33579646535715757#3201
+-0.24008233535141982#3202
+-0.14196938201151837#3203
+-0.04243791753539556#3204
+0.057517572584630666#3205
+0.1568983661321727#3206
+0.25471148306902575#3207
+0.34997960706347403#3208
+0.44175085051201957#3209
+0.5291082654856638#3210
+0.6111790055705121#3211
+0.6871430470606158#3212
+0.7562413823637792#3213
+0.8177836037545257#3214
+0.8711548016998724#3215
+0.9158217088321214#3216
+0.9513380281801238#3217
+0.9773488924210882#3218
+0.9935944095975676#3219
+0.9999122598719884#3220
+0.9962393173728123#3221
+0.9826122809273776#3222
+0.959167307379348#3223
+0.9261386511545373#3224
+0.8838563236681221#3225
+0.8327427959596674#3226
+0.7733087775021505#3227
+0.7061481133617248#3228
+0.6319318506941176#3229
+0.5514015338632693#3230
+0.4653617951751706#3231
+0.374672315257837#3232
+0.2802392334166466#3233
+0.18300609378993019#3234
+0.08394441776783579#3235
+-0.015956003128259934#3236
+-0.1156969969154514#3237
+-0.21428198455380562#3238
+-0.310725937434704#3239
+-0.40406521946109236#3240
+-0.4933672153808272#3241
+-0.5777396491699932#3242
+-0.6563394993599873#3243
+-0.7283814222293667#3244
+-0.7931455986987139#3245
+-0.8499849265249375#3246
+-0.8983314859329812#3247
+-0.9377022140824873#3248
+-0.9677037316720184#3249
+-0.9880362734550029#3250
+-0.9984966833949899#3251
+-0.9989804445336107#3252
+-0.9894827232894784#3253
+-0.9700984177537353#3254
+-0.941021209499695#3255
+-0.9025416283805849#3256
+-0.8550441496512888#3257
+-0.7990033524186914#3258
+-0.7349791778041159#3259
+-0.6636113341967335#3260
+-0.5856129054987965#3261
+-0.5017632262270028#3262
+-0.4129000946596174#3263
+-0.3199114018330162#3264
+-0.22372626002794793#3265
+-0.12530571938674848#3266
+-0.025633165417999926#3267
+0.07429550666640745#3268
+0.1734818426070331#3269
+0.27093480532180136#3270
+0.36568067702093243#3271
+0.4567727882732294#3272
+0.5433009768141075#3273
+0.6244006815860823#3274
+0.69926158114707#3275
+0.7671356901343803#3276
+0.8273448328872091#3277
+0.8792874195536663#3278
+0.9224444569777169#3279
+0.9563847343072394#3280
+0.9807691315103211#3281
+0.9953540077505189#3282
+0.9999936357655596#3283
+0.994641657925974#3284
+0.9793515494252069#3285
+0.9542760839731598#3286
+0.9196658073317829#3287
+0.8758665339446406#3288
+0.8233158916733028#3289
+0.7625389491644119#3290
+0.6941429695373308#3291
+0.6188113428117887#3292
+0.5372967577007027#3293
+0.4504136809933635#3294
+0.3590302196725045#3295
+0.264059447076288#3296
+0.16645027977133223#3297
+0.0671779962920478#3298
+-0.03276550752009386#3299
+-0.1323816292119314#3300
+-0.23067503742423134#3301
+-0.3266636169136169#3302
+-0.4193882815234355#3303
+-0.5079225570556044#3304
+-0.5913818382945464#3305
+-0.668932227690092#3306
+-0.7397988673861511#3307
+-0.8032736813442769#3308
+-0.8587224502053834#3309
+-0.9055911481999364#3310
+-0.9434114787903057#3311
+-0.9718055537349715#3312
+-0.9904896688229197#3313
+-0.9992771385523388#3314
+-0.9980801614304436#3315
+-0.9869106972569683#3316
+-0.9658803476258001#3317
+-0.9351992408387446#3318
+-0.8951739323729925#3319
+-0.8462043418801258#3320
+-0.7887797573211552#3321
+-0.7234739461629501#3322
+-0.6509394224833727#3323
+-0.5719009272663036#3324
+-0.4871481870292994#3325
+-0.3975280231372775#3326
+-0.30393589064335974#3327
+-0.20730693119798013#3328
+-0.10860662942263#3329
+-0.008821166106667043#3330
+0.09105243538514393#3331
+0.19001627104051966#3332
+0.2870815269266859#3333
+0.3812783590923355#3334
+0.47166558392780156#3335
+0.557340082160572#3336
+0.6374458225245284#3337
+0.711182414941391#3338
+0.777813107753807#3339
+0.836672149104373#3340
+0.8871714389081266#3341
+0.9288064049541939#3342
+0.9611610444245324#3343
+0.9839120804565766#3344
+0.9968321922187865#3345
+0.9997922862252552#3346
+0.9927627861951471#3347
+0.9758139285691194#3348
+0.9491150607300238#3349
+0.9129329489398365#3350
+0.867629112899349#3351
+0.813656213562821#3352
+0.751553530299355#3353
+0.6819415725917019#3354
+0.605515880110623#3355
+0.5230400731124144#3356
+0.4353382225977257#3357
+0.34328661646652237#3358
+0.24780500393905253#3359
+0.14984740572566616#3360
+0.05039258176723505#3361
+-0.04956574821064165#3362
+-0.14902883361665542#3363
+-0.2470028721795537#3364
+-0.34250893969192686#3365
+-0.4345927710972995#3366
+-0.5223342951911364#3367
+-0.6048568276681833#3368
+-0.6813358306622516#3369
+-0.7510071512560216#3370
+-0.8131746566443966#3371
+-0.8672171896633807#3372
+-0.9125947751871345#3373
+-0.9488540153809398#3374
+-0.9756326199024913#3375
+-0.9926630257872393#3376
+-0.9997750708490869#3377
+-0.9968976938847057#3378
+-0.9840596446935896#3379
+-0.9613891968195613#3380
+-0.9291128658839244#3381
+-0.8875531463162514#3382
+-0.8371252890966461#3383
+-0.7783331527052134#3384
+-0.7117641687346805#3385
+-0.6380834724681006#3386
+-0.5580272570669699#3387
+-0.4723954177725101#3388
+-0.38204355961682934#3389
+-0.28787444850026606#3390
+-0.19082899105292786#3391
+-0.09187683340666573#3392
+0.00799332718855293#3393
+0.10778362110074621#3394
+0.20649697669942857#3395
+0.3031470827657546#3396
+0.39676824338818645#3397
+0.48642502687682576#3398
+0.5712216122876458#3399
+0.6503107401692458#3400
+0.7229021780992223#3401
+0.7882706164253177#3402
+0.8457629153197103#3403
+0.8948046307362744#3404
+0.9349057540656031#3405
+0.9656656081390587#3406
+0.9867768506625949#3407
+0.9980285450793656#3408
+0.9993082681780738#3409
+0.9906032333885376#3410
+0.972000418540872#3411
+0.9436856968117622#3412
+0.9059419795411228#3413
+0.8591463894755079#3414
+0.8037664926822882#3415
+0.7403556267840615#3416
+0.6695473721920379#3417
+0.592049221580004#3418
+0.508635510851393#3419
+0.4201396822308988#3420
+0.32744595678526595#3421
+0.23148049957867578#3422
+0.1332021657375744#3423
+0.03359291988720454#3424
+-0.06635197531433547#3425
+-0.1656339035115813#3426
+-0.2632608724962278#3427
+-0.35825742586536535#3428
+-0.4496743894594147#3429
+-0.5365983551965742#3430
+-0.6181608075444406#3431
+-0.6935468014401158#3432
+-0.7620031049518906#3433
+-0.8228457253237202#3434
+-0.8754667432047455#3435
+-0.9193403867784948#3436
+-0.9540282851010776#3437
+-0.9791838481587489#3438
+-0.9945557298807602#3439
+-0.9999903395062136#3440
+-0.9954333762121745#3441
+-0.9809303716695452#3442
+-0.9566262351056599#3443
+-0.9227638054191856#3444
+-0.8796814248141186#3445
+-0.8278095581963233#3446
+-0.7676664921104855#3447
+-0.6998531561922808#3448
+-0.6250471188780957#3449
+-0.5439958173651854#3450
+-0.45750908946626917#3451
+-0.366451081977802#3452
+-0.27173161641083377#3453
+-0.17429709835521742#3454
+-0.07512106130779558#3455
+0.02480556055249268#3456
+0.12448433345136849#3457
+0.22291930003944738#3458
+0.3191269306688547#3459
+0.4121459504963556#3460
+0.5010469442238331#3461
+0.5849416425087233#3462
+0.6629917972576633#3463
+0.7344175571243525#3464
+0.7985052595264196#3465
+0.854614561326041#3466
+0.9021848369269034#3467
+0.9407407798598458#3468
+0.969897151887982#3469
+0.9893626321798219#3470
+0.9989427280907218#3471
+0.9985417184690987#3472
+0.9881636100705354#3473
+0.9679120975236041#3474
+0.9379895272474138#3475
+0.8986948756730775#3476
+0.8504207619700415#3477
+0.793649525125126#3478
+0.7289484045708101#3479
+0.6569638725163257#3480
+0.5784151746110389#3481
+0.49408714347967225#3482
+0.40482235693414975#3483
+0.3115127192146192#3484
+0.21509054937710928#3485
+0.11651926586970504#3486
+0.016783760373878607#3487
+-0.08311944290763014#3488
+-0.1821921441912403#3489
+-0.2794444417948066#3490
+-0.3739046229080092#3491
+-0.4646288726255491#3492
+-0.550710704233698#3493
+-0.6312900165258971#3494
+-0.7055616876497018#3495
+-0.7727836196181932#3496
+-0.8322841531077579#3497
+-0.8834687784560297#3498
+-0.9258260758059158#3499
+-0.9589328250437571#3500
+-0.9824582344748051#3501
+-0.9961672459844911#3502
+-0.9999228836614071#3503
+-0.9936876224153341#3504
+-0.9775237629155394#3505
+-0.9515928091030836#3506
+-0.9161538544968271#3507
+-0.8715609934166348#3508
+-0.8182597829899804#3509
+-0.7567827912924092#3510
+-0.6877442761033722#3511
+-0.6118340474455396#3512
+-0.5298105752310752#3513
+-0.4424934108809914#3514
+-0.35075499863825743#3515
+-0.2555119583933158#3516
+-0.15771592712113114#3517
+-0.05834405043910549#3518
+0.041610780708929006#3519
+0.14114985069081507#3520
+0.23927859802253518#3521
+0.3350165526978016#3522
+0.427407132720259#3523
+0.5155272019545877#3524
+0.5984962937976203#3525
+0.6754854085095959#3526
+0.7457252963055302#3527
+0.8085141434447857#3528
+0.8632245845219801#3529
+0.9093099708947372#3530
+0.9463098326162236#3531
+0.9738544792986461#3532
+0.9916686939374035#3533
+0.999574482788422#3534
+0.9974928538228081#3535
+0.9854446059890913#3536
+0.9635501213970051#3537
+0.9320281624992393#3538
+0.8911936862893262#3539
+0.841454697355472#3540
+0.7833081712335805#3541
+0.7173350887919758#3542
+0.6441946312626129#3543
+0.5646175939201048#3544
+0.4793990842169069#3545
+0.38939057733247995#3546
+0.2954914085147568#3547
+0.19863978721962608#3548
+0.09980342283217974#3549
+-3.01443655808235E-5#3550
+-0.0998634103708049#3551
+-0.19869887419005808#3552
+-0.2955490045395186#3553
+-0.38944610693113085#3554
+-0.47945199255605286#3555
+-0.5646673523571102#3556
+-0.6442407426276232#3557
+-0.7173770923554741#3558
+-0.783345647309845#3559
+-0.8414872714959365#3560
+-0.8912210330239467#3561
+-0.9320500085884833#3562
+-0.9635662485619702#3563
+-0.9854548530924759#3564
+-0.9974971184789425#3565
+-0.9995727223862718#3566
+-0.9916609260663253#3567
+-0.9738407815726398#3568
+-0.9462903418984395#3569
+-0.9092848819299848#3570
+-0.8631941479909019#3571
+-0.8084786634591391#3572
+-0.7456851273696038#3573
+-0.6754409519781194#3574
+-0.5984479938655606#3575
+-0.5154755412189004#3576
+-0.42735262735793816#3577
+-0.33495974730841055#3578
+-0.23922006018674727#3579
+-0.14109016529933546#3580
+-0.04155054411846003#3581
+0.05840423636446346#3582
+0.15777546102350673#3583
+0.2555702454296358#3584
+0.350811456423722#3585
+0.4425474753080707#3586
+0.5298617061058852#3587
+0.6118817338852807#3588
+0.6877880416409017#3589
+0.7568221986369429#3590
+0.8182944383963581#3591
+0.8715905506194918#3592
+0.9161780181703624#3593
+0.9516113378118588#3594
+0.9775364715268212#3595
+0.9936943839488795#3596
+0.9999236305582081#3597
+0.9961619707818016#3598
+0.9824469898807066#3599
+0.9589157234105169#3600
+0.9258032880074003#3601
+0.8834405321803889#3602
+0.8322507305824411#3603
+0.7727453547900252#3604
+0.7055189628481972#3605
+0.6312432586431493#3606
+0.5506603804590156#3607
+0.4645754857774538#3608
+0.3738487064102398#3609
+0.2793865543465253#3610
+0.1821328641846953#3611
+0.08305936264905144#3612
+-0.016844040582407176#3613
+-0.11657914372826583#3614
+-0.2151494266059326#3615
+-0.31157000753189684#3616
+-0.4048774839339524#3617
+-0.4941395583512405#3618
+-0.5784643536423021#3619
+-0.6570093243266599#3620
+-0.7289896750207507#3621
+-0.7936862018539796#3622
+-0.8504524785160569#3623
+-0.8987213151350112#3624
+-0.9380104254509017#3625
+-0.9679272456607052#3626
+-0.9881728567860709#3627
+-0.9985449713729435#3628
+-0.9989399546809362#3629
+-0.9893538601673995#3630
+-0.9698824689199713#3631
+-0.9407203326436097#3632
+-0.9021588297642675#3633
+-0.8545832540719774#3634
+-0.7984689649926625#3635
+-0.7343766379538854#3636
+-0.6629466623013117#3637
+-0.5848927427400513#3638
+-0.5009947682331652#3639
+-0.41209101960894357#3640
+-0.3190697937359677#3641
+-0.22286052795443187#3642
+-0.12442451344547048#3643
+-0.024745290327437247#3644
+0.07518117955184238#3645
+0.1743564639366335#3646
+0.27178963616835333#3647
+0.36650717619718665#3648
+0.45756269767262103#3649
+0.5440464039230273#3650
+0.6250941783432632#3651
+0.6998962183621539#3652
+0.7677051267220971#3653
+0.8278433792254051#3654
+0.8797100943321279#3655
+0.9227870369697753#3656
+0.9566437965668558#3657
+0.9809420875730321#3658
+0.9954391294965175#3659
+0.9999900726864973#3660
+0.9945494456229591#3661
+0.9791716092530895#3662
+0.9540102138346597#3663
+0.9193166637134389#3664
+0.8754376053740758#3665
+0.8228114638630091#3666
+0.7619640621903281#3667
+0.6935033674800697#3668
+0.6181134163636822#3669
+0.5365474803121163#3670
+0.44962053919628586#3671
+0.35820113827759426#3672
+0.26320270999078516#3673
+0.1655744472289955#3674
+0.0662918193221285#3675
+-0.033653174530243454#3676
+-0.13326191698696957#3677
+-0.2315391504196944#3678
+-0.3275029211980919#3679
+-0.4201943910459491#3680
+-0.508687417436272#3681
+-0.5920978073012736#3682
+-0.6695921515972314#3683
+-0.7403961524521645#3684
+-0.8038023596942209#3685
+-0.8591772394599432#3686
+-0.9059675042552137#3687
+-0.943705641221003#3688
+-0.9720145833673183#3689
+-0.9906114771019258#3690
+-0.9993105084099446#3691
+-0.9980247594460628#3692
+-0.9867670769889152#3693
+-0.9656499440803186#3694
+-0.9348843561318997#3695
+-0.894777712728688#3696
+-0.845730746194075#3697
+-0.788233517604903#3698
+-0.7228605202631786#3699
+-0.6502649395489006#3700
+-0.5711721265076578#3701
+-0.4863723503827509#3702
+-0.396712902506141#3703
+-0.3030896304435386#3704
+-0.20643798698165444#3705
+-0.10772368339317456#3706
+-0.00793304036894502#3707
+0.09193686697233655#3708
+0.19088817152911786#3709
+0.28793218457521963#3710
+0.3820992744107705#3711
+0.4724485546016347#3712
+0.558077285005646#3713
+0.6381298916537022#3714
+0.7118065153620489#3715
+0.778371003660846#3716
+0.837158266186306#3717
+0.8875809200437595#3718
+0.9291351587433763#3719
+0.9614057860680744#3720
+0.9840703645768764#3721
+0.996902437293236#3722
+0.9997737903882905#3723
+0.9926557342510572#3724
+0.9756193901455429#3725
+0.9488349795905833#3726
+0.9125701235626947#3727
+0.8671871685157403#3728
+0.8131395659349391#3729
+0.7509673415995165#3730
+0.6812916998236274#3731
+0.6048088165881917#3732
+0.5222828835806185#3733
+0.43453847264407314#3734
+0.3424522969281879#3735
+0.24694445106107385#3736
+0.1489692178679391#3737
+0.04950553349254367#3738
+-0.0504527938091558#3739
+-0.14990701347259025#3740
+-0.2478634118100764#3741
+-0.34334324086950585#3742
+-0.43539249776035166#3743
+-0.523091456735199#3744
+-0.6055638587853923#3745
+-0.6819856669313974#3746
+-0.7515932997279102#3747
+-0.8136912607172517#3748
+-0.8676590876000732#3749
+-0.9129575516895527#3750
+-0.9491340457061896#3751
+-0.9758271060801286#3752
+-0.9927700245756657#3753
+-0.9997935131517774#3754
+-0.9968273954322683#3755
+-0.9839013078849232#3756
+-0.961144403703719#3757
+-0.9287840623528019#3758
+-0.8871436176660437#3759
+-0.8366391272022538#3760
+-0.7777752151355816#3761
+-0.7111400302175752#3762
+-0.6373993691892722#3763
+-0.5572900243602457#3764
+-0.47161242182339913#3765
+-0.38122262386203104#3766
+-0.28702377545847707#3767
+-0.18995708036798664#3768
+-0.09099239692192086#3769
+0.008881452476101726#3770
+0.10866656133680092#3771
+0.20736590983701175#3772
+0.3039933267121866#3773
+0.3975833427536857#3774
+0.48720083745796805#3775
+0.5719503824415534#3776
+0.6509851882654402#3777
+0.7235155652752691#3778
+0.7888168139193128#3779
+0.8462364657068425#3780
+0.8952008024576104#3781
+0.9352205887042604#3782
+0.9658959599713982#3783
+0.9869204180892522#3784
+0.9980838936220705#3785
+0.9992748448124834#3786
+0.9904813720698726#3787
+0.9717913368671467#3788
+0.943391483857947#3789
+0.9055655749857984#3790
+0.8586915542285684#3791
+0.8032377713071723#3792
+0.7397583020899774#3793
+0.6688874124498796#3794
+0.5913332208893615#3795
+0.5078706232544888#3796
+0.41933355023176294#3797
+0.326606634988362#3798
+0.23061637420995554#3799
+0.13232187085208025#3800
+0.032705251100445504#3801
+-0.06723814870926637#3802
+-0.1665097271630519#3803
+-0.2641175954638214#3804
+-0.3590864880563847#3805
+-0.45046750715849865#3806
+-0.5373476038338433#3807
+-0.61885870087518#3808
+-0.6941863663448576#3809
+-0.7625779511095188#3810
+-0.8233501090614465#3811
+-0.8758956248869896#3812
+-0.9196894811612573#3813
+-0.954294104148681#3814
+-0.9793637358951378#3815
+-0.9946478889271355#3816
+-0.9999938490398477#3817
+-0.9953482011669674#3818
+-0.9807573630863935#3819
+-0.9563671216291374#3820
+-0.9224211760254981#3821
+-0.8792587029429098#3822
+-0.8273109675447968#3823
+-0.7670970144316195#3824
+-0.6992184815187981#3825
+-0.624353588669538#3826
+-0.5432503611461462#3827
+-0.45671915558887405#3828
+-0.3656245632002365#3829
+-0.27087677103551244#3830
+-0.17342246771455624#3831
+-0.07423538442204156#3832
+0.025693434292662947#3833
+0.12536553270503523#3834
+0.22378502015495372#3835
+0.31996852165697554#3836
+0.4129550034581306#3837
+0.5018153753695055#3838
+0.5856617739282951#3839
+0.663656433636034#3840
+0.7350200576345289#3841
+0.7990396041824644#3842
+0.8550754111327816#3843
+0.902567587225408#3844
+0.9410416063356517#3845
+0.970113048782383#3846
+0.9894914423224154#3847
+0.9989831644531418#3848
+0.9984933770245784#3849
+0.988026973830809#3850
+0.9676885317128129#3851
+0.9376812656612382#3852
+0.8983049983593889#3853
+0.8499531644540819#3854
+0.7931088794867078#3855
+0.7283401127624386#3856
+0.6562940123886756#3857
+0.5776904391850793#3858
+0.4933147740722138#3859
+0.40401007080500034#3860
+0.31066863245827525#3861
+0.21422309582942212#3862
+0.11563711283978116#3863
+0.01589572204319201#3864
+-0.08400449355362567#3865
+-0.18306536401904885#3866
+-0.2802971058805568#3867
+-0.37472821171400944#3868
+-0.4654151571246921#3869
+-0.5514518281311794#3870
+-0.6319785747567164#3871
+-0.7061908003676237#3872
+-0.7733470009368971#3873
+-0.8327761739073366#3874
+-0.8838845226272941#3875
+-0.9261613893705334#3876
+-0.9591843576594301#3877
+-0.9826234729107834#3878
+-0.9962445392329431#3879
+-0.9999114594337439#3880
+-0.9935875948586621#3881
+-0.9773361314721403#3882
+-0.951319448524317#3883
+-0.9157974961112352#3884
+-0.8711251978394099#3885
+-0.8177489045464752#3886
+-0.7562019345111574#3887
+-0.6870992447133262#3888
+-0.6111312863871298#3889
+-0.5290571062604954#3890
+-0.44169676241113176#3891
+-0.34992313051729185#3892
+-0.25465318237253#3893
+-0.15683882380665107#3894
+-0.05745738355731774#3895
+0.042498151875634736#3896
+0.14202905982306696#3897
+0.24014086035331167#3898
+0.33585325278691963#3899
+0.42820991053700425#3900
+0.5162880364083785#3901
+0.5992075828820926#3902
+0.6761400452593388#3903
+0.7463167398065342#3904
+0.809036484189094#3905
+0.8636726034535386#3906
+0.909679191556477#3907
+0.9465965658773408#3908
+0.9740558602151771#3909
+0.991782710377798#3910
+0.9995999955380961#3911
+0.9974296079668007#3912
+0.9852932334590895#3913
+0.9633121346572913#3914
+0.9317059394346487#3915
+0.8907904464462075#3916
+0.8409744697730445#3917
+0.7827557541871054#3918
+0.7167160018499767#3919
+0.6435150601371714#3920
+0.56388432866127#3921
+0.47861945136875983#3922
+0.38857236672872686#3923
+0.29464279544528593#3924
+0.19776925074571347#3925
+0.0989196610665116#3926
+-9.183011675747517E-4#3927
+-0.10074708803994468#3928
+-0.19956924331117867#3929
+-0.2963973686720675#3930
+-0.3902639895011276#3931
+-0.48023122155121406#3932
+-0.5654001419788951#3933
+-0.6449197710843588#3934
+-0.7179955750192778#3935
+-0.7838974045063832#3936
+-0.8419667902496881#3937
+-0.891623522142032#3938
+-0.9323714465326797#3939
+-0.9638034236305925#3940
+-0.9856053955106381#3941
+-0.9975595240765649#3942
+-0.9995463676272517#3943
+-0.9915460742787029#3944
+-0.9736385803175122#3945
+-0.9460028115039091#3946
+-0.9089148953047087#3947
+-0.8627454019189386#3948
+-0.8079556416629041#3949
+-0.7450930557099968#3950
+-0.6747857462394504#3951
+-0.5977362006469884#3952
+-0.5147142725229772#3953
+-0.4265494895298316#3954
+-0.3341227650358171#3955
+-0.23835759631986517#3956
+-0.14021083729202993#3957
+-0.04066313792551283#3958
+0.059290854073709855#3959
+0.1586524314579784#3960
+0.25642880619063935#3961
+0.351643029055936#3962
+0.44334375101263535#3963
+0.5306147287591743#3964
+0.6125839795338587#3965
+0.6884324936783796#3966
+0.7574024179115897#3967
+0.8188046275489766#3968
+0.8720256120087151#3969
+0.9165336048066015#3970
+0.9518838967909858#3971
+0.9777232795296128#3972
+0.993793574451522#3973
+0.9999342124819873#3974
+0.9960838383956331#3975
+0.9822809238575657#3976
+0.9586633830272128#3977
+0.9254671945656303#3978
+0.8830240438147254#3979
+0.8317580087069611#3980
+0.7721813225188363#3981
+0.7048892558053088#3982
+0.6305541686531807#3983
+0.5499187926813633#3984
+0.4637888099120561#3985
+0.37302480266230326#3986
+0.27853365488995285#3987
+0.18125949090892593#3988
+0.08217424201115783#3989
+-0.017732064749593147#3990
+-0.11746119858080742#3991
+-0.21601669894331174#3992
+-0.31241383185560057#3993
+-0.40568942903026955#3994
+-0.49491151153316204#3995
+-0.579188601808808#3996
+-0.6576786310294751#3997
+-0.7295973527685441#3998
+-0.7942261789315666#3999
+-0.850919359650971#4000
+-0.8991104354052828#4001
+-0.9383178968954163#4002
+-0.9681499961264257#4003
+-0.9883086606239754#4004
+-0.9985924716759744#4005
+-0.9988986768417671#4006
+-0.9892242166205548#4007
+-0.9696657550209166#4008
+-0.9404187137259883#4009
+-0.9017753195046023#4010
+-0.8541216843780113#4011
+-0.7979339477162029#4012
+-0.7337735188107056#4013
+-0.6622814674585256#4014
+-0.5841721186046438#4015
+-0.5002259150432908#4016
+-0.41128161949152625#4017
+-0.3182279339494287#4018
+-0.2219946200834764#4019
+-0.12354320935531402#4020
+-0.023857395717228277#4021
+0.07606679313265759#4022
+0.1752309477299004#4023
+0.2726442526210754#4024
+0.36733338626426704#4025
+0.4583522461361782#4026
+0.5447914018758033#4027
+0.6257871820119776#4028
+0.7005303034832253#4029
+0.7682739577265967#4030
+0.8283412725419662#4031
+0.8801320751753131#4032
+0.9231288890464878#4033
+0.9569021042041466#4034
+0.9811142698463743#4035
+0.9955234660175518#4036
+0.9999857207925835#4037
+0.9944564487967827#4038
+0.978990896688197#4039
+0.9537435911512637#4040
+0.9189667949172583#4041
+0.8750079862384708#4042
+0.8223063870003694#4043
+0.761388574161709#4044
+0.6928632183716221#4045
+0.6174150023336926#4046
+0.5357977796827074#4047
+0.4488270427283285#4048
+0.35737177432550127#4049
+0.26234576528501463#4050
+0.1646984840777792#4051
+0.06540559005971848#4052
+-0.034540814994005645#4053
+-0.13414209964198492#4054
+-0.2324030807718237#4055
+-0.3283419671408341#4056
+-0.421000169109596#4057
+-0.5094518765527665#4058
+-0.5928133092478203#4059
+-0.6702515473148938#4060
+-0.7409928534768989#4061
+-0.8043304039866315#4062
+-0.8596313509760083#4063
+-0.9063431456627741#4064
+-0.9439990592352849#4065
+-0.9722228462525142#4066
+-0.9907325039641293#4067
+-0.9993430899887548#4068
+-0.9979685701971142#4069
+-0.9866226783366094#4070
+-0.9654187788082579#4071
+-0.9345687339670693#4072
+-0.8943807872634282#4073
+-0.8452564833764284#4074
+-0.7876866561121733#4075
+-0.7222465241546325#4076
+-0.6495899436706947#4077
+-0.5704428751954832#4078
+-0.48559613007466035#4079
+-0.3958974689388687#4080
+-0.30224313115974216#4081
+-0.20556887992236214#4082
+-0.10684065238883424#4083
+-0.0070449083734608125#4084
+0.09282122603764317#4085
+0.19175992144079657#4086
+0.28878261509631514#4087
+0.382919888320631#4088
+0.47323115259733173#4089
+0.5588140476266991#4090
+0.6388134574115429#4091
+0.712430054293582#4092
+0.7789282855711821#4093
+0.8376437228988098#4094
+0.8879897010354305#4095
+0.9294631796096705#4096
+0.9616497693329252#4097
+0.9842278724401516#4098
+0.996971895988431#4099
+0.9997545059070827#4100
+0.9925478992776083#4101
+0.9754240821312622#4102
+0.9485541499885891#4103
+0.9122065783295403#4104
+0.8667445400752233#4105
+0.8126222768841236#4106
+0.7503805605196052#4107
+0.6806412896372068#4108
+0.6041012759788476#4109
+0.5215252820602374#4110
+0.433738379916617#4111
+0.34161770725571405#4112
+0.24608370338771093#4113
+0.148090912499914#4114
+0.04861844616676457#4115
+-0.0513397996093618#4116
+-0.15078507507847264#4117
+-0.24872375592031773#4118
+-0.34417727121014857#4119
+-0.43619188097592587#4120
+-0.5238482056528556#4121
+-0.606270412220094#4122
+-0.6826349652347802#4123
+-0.7521788553259561#4124
+-0.8142072229319841#4125
+-0.8681003011075967#4126
+-0.9133196080303462#4127
+-0.9494133273329757#4128
+-0.9760208225032105#4129
+-0.9928762402445782#4130
+-0.9998111667946672#4131
+-0.9967563106597709#4132
+-0.983742194952588#4133
+-0.9608988524153701#4134
+-0.928454526175744#4135
+-0.8867333892168279#4136
+-0.836152305347941#4137
+-0.7772166640392184#4138
+-0.710515330737084#4139
+-0.6367147631153636#4140
+-0.5565523520505097#4141
+-0.47082905385571255#4142
+-0.38040138739018#4143
+-0.28617287600582364#4144
+-0.18908501984059176#4145
+-0.09010788866030936#4146
+0.009769570757759355#4147
+0.10954941585420723#4148
+0.20823467939966173#4149
+0.30483933086178727#4150
+0.39839812849642603#4151
+0.48797626372403896#4152
+0.572678701428026#4153
+0.651659122849752#4154
+0.7241283817258269#4155
+0.7893623891767129#4156
+0.8467093485634559#4157
+0.8955962680242483#4158
+0.9355346856197043#4159
+0.9661255498830958#4160
+0.987063207010698#4161
+0.9981384548535612#4162
+0.9992406331962297#4163
+0.9903587294370351#4164
+0.9715814886223723#4165
+0.943096526735531#4166
+0.905188456099808#4167
+0.8582360416262537#4168
+0.8027084163198831#4169
+0.7391603938577652#4170
+0.6682269250741585#4171
+0.5906167537416616#4172
+0.5071053350377174#4173
+0.41852708745281125#4174
+0.32576705555673624#4175
+0.22975206692580843#4176
+0.13144147158809297#4177
+0.03181755651504257#4178
+-0.06812426906522044#4179
+-0.16738541946787286#4180
+-0.26497411008946486#4181
+-0.35991526699183735#4182
+-0.45126026951859527#4183
+-0.5380964285991342#4184
+-0.619556106036139#4185
+-0.694825383659648#4186
+-0.7631521957283619#4187
+-0.8238538433219311#4188
+-0.8763238156428974#4189
+-0.9200378500720962#4190
+-0.9545591704274494#4191
+-0.9795428510871975#4192
+-0.9947392633726951#4193
+-0.9999965697556514#4194
+-0.9952622409685223#4195
+-0.9805835808595879#4196
+-0.9561072537485367#4197
+-0.9220778190050644#4198
+-0.8788352874924923#4199
+-0.8268117242916139#4200
+-0.7665269316492288#4201
+-0.6985832552859171#4202
+-0.6236595659567079#4203
+-0.5425044763989001#4204
+-0.4559288614410496#4205
+-0.3647977560097223#4206
+-0.27002171198645003#4207
+-0.17254770027431887#4208
+-0.07334964897773245#4209
+0.026581287765269457#4210
+0.1262466330675262#4211
+0.2246505637437602#4212
+0.32080986024666885#4213
+0.413763730671632#4214
+0.5025834106718274#4215
+0.5863814433645755#4216
+0.6643205465071567#4217
+0.7356219783442121#4218
+0.7995733185379454#4219
+0.8555355864366431#4220
+0.9029496255581272#4221
+0.9413416904964934#4222
+0.9703281804296068#4223
+0.9896194719317152#4224
+0.9990228127949825#4225
+0.9984442479458342#4226
+0.9878895582129948#4227
+0.9674642025673584#4228
+0.9373722644108115#4229
+0.8979144124423419#4230
+0.8494848964757872#4231
+0.7925676082260158#4232
+0.7277312464228656#4233
+0.6556236345614223#4234
+0.576965248063798#4235
+0.49254201552687205#4236
+0.4031974659835432#4237
+0.3098243006394673#4238
+0.21335547329769788#4239
+0.11475486859267976#4240
+0.015007671173599317#4241
+-0.08488947793497129#4242
+-0.1839384394407459#4243
+-0.28114954886159205#4244
+-0.3755515049258966#4245
+-0.46620107449380255#4246
+-0.5521925170309506#4247
+-0.6326666344685011#4248
+-0.7068193560262241#4249
+-0.7739097722219453#4250
+-0.83326753779418#4251
+-0.8842995695703985#4252
+-0.9264959723580396#4253
+-0.9594351336487255#4254
+-0.9827879362310783#4255
+-0.9963210466211054#4256
+-0.9998992464532412#4257
+-0.9934867835375585#4258
+-0.9771477290838324#4259
+-0.9510453375231913#4260
+-0.9154404153238058#4261
+-0.8706887150988698#4262
+-0.8172373810440856#4263
+-0.7556204812206672#4264
+-0.686453671323811#4265
+-0.6104280432544994#4266
+-0.5283032199576698#4267
+-0.4408997655208472#4268
+-0.34909098636902386#4269
+-0.2537942054755377#4270
+-0.15596159677414934#4271
+-0.05657067135184257#4272
+0.043385489518834315#4273
+0.14290815691957492#4274
+0.24100293325553057#4275
+0.33668968794737386#4276
+0.42901235057205933#4277
+0.5170484636024555#4278
+0.5999183992980321#4279
+0.6767941486544775#4280
+0.7469075945959657#4281
+0.8095581867470729#4282
+0.8641199411005575#4283
+0.910047694642637#4284
+0.9468825524416159#4285
+0.9742564727743516#4286
+0.9918959444774944#4287
+0.9996247197806206#4288
+0.9973655753156946#4289
+0.9851410837074361#4290
+0.9630733880351154#4291
+0.9313829814192799#4292
+0.8903865039273795#4293
+0.8404935788108798#4294
+0.7822027196851367#4295
+0.7160963495461387#4296
+0.6428349813924542#4297
+0.5631506185976866#4298
+0.4778394409747333#4299
+0.38775384961027715#4300
+0.2937939499548949#4301
+0.19689855826693#4302
+0.09803582127077107#4303
+-0.0018064572451918896#4304
+-0.10163068623749626#4305
+-0.20043945500755345#4306
+-0.2972454989996491#4307
+-0.3910815642220373#4308
+-0.48101007172909493#4309
+-0.5661324856002233#4310
+-0.6455982908137508#4311
+-0.7186134913118861#4312
+-0.7844485433468682#4313
+-0.8424456448409379#4314
+-0.8920253079272591#4315
+-0.9326921490011307#4316
+-0.9640398384292128#4317
+-0.9857551604609085#4318
+-0.9976211427766078#4319
+-0.9995192244033847#4320
+-0.9914304403370466#4321
+-0.973435611034188#4322
+-0.9457145348809033#4323
+-0.9085441917067469#4324
+-0.8622959752938333#4325
+-0.8074319825329326#4326
+-0.7445003963040872#4327
+-0.6741300082144792#4328
+-0.5970239359205429#4329
+-0.5139525978087609#4330
+-0.42574601522981265#4331
+-0.33328551919960797#4332
+-0.23749494443110458#4333
+-0.1393313986832356#4334
+-0.0397756996565601#4335
+0.06017742501298571#4336
+0.15952927674381348#4337
+0.2572871646747842#4338
+0.35247432430415254#4339
+0.4441396769975931#4340
+0.5313673328515297#4341
+0.6132857419622988#4342
+0.6890764026646912#4343
+0.7579820397300296#4344
+0.8193141708099325#4345
+0.872459985524356#4346
+0.9168884684603441#4347
+0.9521557049025041#4348
+0.9779093162821043#4349
+0.9938919810272516#4350
+0.9999440056349789#4351
+0.9960049202759392#4352
+0.9821140829889516#4353
+0.9584102864284875#4354
+0.9251303710943455#4355
+0.8826068588996672#4356
+0.8312646307218977#4357
+0.7716166811335055#4358
+0.7042589927297871#4359
+0.6298645812677813#4360
+0.5491767711152941#4361
+0.4630017681995254#4362
+0.3722006046639412#4363
+0.27768053571971557#4364
+0.18038597465155876#4365
+0.08128905655235824#4366
+-0.018620074929324236#4367
+-0.11834316077729126#4368
+-0.21688380088181902#4369
+-0.3132574097401875#4370
+-0.4065010541095631#4371
+-0.49568307431765746#4372
+-0.5799123930982074#4373
+-0.6583474189404683#4374
+-0.7302044549933965#4375
+-0.7947655295055287#4376
+-0.8513855695613934#4377
+-0.8994988464368491#4378
+-0.9386246281734907#4379
+-0.9683719828934694#4380
+-0.9884436848615913#4381
+-0.9986391842666134#4382
+-0.9988566110486644#4383
+-0.9890937927512102#4384
+-0.9694482762275201#4385
+-0.9401163529847545#4386
+-0.9013910979041106#4387
+-0.8536594409334871#4388
+-0.7973983010113463#4389
+-0.7331698208503304#4390
+-0.6616157501930958#4391
+-0.5834510336610189#4392
+-0.4994566672638683#4393
+-0.4104718949458387#4394
+-0.31738582313747726#4395
+-0.2211285370981292#4396
+-0.12266180781147178#4397
+-0.022969482287764426#4398
+0.07695234671026101#4399
+0.17610529329702104#4400
+0.27349865400582685#4401
+0.3681593065704404#4402
+0.45914143304108707#4403
+0.5455359700847644#4404
+0.6264796920455684#4405
+0.7011638360101038#4406
+0.768842182699172#4407
+0.8288385124441429#4408
+0.880553361750354#4409
+0.9234700129381941#4410
+0.9571596570153528#4411
+0.9812856781945266#4412
+0.9956070172470954#4413
+0.9999805800872513#4414
+0.9943626675208029#4415
+0.9788094118730793#4416
+0.9534762161332899#4417
+0.9186162012192256#4418
+0.874577676876719#4419
+0.8218006614837998#4420
+0.7608124855325126#4421
+0.6922225227169522#4422
+0.6167161012727448#4423
+0.5350476564038567#4424
+0.44803319221541943#4425
+0.35654212847044664#4426
+0.2614886136349538#4427
+0.16382239100866292#4428
+0.06451930920389547#4429
+-0.03542842821118951#4430
+-0.13502217648266945#4431
+-0.2332668277991315#4432
+-0.3291807540799851#4433
+-0.4218056150787603#4434
+-0.5102159338020652#4435
+-0.5935283435697821#4436
+-0.6709104143229327#4437
+-0.7415889699896632#4438
+-0.8048578138049752#4439
+-0.8600847843953653#4440
+-0.9067180721263033#4441
+-0.944291732601697#4442
+-0.9724303422262768#4443
+-0.9908527493140615#4444
+-0.9993748832630681#4445
+-0.997911593727921#4446
+-0.9864775014139562#4447
+-0.9651868519919665#4448
+-0.9342523745932234#4449
+-0.8939831562903168#4450
+-0.8447815538012954#4451
+-0.7871391732743425#4452
+-0.721631958321646#4453
+-0.6489144353812071#4454
+-0.5697131739050296#4455
+-0.4848195267173279#4456
+-0.39508172307869294#4457
+-0.30139639345970826#4458
+-0.20469961070567458#4459
+-0.10595753710616392#4460
+-0.006156770820793085#4461
+0.09370551188346128#4462
+0.1926315200878997#4463
+0.28963281781913364#4464
+0.3837402001745981#4465
+0.47401337729756166#4466
+0.5595503694425562#4467
+0.6394965192588389#4468
+0.7130530312441288#4469
+0.7794849530452186#4470
+0.8381285188589453#4471
+0.8883977815606836#4472
+0.9297904672943264#4473
+0.9618929940266256#4474
+0.9843846039221565#4475
+0.9970405682495806#4476
+0.9997344327968439#4477
+0.9924392813598633#4478
+0.9752280046803405#4479
+0.948272572145566#4480
+0.911842313527146#4481
+0.8663012279269533#4482
+0.8121043468184239#4483
+0.7497931875224875#4484
+0.6799903425454984#4485
+0.6033932588407144#4486
+0.5207672691488844#4487
+0.4329379450464886#4488
+0.340782848107444#4489
+0.245222761597941#4490
+0.14721249031441808#4491
+0.04773132048965235#4492
+-0.052226764911569364#4493
+-0.15166301774166763#4494
+-0.2495839038316188#4495
+-0.345011030055953#4496
+-0.4369909201134505#4497
+-0.5246045413471654#4498
+-0.6069764874149429#4499
+-0.6832837250602186#4500
+-0.7527638175882598#4501
+-0.8147225428815908#4502
+-0.8685408298379123#4503
+-0.9136809439239166#4504
+-0.9496918600409943#4505
+-0.9762137690189293#4506
+-0.9929816727101918#4507
+-0.9998280317638305#4508
+-0.9966844396232869#4509
+-0.9835823060220958#4510
+-0.9606525431482109#4511
+-0.9281242576126963#4512
+-0.8863224612922014#4513
+-0.835664823917724#4514
+-0.7766574998567214#4515
+-0.7098900707859835#4516
+-0.6360296547864077#4517
+-0.5558142407196545#4518
+-0.47004531448738884#4519
+-0.37957985084908624#4520
+-0.2853217508135146#4521
+-0.18821281015864433#4522
+-0.08922330931955144#4523
+0.010657681332957976#4524
+0.11043218395654948#4525
+0.20910328470207334#4526
+0.30568509454720927#4527
+0.39921259997368597#4528
+0.4887513050633646#4529
+0.5734065686725494#4530
+0.6523325433905668#4531
+0.7247406269674924#4532
+0.7899073417671557#4533
+0.84718156351653#4534
+0.8959910271242357#4535
+0.9358480445641681#4536
+0.9663543776930457#4537
+0.9872052173142973#4538
+0.9981922287307987#4539
+0.9992056333562993#4540
+0.990235305586768#4541
+0.9713708739720819#4542
+0.942800825677183#4543
+0.9048106231806318#4544
+0.8577798520278825#4545
+0.8021784281379878#4546
+0.7385619025590685#4547
+0.6675659105858819#4548
+0.5898998207020697#4549
+0.5063396468047552#4550
+0.41772029453019976#4551
+0.32492721915266787#4552
+0.2288875784080196#4553
+0.13056096864009153#4554
+0.03092983683122936#4555
+-0.06901033568320586#4556
+-0.16826097973527826#4557
+-0.2658304156975201#4558
+-0.36074376201796365#4559
+-0.45205267591435566#4560
+-0.538844828901757#4561
+-0.6202530224771886#4562
+-0.6954638528804155#4563
+-0.7637258383554432#4564
+-0.8243569277078173#4565
+-0.8767513151347024#4566
+-0.9203854932362104#4567
+-0.9548234837282926#4568
+-0.9797211935936381#4569
+-0.9948298531453608#4570
+-0.9999985016514786#4571
+-0.9951754956846467#4572
+-0.9804090251262118#4573
+-0.9558466316688474#4574
+-0.9217337346287321#4575
+-0.8784111787968661#4576
+-0.8263118288305887#4577
+-0.7659562442130079#4578
+-0.6979474779947189#4579
+-0.622965051287066#4580
+-0.5417581637118176#4581
+-0.45513820764619767#4582
+-0.36397066105846365#4583
+-0.2691664399381365#4584
+-0.17167279672454178#4585
+-0.07246385567355651#4586
+0.02746912026995325#4587
+0.12712763384380946#4588
+0.2255159301231064#4589
+0.32165094577426767#4590
+0.41457213149891764#4591
+0.5033510495249554#4592
+0.5871006502498729#4593
+0.6649841353471638#4594
+0.736223318778593#4595
+0.8001064021718566#4596
+0.8559950868746282#4597
+0.9033309516237009#4598
+0.941641032105658#4599
+0.9705425466599525#4600
+0.9897467209067285#4601
+0.9990616730849682#4602
+0.9983943312716201#4603
+0.9877513633254895#4604
+0.9672391102641967#4605
+0.9370625237398807#4606
+0.8975231182300396#4607
+0.849015958404538#4608
+0.7920257117700172#4609
+0.7271218060323789#4610
+0.6549527395633749#4611
+0.5762396018192422#4612
+0.49176886845321643#4613
+0.4023845431107794#4614
+0.30897972442422345#4615
+0.21248768246633692#4616
+0.11387253382433511#4617
+0.014119608465615191#4618
+-0.0857743953535712#4619
+-0.18481136976762977#4620
+-0.282001770065486#4621
+-0.37637450189423827#4622
+-0.46698662411293085#4623
+-0.5529327703487394#4624
+-0.6333541951184943#4625
+-0.7074473541296843#4626
+-0.7744719330294112#4627
+-0.833758244380689#4628
+-0.8847139189579444#4629
+-0.9268298245045077#4630
+-0.9596851528138249#4631
+-0.9829516243059571#4632
+-0.9963967680886273#4633
+-0.9998862447295328#4634
+-0.9933851885315454#4635
+-0.9769585558992319#4636
+-0.9507704763159315#4637
+-0.9150826124162126#4638
+-0.8702515455393219#4639
+-0.8167252128863131#4640
+-0.7550384318796021#4641
+-0.6858075564440695#4642
+-0.6097243186023826#4643
+-0.5275489169172812#4644
+-0.44010242083882695#4645
+-0.3482585668498676#4646
+-0.25293502837991955#4647
+-0.1550842467156025#4648
+-0.05568391452213869#4649
+0.044272792938575674#4650
+0.14378714128688722#4651
+0.2418648160491692#4652
+0.33752585751936537#4653
+0.4298144521924413#4654
+0.5178084829369766#4655
+0.6006287424847309#4656
+0.6774477181790405#4657
+0.7474978602077449#4658
+0.8100792507071913#4659
+0.8645665971101664#4660
+0.9104154798625334#4661
+0.947167792083456#4662
+0.9744563168179221#4663
+0.9920083961471714#4664
+0.9996486554964923#4665
+0.9973007559200001#4666
+0.9849881568541509#4667
+0.9628338817188064#4668
+0.9310592887078893#4669
+0.8899818590514812#4670
+0.8400120248483158#4671
+0.7816490681639204#4672
+0.7154761323692573#4673
+0.6421543955649226#4674
+0.5624164643081216#4675
+0.4770590536501172#4676
+0.3869350266227958#4677
+0.29294487271317216#4678
+0.19602771047009768#4679
+0.09715190414215104#4680
+-0.002694611897834578#4681
+-0.10251420426645728#4682
+-0.2013095085927397#4683
+-0.2980933948532388#4684
+-0.3918988304489386#4685
+-0.4817885424753208#4686
+-0.5668643826434057#4687
+-0.6462763012805672#4688
+-0.7192308407458727#4689
+-0.784999063396549#4690
+-0.8429238348919543#4691
+-0.89242639006269#4692
+-0.933012115740859#4693
+-0.9642754927713421#4694
+-0.985904147825149#4695
+-0.9976819745304649#4696
+-0.9994912927360821#4697
+-0.991314024332571#4698
+-0.9732318738827741#4699
+-0.9454255122568215#4700
+-0.9081727714285188#4701
+-0.8618458684701038#4702
+-0.8069076864822988#4703
+-0.7439071496193778#4704
+-0.6734737384204668#4705
+-0.596311200248075#4706
+-0.5131905176770778#4707
+-0.42494220509167996#4708
+-0.3324480104602216#4709
+-0.2366321052009449#4710
+-0.13845185016667366#4711
+-0.03888823001163328#4712
+0.06106394848294375#4713
+0.16040599618933662#4714
+0.25814532020497766#4715
+0.35330534151262716#4716
+0.44493525263509953#4717
+0.5321195177892803#4718
+0.6139870206170349#4719
+0.6897197680919065#4720
+0.7585610636350439#4721
+0.8198230677772865#4722
+0.872893670823771#4723
+0.9172426088516656#4724
+0.9524267619320054#4725
+0.9780945816375459#4726
+0.9939896035984427#4727
+0.9999530100094578#4728
+0.9959252164849727#4729
+0.9819464674064724#4730
+0.9581564338139892#4731
+0.9247928178592397#4732
+0.882188977764299#4733
+0.8307705970164385#4734
+0.7710514310794344#4735
+0.7036281741187975#4736
+0.6291744970309135#4737
+0.5484343163461312#4738
+0.4622143612606979#4739
+0.37137611306529994#4740
+0.2768271975087733#4741
+0.17951231610164317#4742
+0.080403806970907#4743
+-0.019508070421117876#4744
+-0.1192250296220056#4745
+-0.21775073173746473#4746
+-0.31410074052022424#4747
+-0.40731235853160475#4748
+-0.49645424609610067#4749
+-0.5806357269395575#4750
+-0.6590156875320847#4751
+-0.7308109812164121#4752
+-0.7953042531504141#4753
+-0.8518511078795672#4754
+-0.8998865479233226#4755
+-0.938930619043168#4756
+-0.968593205786728#4757
+-0.9885779293924083#4758
+-0.9986851091080121#4759
+-0.9988137573348106#4760
+-0.9889625886622468#4761
+-0.9692300327113339#4762
+-0.9398132506584176#4763
+-0.9010061652658754#4764
+-0.8531965241030328#4765
+-0.7968620253006231#4766
+-0.7325655445489706#4767
+-0.6609495110301554#4768
+-0.5827294884779846#4769
+-0.49868702550169774#4770
+-0.4096618466106099#4771
+-0.3165434619643894#4772
+-0.22026227968157627#4773
+-0.12178030950921329#4774
+-0.022081550739451946#4775
+0.07783783958610788#4776
+0.17697949994829187#4777
+0.27435283964863644#4778
+0.36898493646420194#4779
+0.4599302577648192#4780
+0.5462801079625782#4781
+0.6271717078977682#4782
+0.7017968154430443#4783
+0.7694098011915946#4784
+0.8293350985397009#4785
+0.8809739537249303#4786
+0.9238104083758077#4787
+0.957416454797311#4788
+0.981456312482278#4789
+0.9956897831192412#4790
+0.9999746505745556#4791
+0.9942681018689966#4792
+0.978627154950896#4793
+0.9532080889916499#4794
+0.918264882895897#4795
+0.8741466776282583#4796
+0.8212942877122281#4797
+0.7602357967571705#4798
+0.691581281021455#4799
+0.6160167137321476#4800
+0.5342971110672784#4801
+0.44723898828376585#4802
+0.3557122013668739#4803
+0.2606312557167434#4804
+0.16294616871272874#4805
+0.0636329774537779#4806
+-0.036316013481625595#4807
+-0.13590214681479854#4808
+-0.23413039082027445#4809
+-0.33001928135389064#4810
+-0.4226107283180879#4811
+-0.5109795885814625#4812
+-0.5942429097031241#4813
+-0.6715687521016191#4814
+-0.7421845015202269#4815
+-0.8053845887332195#4816
+-0.8605375393603357#4817
+-0.9070922833500508#4818
+-0.9445836610893715#4819
+-0.9726370711249284#4820
+-0.9909722130568702#4821
+-0.9994058882078054#4822
+-0.9978538300834279#4823
+-0.9863315463354743#4824
+-0.9649541638143936#4825
+-0.9339352782599134#4826
+-0.893584820123014#4827
+-0.8443059578433111#4828
+-0.7865910695232777#4829
+-0.7210168232490024#4830
+-0.6482384152132938#4831
+-0.5689830232119021#4832
+-0.484042540923356#4833
+-0.3942656655690927#4834
+-0.30054941801136287#4835
+-0.203830180017291#4836
+-0.10507433824178496#4837
+-0.005268628411524885#4838
+0.09458972381224616#4839
+0.19350296678289045#4840
+0.29048279207301586#4841
+0.38456020932559115#4842
+0.4747952280852878#4843
+0.56028624987239#4844
+0.6401790766567751#4845
+0.7136754457222707#4846
+0.7800410056438436#4847
+0.8386126536842945#4848
+0.8888051612976158#4849
+0.9301170215391718#4850
+0.9621354599573143#4851
+0.9845405588992577#4852
+0.997108454022515#4853
+0.9997135710734083#4854
+0.9923298805835022#4855
+0.9750311579474484#4856
+0.947990246283629#4857
+0.9114773294428521#4858
+0.865857232420625#4859
+0.811585776146395#4860
+0.7492052230714963#4861
+0.6793388590619841#4862
+0.6026847657322923#4863
+0.5200088454444972#4864
+0.4321371686650891#4865
+0.33994772014193364#4866
+0.24436162637089454#4867
+0.1463339520043707#4868
+0.04684415716099188#4869
+-0.053113689016120146#4870
+-0.15254084076963417#4871
+-0.2504438548654753#4872
+-0.34584451674923133#4873
+-0.4377896145426254#4874
+-0.5253604632215139#4875
+-0.607682083812971#4876
+-0.6839319458959563#4877
+-0.7533481860533897#4878
+-0.815237220159576#4879
+-0.8689806734435207#4880
+-0.9140415590852341#4881
+-0.9499696436105324#4882
+-0.9764059454750843#4883
+-0.9930863218893389#4884
+-0.999844108045964#4885
+-0.9966117823795099#4886
+-0.9834216412195708#4887
+-0.960405476096536#4888
+-0.9277932569241824#4889
+-0.8859108342163137#4890
+-0.8351766832961389#4891
+-0.7760977230291721#4892
+-0.7092642508574933#4893
+-0.6353440447428335#4894
+-0.555075690949919#4895
+-0.4692612043366593#4896
+-0.37875801488679633#4897
+-0.28447040055293665#4898
+-0.18734045201016314#4899
+-0.08833865959742333#4900
+0.011545783501135819#4901
+0.11131486494748018#4902
+0.20997172505907102#4903
+0.3065306171012951#4904
+0.400026756542992#4905
+0.4895259608645748#4906
+0.5741339836009652#4907
+0.6530054493566748#4908
+0.7253523005173126#4909
+0.7904516712607705#4910
+0.8476531101935705#4911
+0.8963850794461777#4912
+0.9361606652904673#4913
+0.9665824432207433#4914
+0.9873464488880291#4915
+0.9982452152113649#4916
+0.9991698453203011#4917
+0.990111100616431#4918
+0.9711594930824132#4919
+0.942504380916159#4920
+0.9044320765263129#4921
+0.8573229857933078#4922
+0.8016478071795532#4923
+0.7379628286659907#4924
+0.6669043695064731#4925
+0.589182422336119#4926
+0.5055735591595948#4927
+0.4169131721003451#4928
+0.3240871264386389#4929
+0.2280229093385172#4930
+0.12968036270263658#4931
+0.030042092749259296#4932
+-0.06989634786427318#4933
+-0.16913640727460627#4934
+-0.2666865116125137#4935
+-0.36157197248122797#4936
+-0.4528447257207117#4937
+-0.5395928041513566#4938
+-0.6209494496485853#4939
+-0.696101773503521#4940
+-0.76429887853826#4941
+-0.8248593618222606#4942
+-0.8771781230251833#4943
+-0.9207324103793711#4944
+-0.9550870438427141#4945
+-0.9798987632737787#4946
+-0.9949196581736731#4947
+-0.9999996447258055#4948
+-0.9950879653837672#4949
+-0.9802336960239586#4950
+-0.9555852555956543#4951
+-0.9213889231679229#4952
+-0.8779863771905777#4953
+-0.8258112815560504#4954
+-0.7653849525731279#4955
+-0.6973111501467191#4956
+-0.6222700452084615#4957
+-0.5410114236736072#4958
+-0.45434719482800395#4959
+-0.3631432789988919#4960
+-0.26831095556522977#4961
+-0.17079775775536865#4962
+-0.07157800520824754#4963
+0.028356931106371913#4964
+0.12800853433893156#4965
+0.2263811186103717#4966
+0.32249177757630465#4967
+0.4153802053023024#4968
+0.5041182913233582#4969
+0.5878193940168606#4970
+0.6656471996326018#4971
+0.7368240784633209#4972
+0.8006388546636893#4973
+0.856453912084273#4974
+0.9037115651213302#4975
+0.9419396309270177#4976
+0.9707561473043234#4977
+0.9898731891470789#4978
+0.9990997452924452#4979
+0.9983436270413116#4980
+0.9876123892773043#4981
+0.9670132549808855#4982
+0.9367520438927767#4983
+0.8971311160311438#4984
+0.8485463506102431#4985
+0.7914831905461722#4986
+0.7265117920717187#4987
+0.6542813279237506#4988
+0.5755135010238178#4989
+0.49099533346112295#4990
+0.40157130282796105#4991
+0.3081349044787646#4992
+0.2116197240198723#4993
+0.1129901092307529#4994
+0.013231534619763643#4995
+-0.08665924511138251#4996
+-0.1856841543111132#4997
+-0.2828537688199873#4998
+-0.3771972019698358#4999
+-0.46777180536241775#5000
+-0.5536725875006172#5001
+-0.6340412561643325#5002
+-0.7080747941826249#5003
+-0.7750334829158495#5004
+-0.8342482932797833#5005
+-0.8851275704630837#5006
+-0.9271629455465875#5007
+-0.9599344149575082#5008
+-0.9831145370062989#5009
+-0.9964717035757779#5010
+-0.9998724542728749#5011
+-0.9932828099207633#5012
+-0.9767686120675627#5013
+-0.9504948651193542#5014
+-0.9147240876706985#5015
+-0.8698136895056156#5016
+-0.8162124004771674#5017
+-0.754455786947096#5018
+-0.6851609005837718#5019
+-0.6090201129858933#5020
+-0.5267941977343409#5021
+-0.4393047289940346#5022
+-0.34742587261645447#5023
+-0.25207565176341384#5024
+-0.1542067743230842#5025
+-0.05479711376769998#5026
+0.04516006143493376#5027
+0.14466601223164102#5028
+0.24272650805435486#5029
+0.3383617608433046#5030
+0.43061621476543416#5031
+0.5185680938124212#5032
+0.6013386118818538#5033
+0.6781007533174772#5034
+0.748087536176257#5035
+0.8105996756584224#5036
+0.8650125711300333#5037
+0.910782546926049#5038
+0.9474522845778579#5039
+0.9746553921882468#5040
+0.9921200652981245#5041
+0.9996718026668301#5042
+0.9972351498308482#5043
+0.9848344530198655#5044
+0.9625936158972921#5045
+0.9307348615558133#5046
+0.8895765121377056#5047
+0.8395298082652133#5048
+0.7810948000601897#5049
+0.7148553508085741#5050
+0.6414733031914381#5051
+0.5616818663716927#5052
+0.4762782900104988#5053
+0.38611589841218874#5054
+0.2920955643898892#5055
+0.19515670804216095#5056
+0.0962679103779054#5057
+-0.003582764424906281#5058
+-0.10339764142988875#5059
+-0.20217940338041937#5060
+-0.2989410555639972#5061
+-0.3927157875371532#5062
+-0.48256663317581633#5063
+-0.5675958325311052#5064
+-0.6469538019499782#5065
+-0.7198476228342582#5066
+-0.785548964221163#5067
+-0.8434013600255303#5068
+-0.8928267682319421#5069
+-0.9333313464994675#5070
+-0.9645103864710906#5071
+-0.9860523574858352#5072
+-0.9977420192901507#5073
+-0.9994625726473769#5074
+-0.9911968263571076#5075
+-0.9730273690239829#5076
+-0.9451357438596512#5077
+-0.9078006347630092#5078
+-0.8613950818028046#5079
+-0.8063827539245794#5080
+-0.7433133161238353#5081
+-0.6728169373750934#5082
+-0.5955979941918066#5083
+-0.5124280327290739#5084
+-0.4241380597494972#5085
+-0.33161023947830387#5086
+-0.23576907931001329#5087
+-0.13757219243615187#5088
+-0.03800072969078855#5089
+0.06195042378427414#5090
+0.16128258910297158#5091
+0.2590032721042872#5092
+0.3541360800258346#5093
+0.4457304772975865#5094
+0.5328712829790856#5095
+0.6146878149448826#5096
+0.6903625894525244#5097
+0.7591394891698853#5098
+0.8203313180496092#5099
+0.8733266675648592#5100
+0.9175960257012121#5101
+0.9526970676656734#5102
+0.9782790754497961#5103
+0.9940864420880884#5104
+0.9999612255983212#5105
+0.9958447270856055#5106
+0.9817780772423467#5107
+0.9579018253839627#5108
+0.9244545351265829#5109
+0.8817704007382551#5110
+0.8302759079802887#5111
+0.7704855728025053#5112
+0.7029968004699444#5113
+0.6284839164869312#5114
+0.5476914289595397#5115
+0.46142658971669825#5116
+0.37055132851675693#5117
+0.2759736409302586#5118
+0.17863851594834093#5119
+0.07951849396516575#5120
+-0.02039605052444625#5121
+-0.12010680441925582#5122
+-0.21861749082633866#5123
+-0.31494382353041833#5124
+-0.4081233416563674#5125
+-0.4972250262601245#5126
+-0.5813586027622296#5127
+-0.6596834362771361#5128
+-0.7314169309591104#5129
+-0.7958423494412308#5130
+-0.8523159742382354#5131
+-0.9002735395588507#5132
+-0.9392358692630565#5133
+-0.968813664631682#5134
+-0.9887113941105229#5135
+-0.9987302461639416#5136
+-0.9987701157340123#5137
+-0.9888306044571701#5138
+-0.9690110246445276#5139
+-0.9395094069860908#5140
+-0.9006205218935647#5141
+-0.8527329342518376#5142
+-0.796325121007094#5143
+-0.7319606903833317#5144
+-0.6602827504952915#5145
+-0.5820074836247582#5146
+-0.49791699036393944#5147
+-0.4088514751248763#5148
+-0.3157008510946928#5149
+-0.2193958485171965#5150
+-0.12089871514394081#5151
+-0.02119360177276821#5152
+0.07872327106164467#5153
+0.17785356699406288#5154
+0.27520680887564847#5155
+0.36981027529422345#5156
+0.4607187196850812#5157
+0.5470238149222044#5158
+0.6278632290226549#5159
+0.702429241282698#5160
+0.7699768127560778#5161
+0.8298310304368901#5162
+0.8813938507672423#5163
+0.9241500750907953#5164
+0.9576724973474368#5165
+0.9816261725750176#5166
+0.9957717635686961#5167
+0.9999679322591741#5168
+0.9941727519159652#5169
+0.978444126065427#5170
+0.9529392099378654#5171
+0.917912840224423#5172
+0.8737149888330982#5173
+0.8207872660851259#5174
+0.7596585082906251#5175
+0.6909394937909978#5176
+0.6153168402636389#5177
+0.533546144265068#5178
+0.44644443155990476#5179
+0.3548819936695015#5180
+0.2597736922067416#5181
+0.16206981788121674#5182
+0.06274659550858111#5183
+-0.03720357010510971#5184
+-0.13678200994417533#5185
+-0.23499376915399928#5186
+-0.33085754830104785#5187
+-0.4234155081924356#5188
+-0.5117428402885212#5189
+-0.5949570070841342#5190
+-0.6722265601315991#5191
+-0.7427794475987832#5192
+-0.8059107283557985#5193
+-0.8609896155137471#5194
+-0.9074657790388062#5195
+-0.9448748444680102#5196
+-0.9728430327853834#5197
+-0.9910908950983123#5198
+-0.9994361047985073#5199
+-0.9977952793092036#5200
+-0.9861848132163057#5201
+-0.9647207144591039#5202
+-0.9336174452172925#5203
+-0.893185779075762#5204
+-0.8438296958776669#5205
+-0.7860423452913707#5206
+-0.7204011194219737#5207
+-0.6475618837002585#5208
+-0.5682524236921068#5209
+-0.4832651733056984#5210
+-0.39344929705384485#5211
+-0.2997022054828736#5212
+-0.20296058854309376#5213
+-0.1041910564924412#5214
+-0.004380481846299932#5215
+0.0954738611264548#5216
+0.19437426083829612#5217
+0.2913325371874285#5218
+0.38537991512671593#5219
+0.47557670434371857#5220
+0.5610216883356741#5221
+0.6408611290668913#5222
+0.7142972972369935#5223
+0.7805964429283947#5224
+0.8390961269929299#5225
+0.8892118399248504#5226
+0.9304428420865926#5227
+0.9623771669337133#5228
+0.9846957372484245#5229
+0.9971755532536798#5230
+0.9996919207532333#5231
+0.9922196970348302#5232
+0.9748335420878756#5233
+0.9477071726255013#5234
+0.9111116263645896#5235
+0.8654125539065005#5236
+0.8110665652771305#5237
+0.7486166676304692#5238
+0.6786868397006105#5239
+0.6019757972125022#5240
+0.5192500115453864#5241
+0.4313360514041404#5242
+0.3391123240180043#5243
+0.2435002983859096#5244
+0.14545529826283898#5245
+0.04595695688065448#5246
+-0.054000571223331524#5247
+-0.15341854346986936#5248
+-0.25130360834348353#5249
+-0.346677730632457#5250
+-0.4385879636333711#5251
+-0.5261159706795642#5252
+-0.6083872008575425#5253
+-0.6845796272306204#5254
+-0.7539319602603454#5255
+-0.8157512543599176#5256
+-0.8694198315774354#5257
+-0.9144014532298141#5258
+-0.9502466778224503#5259
+-0.9765973517200701#5260
+-0.993190187699463#5261
+-0.9998593956283852#5262
+-0.996538338985758#5263
+-0.9832602006717591#5264
+-0.9601576514552531#5265
+-0.927461524371324#5266
+-0.8854985083138918#5267
+-0.8346878838682738#5268
+-0.7755373339981713#5269
+-0.7086378714453144#5270
+-0.6346579335255096#5271
+-0.5543367033239355#5272
+-0.46847672402209806#5273
+-0.3779358801516458#5274
+-0.28361882589570886#5275
+-0.18646794608333994#5276
+-0.08745394019181343#5277
+0.012433876561680912#5278
+0.11219745813066402#5279
+0.2108399997855538#5280
+0.3073758978570232#5281
+0.4008405975620669#5282
+0.4903002305165539#5283
+0.5748609456394255#5284
+0.6536778402172297#5285
+0.7259634018927463#5286
+0.7909953772281428#5287
+0.848123988222581#5288
+0.896778424679212#5289
+0.9364725475519793#5290
+0.9668097462862708#5291
+0.9874869016204777#5292
+0.9982974142534595#5293
+0.9991332691164677#5294
+0.989986114624008#5295
+0.9709473461201218#5296
+0.94220719268632#5297
+0.9040528164354815#5298
+0.856865443282945#5299
+0.8011165538631789#5300
+0.7373631726511333#5301
+0.6662423023578131#5302
+0.5884645592097554#5303
+0.5048070727065923#5304
+0.41610572079997543#5305
+0.32324677807738733#5306
+0.2271580603994272#5307
+0.12879965447042646#5308
+0.029154324969461867#5309
+-0.07078230490945918#5310
+-0.17001170139524382#5311
+-0.2675423971590831#5312
+-0.36239989772826614#5313
+-0.45363641831282586#5314
+-0.540340353757865#5315
+-0.6216453870009271#5316
+-0.6967391450257175#5317
+-0.7648713158247487#5318
+-0.8253611452688975#5319
+-0.877604238977637#5320
+-0.9210786012279#5321
+-0.9553498505627952#5322
+-0.9800755599875371#5323
+-0.9950086783867864#5324
+-0.9999999989777303#5325
+-0.9949996501349354#5326
+-0.9800575936911434#5327
+-0.9553231257351534#5328
+-0.9210433848946539#5329
+-0.8775608830087473#5330
+-0.825310082862874#5331
+-0.7648130571802731#5332
+-0.696674272243908#5333
+-0.6215745482691752#5334
+-0.5402642568733623#5335
+-0.45355582361048796#5336
+-0.36231561048371774#5337
+-0.2674552595426102#5338
+-0.16992258405710617#5339
+-0.07069209828064123#5340
+0.0292447195741433#5341
+0.1288893338579619#5342
+0.22724612852302042#5343
+0.3233323549894589#5344
+0.4161879514443078#5345
+0.5048851354617692#5346
+0.5885376740985312#5347
+0.6663097388403877#5348
+0.7374242569244644#5349
+0.8011706755933992#5350
+0.8569120617036162#5351
+0.9040914657507545#5352
+0.9422374867250122#5353
+0.9709689821942126#5354
+0.9899988765529969#5355
+0.9991370293873787#5356
+0.9982921352949088#5357
+0.9874726361780741#5358
+0.9667866368955992#5359
+0.9364408251144325#5360
+0.8967384061548997#5361
+0.84807607346337#5362
+0.7909400449824686#5363
+0.7259012050221171#5364
+0.6536094001722174#5365
+0.5747869462503366#5366
+0.4902214111608231#5367
+0.4007577457766425#5368
+0.307289841469558#5369
+0.21075159864302492#5370
+0.11210759550806611#5371
+0.012343450336634304#5372
+-0.087544026510359#5373
+-0.18655679238266815#5374
+-0.28370554445296553#5375
+-0.3780196045036721#5376
+-0.4685566176228442#5377
+-0.5544119679029521#5378
+-0.6347278170640023#5379
+-0.708701675690067#5380
+-0.775594421438261#5381
+-0.8347376841048699#5382
+-0.8855405237594921#5383
+-0.9274953352214845#5384
+-0.9601829198831353#5385
+-0.9832766742035843#5386
+-0.9965458530234417#5387
+-0.9998578750941465#5388
+-0.9931796477859774#5389
+-0.9765778977386692#5390
+-0.9502185041508856#5391
+-0.9143648413700989#5392
+-0.8693751473431697#5393
+-0.8156989442211995#5394
+-0.7538725468827897#5395
+-0.684513704253056#5396
+-0.6083154269605701#5397
+-0.5260390630042369#5398
+-0.43850669061575864#5399
+-0.34659290432568596#5400
+-0.2512160763039714#5401
+-0.15332918028882067#5402
+-0.05391026978811178#5403
+0.046047294307954255#5404
+0.14554476906050678#5405
+0.24358800859131027#5406
+0.33919739725975856#5407
+0.4314176376585382#5408
+0.5193272956295426#5409
+0.6020480069293945#5410
+0.6787532535546172#5411
+0.7486766220363146#5412
+0.8111194611902097#5413
+0.865457862808335#5414
+0.9111488955436093#5415
+0.9477360297003892#5416
+0.9748536987282782#5417
+0.9922309518422593#5418
+0.9996941612733737#5419
+0.9971687570999949#5420
+0.9846799723258353#5421
+0.9623525907601151#5422
+0.9304097002189882#5423
+0.8891704635058256#5424
+0.8390469294419863#5425
+0.7805399158111991#5426
+0.7142340053538154#5427
+0.6407917048093058#5428
+0.5609468253679145#5429
+0.47549715067181214#5430
+0.3852964656246555#5431
+0.291246025655054#5432
+0.19428555167024208#5433
+0.09538384067540505#5434
+-0.004470914125755297#5435
+-0.1042809970308588#5436
+-0.20304913868434413#5437
+-0.2997884804632161#5438
+-0.3935324348421947#5439
+-0.483344343216756#5440
+-0.568326834686291#5441
+-0.6476307922875124#5442
+-0.7204638370904717#5443
+-0.7860982453869009#5444
+-0.8438782198649527#5445
+-0.8932264421191625#5446
+-0.9336498410251193#5447
+-0.9647445193431539#5448
+-0.9861997893260463#5449
+-0.9978012770082968#5450
+-0.9994330641599263#5451
+-0.9910788465031126#5452
+-0.9728220966191456#5453
+-0.9448452299179868#5454
+-0.9074277820037917#5455
+-0.8609436156475553#5456
+-0.8058571852738867#5457
+-0.742718896285927#5458
+-0.6721596055965009#5459
+-0.5948843183143766#5460
+-0.5116651435662637#5461
+-0.42333357983764397#5462
+-0.3307722069147612#5463
+-0.23490586743913935#5464
+-0.13669242618562055#5465
+-0.0371131993941631#5466
+0.06283685021764836#5467
+0.16215905479318588#5468
+0.25986101969588604#5469
+0.3549665391884163#5470
+0.44652535035771196#5471
+0.533622627827888#5472
+0.6153881243929944#5473
+0.6910048662394316#5474
+0.7597173158782414#5475
+0.8208389212259487#5476
+0.8737589754060353#5477
+0.9179487187301777#5478
+0.952966621890268#5479
+0.9784627975733101#5480
+0.9941824964197943#5481
+0.9999686523950879#5482
+0.9957634521413347#5483
+0.9816089126294156#5484
+0.9576464613392653#5485
+0.9241155231632417#5486
+0.8813511281517454#5487
+0.8297805640037017#5488
+0.7699191067491161#5489
+0.7023648722813098#5490
+0.6277928401806244#5491
+0.5469481095415738#5492
+0.4606384541889888#5493
+0.3697262516689739#5494
+0.27511986665753085#5495
+0.1777645748809813#5496
+0.07863311823337614#5497
+-0.02128401453896417#5498
+-0.12098848447359085#5499
+-0.2194840774648326#5500
+-0.3157866581058347#5501
+-0.40893400284423276#5502
+-0.4979954142018187#5503
+-0.5820810199960956#5504
+-0.6603506646489725#5505
+-0.7320223037435822#5506
+-0.796379817953585#5507
+-0.8527801682707603#5508
+-0.9006598210382154#5509
+-0.9395403785924068#5510
+-0.9690333592544564#5511
+-0.988844078910672#5512
+-0.9987745953988022#5513
+-0.9987256862806896#5514
+-0.9886978402400751#5515
+-0.9687912521998316#5516
+-0.9392048222074141#5517
+-0.9002341680913335#5518
+-0.8522686717455321#5519
+-0.7957875885542126#5520
+-0.7313552588304589#5521
+-0.6596154691143745#5522
+-0.5812850196707813#5523
+-0.497146562457916#5524
+-0.4080407811277736#5525
+-0.3148579911929501#5526
+-0.2185292442883396#5527
+-0.12001702541096315#5528
+-0.02030563608803385#5529
+0.0796086404385363#5530
+0.17872749374496208#5531
+0.27606056101334203#5532
+0.3706353224095644#5533
+0.4615068181800175#5534
+0.5477670903770854#5535
+0.6285542548748294#5536
+0.703061113030274#5537
+0.7705432169454224#5538
+0.830326307744572#5539
+0.8818130525461197#5540
+0.9244890128152635#5541
+0.9579277844637908#5542
+0.9817952583387776#5543
+0.9958529585308029#5544
+0.9999604251464057#5545
+0.994076617736911#5546
+0.9782603253610263#5547
+0.9526695791840002#5548
+0.9175600734824577#5549
+0.8732826108317093#5550
+0.8202795970023783#5551
+0.7590806205881805#5552
+0.6902971615317548#5553
+0.6146164814192049#5554
+0.5327947565895087#5555
+0.44564952267049884#5556
+0.35405150603310986#5557
+0.2589159237813043#5558
+0.16119333920530024#5559
+0.06186016406738981#5560
+-0.03809109738163067#5561
+-0.13766176517685647#5562
+-0.23585696211936405#5563
+-0.33169555426032#5564
+-0.424219954067078#5565
+-0.5125056883212689#5566
+-0.595670635149608#5567
+-0.6728838378940628#5568
+-0.7433738077561016#5569
+-0.8064362322577487#5570
+-0.8614410124990496#5571
+-0.9078385588979957#5572
+-0.9451652825079584#5573
+-0.973048227045201#5574
+-0.9912087953447836#5575
+-0.9994655330113421#5576
+-0.9977359414514271#5577
+-0.9860373021721781#5578
+-0.9644865041102175#5579
+-0.9332988757160339#5580
+-0.8927860334632826#5581
+-0.8433527682799882#5582
+-0.7854930010113974#5583
+-0.7197848473261622#5584
+-0.6468848413756778#5585
+-0.5675213759218636#5586
+-0.48248742447746074#5587
+-0.3926326181768149#5588
+-0.2988547565424325#5589
+-0.20209083696892502#5590
+-0.10330769255477226#5591
+-0.0034923318255946968#5592
+0.09635792312877281#5593
+0.19524540156693176#5594
+0.2921820524921821#5595
+0.3861993169314748#5596
+0.4763578054565078#5597
+0.5617566842523725#5598
+0.6415426759512564#5599
+0.7149185852978462#5600
+0.7811512644608015#5601
+0.8395789384035385#5602
+0.8896178171216423#5603
+0.9307679286796158#5604
+0.9626181147651897#5605
+0.9848501388472685#5606
+0.9972418658901542#5607
+0.9996694818533945#5608
+0.9921087308007481#5609
+0.9746351572574807#5610
+0.9474233513944414#5611
+0.9107452045807868#5612
+0.8649671927352955#5613
+0.8105467146201293#5614
+0.7480275216635965#5615
+0.6780342849756218#5616
+0.6012663538405035#5617
+0.5184907680500401#5618
+0.4305345938954794#5619
+0.3382766603945284#5620
+0.24263877832231104#5621
+0.14457652978281252#5622
+0.045069720348370305#5623
+-0.05488741083372423#5624
+-0.15429612515013374#5625
+-0.2521631635875603#5626
+-0.34751067104847855#5627
+-0.4393859667560341#5628
+-0.5268710631254516#5629
+-0.6090918379925355#5630
+-0.6852267685533883#5631
+-0.7545151397487074#5632
+-0.8162646450771994#5633
+-0.8698583038932945#5634
+-0.9147606260738101#5635
+-0.9505229624582529#5636
+-0.9767879876029256#5637
+-0.993293270058646#5638
+-0.9998738944990372#5639
+-0.996464109499956#5640
+-0.9830979845059883#5641
+-0.9599090694198203#5642
+-0.927129060215757#5643
+-0.885085483910135#5644
+-0.8341984260196418#5645
+-0.7749763332056944#5646
+-0.7080109330434688#5647
+-0.6339713216755684#5648
+-0.5535972784245394#5649
+-0.4676918741624206#5650
+-0.37711344729204793#5651
+-0.28276702751346355#5652
+-0.1855952930663155#5653
+-0.08656915180049524#5654
+0.013321959814158985#5655
+0.1130799628100045#5656
+0.21170810819671795#5657
+0.30822093614772517#5658
+0.4016541223890385#5659
+0.4910741134086396#5660
+0.5755874542145792#5661
+0.6543497154419204#5662
+0.7265739306118212#5663
+0.791538459240455#5664
+0.8485941972321822#5665
+0.897171062513109#5666
+0.9367836911027245#5667
+0.9670362867103555#5668
+0.9876265754008688#5669
+0.9983488258159133#5670
+0.9990959047736466#5671
+0.9898603477080745#5672
+0.970734433252527#5673
+0.941909261222057#5674
+0.9036728432072584#5675
+0.8564072248576555#5676
+0.8005846686078619#5677
+0.7367629349874418#5678
+0.6655797096620707#5679
+0.5877462318891539#5680
+0.5040401880502716#5681
+0.41529794126592323#5682
+0.3224061747316915#5683
+0.22629303227285133#5684
+0.12791884463807107#5685
+0.028266534192014796#5686
+-0.07166820612001427#5687
+-0.17088686140685108#5688
+-0.26839807166219604#5689
+-0.3632275371060979#5690
+-0.45442775306629446#5691
+-0.5410874771316942#5692
+-0.6223408339853317#5693
+-0.6973759669443137#5694
+-0.7654431497634311#5695
+-0.825862277651974#5696
+-0.8780296626559881#5697
+-0.9214240655087582#5698
+-0.9556119036812614#5699
+-0.9802515835954748#5700
+-0.9950969137144907#5701
+-0.9999995644069737#5702
+-0.9949105500078052#5703
+-0.9798807182666571#5704
+-0.9550602422940854#5705
+-0.9206971200814494#5706
+-0.8771346965869603#5707
+-0.8248082331463521#5708
+-0.7642405584854947#5709
+-0.6960368447885882#5710
+-0.620878561017742#5711
+-0.5395166639003695#5712
+-0.4527640946178#5713
+-0.3614876561657189#5714
+-0.26659935254516054#5715
+-0.1690472763199991#5716
+-0.06980613558944763#5717
+0.030132484973073366#5718
+0.12977003170621854#5719
+0.22811095917882387#5720
+0.3241726773507713#5721
+0.4169953692878687#5722
+0.5056515813353825#5723
+0.5892554899283811#5724
+0.6669717524479807#5725
+0.738023853688666#5726
+0.8017018645415418#5727
+0.8573695353713178#5728
+0.904470653212348#5729
+0.942534599264724#5730
+0.9711810511617585#5731
+0.9901237830253536#5732
+0.9991735253403632#5733
+0.9982398560730228#5734
+0.9873321041380214#5735
+0.9665592561870703#5736
+0.936128867650305#5737
+0.8963449889110358#5738
+0.8476051273348236#5739
+0.7903962755072824#5740
+0.7252900453651407#5741
+0.6529369568387209#5742
+0.574059938071828#5743
+0.48944710216270515#5744
+0.3999438725984719#5745
+0.3064445360631003#5746
+0.20988330702048066#5747
+0.11122499335230866#5748
+0.011455356316654522#5749
+-0.08842873885267832#5750
+-0.18742928329404956#5751
+-0.28455709629262965#5752
+-0.37884170884712265#5753
+-0.4693410602752329#5754
+-0.5551509109725986#5755
+-0.6354138772760167#5756
+-0.7093279981575924#5757
+-0.7761547481542365#5758
+-0.8352264164699689#5759
+-0.8859527785214759#5760
+-0.9278269932670445#5761
+-0.9604306673947122#5762
+-0.9834380357699366#5763
+-0.9966192163731373#5764
+-0.9998425072048462#5765
+-0.9930757022085512#5766
+-0.9763864130629667#5767
+-0.9499413936284902#5768
+-0.9140048737977496#5769
+-0.8689359193978601#5770
+-0.8151848445233696#5771
+-0.7532887121466815#5772
+-0.6838659679623627#5773
+-0.6076102610821948#5774
+-0.5252835133225399#5775
+-0.43770830633340774#5776
+-0.3457596626345197#5777
+-0.2503563026795348#5778
+-0.15245146530496573#5779
+-0.053023383282823196#5780
+0.04693449085788134#5781
+0.14642341108041368#5782
+0.24444931698057448#5783
+0.3400327661096653#5784
+0.43221872023967534#5785
+0.5200860877895621#5786
+0.602756927067857#5787
+0.6794052183758368#5788
+0.7492651173233087#5789
+0.8116386068926013#5790
+0.8659024717938725#5791
+0.9115145254262775#5792
+0.9480190272272615#5793
+0.9750512362816127#5794
+0.9923410556921204#5795
+0.9997157312984891#5796
+0.9971015777798035#5797
+0.984524714893898#5798
+0.9621108064973708#5799
+0.9300838049538668#5800
+0.8887637134760895#5801
+0.8385633887594791#5802
+0.779984415854583#5803
+0.713612096495033#5804
+0.6401096009560984#5805
+0.5602113418765098#5806
+0.4747156362501377#5807
+0.3844767289064784#5808
+0.2903962571786933#5809
+0.19341424204141744#5810
+0.09449969573191108#5811
+-0.005359060299902684#5812
+-0.10516427037266961#5813
+-0.2039187138185583#5814
+-0.30063566888253596#5815
+-0.39434877171997756#5816
+-0.48412167198476425#5817
+-0.5690573885324254#5818
+-0.6483072717592313#5819
+-0.7210794830285081#5820
+-0.7866469064605475#5821
+-0.8443544140341247#5822
+-0.8936254114091304#5823
+-0.9339675990666196#5824
+-0.9649778912028727#5825
+-0.9863464432295038#5826
+-0.997859747638167#5827
+-0.9994027672970033#5828
+-0.990960084863636#5829
+-0.9726160568301596#5830
+-0.9445539706609553#5831
+-0.9070542134449333#5832
+-0.8604914703604248#5833
+-0.8053309809447339#5834
+-0.7421238905744688#5835
+-0.6715017436031232#5836
+-0.5941701731786572#5837
+-0.5109018507903337#5838
+-0.4225287659906093#5839
+-0.32993391343054546#5840
+-0.23404247026913375#5841
+-0.13581255210894666#5842
+-0.036225639821747355#5843
+0.06372322708394657#5844
+0.16303539256871574#5845
+0.26071856230327317#5846
+0.35579671834539367#5847
+0.4473198711885637#5848
+0.534373551743106#5849
+0.61608794840904#5850
+0.6916465979460678#5851
+0.7602945433043837#5852
+0.8213458769059611#5853
+0.8741905940063404#5854
+0.9183006876603954#5855
+0.953235424393193#5856
+0.9786457478631875#5857
+0.9942777665178029#5858
+0.9999752903939005#5859
+0.9956813917162614#5860
+0.9814389737010982#5861
+0.9573903418813012#5862
+0.9237757822365931#5863
+0.8809311603354478#5864
+0.8292845654773529#5865
+0.7693520333660359#5866
+0.7017323900512924#5867
+0.6271012686570413#5868
+0.5462043586784855#5869
+0.4598499552991679#5870
+0.3689008831726845#5871
+0.27426587536395725#5872
+0.17689049358883693#5873
+0.07774768047399928#5874
+-0.022171961764168652#5875
+-0.12187006908946504#5876
+-0.22035049096930778#5877
+-0.31662924358157246#5878
+-0.40974434145568117#5879
+-0.4987654093134345#5880
+-0.5828029780712501#5881
+-0.6610173721212264#5882
+-0.7326270990922569#5883
+-0.7969166582634752#5884
+-0.8532436896109454#5885
+-0.9010453920566842#5886
+-0.9398441467909955#5887
+-0.9692522894817371#5888
+-0.9889759836881826#5889
+-0.9988181567776074#5890
+-0.998680469009892#5891
+-0.9885642961156978#5892
+-0.9685707155506215#5893
+-0.9388994965626704#5894
+-0.8998471041639711#5895
+-0.851803736950367#5896
+-0.7952494283660311#5897
+-0.7307492503679691#5898
+-0.6589476674138139#5899
+-0.580562097185996#5900
+-0.4963757423914076#5901
+-0.4072297652588474#5902
+-0.31401488292408225#5903
+-0.21766246767865804#5904
+-0.11913524100583359#5905
+-0.01941765438575316#5906
+0.08049394701832663#5907
+0.17960127951156024#5908
+0.27691409538820333#5909
+0.3714600771593562#5910
+0.46229455262790753#5911
+0.5485099337408607#5912
+0.6292447849091506#5913
+0.7036924301872969#5914
+0.7711090133127998#5915
+0.8308209300720284#5916
+0.8822315587308598#5917
+0.9248272212818289#5918
+0.9581823159449805#5919
+0.9819635696401684#5920
+0.9959333679415077#5921
+0.9999521292421726#5922
+0.9939796994076727#5923
+0.9780757529826917#5924
+0.9523991969427621#5925
+0.917206582948294#5926
+0.8728495439651891#5927
+0.8197712808644788#5928
+0.7585021341057248#5929
+0.6896542847504532#5930
+0.6139156377513494#5931
+0.5320429486333605#5932
+0.4448542622426411#5933
+0.3532207391128595#5934
+0.2580579511171135#5935
+0.1603167333764215#5936
+0.060973683829497964#5937
+-0.038978594611030024#5938
+-0.13854141181881474#5939
+-0.23671996903540732#5940
+-0.3325332985706153#5941
+-0.42502406530739834#5942
+-0.5132681320779048#5943
+-0.5963837933365737#5944
+-0.6735405848704926#5945
+-0.7439675815232989#5946
+-0.806961100024507#5947
+-0.8618917299601419#5948
+-0.908210622633538#5949
+-0.9454549749800931#5950
+-0.9732526537425062#5951
+-0.9913259137032742#5952
+-0.9994941728230944#5953
+-0.997675816556909#5954
+-0.985889013319461#5955
+-0.9642515329525#5956
+-0.9329795700074526#5957
+-0.8923855836009295#5958
+-0.8428751754265166#5959
+-0.7849430371167282#5960
+-0.7191680074477368#5961
+-0.6462072887736614#5962
+-0.5667898804778864#5963
+-0.4817092950521987#5964
+-0.3918156295822699#5965
+-0.29800707185858066#5966
+-0.20122092598092017#5967
+-0.10242424712565217#5968
+-0.0026041790500589026#5969
+0.09724190912177542#5970
+0.19611638828156605#5971
+0.29303133731710534#5972
+0.3870184140934526#5973
+0.47713853080745516#5974
+0.5624912370426562#5975
+0.6422237167722069#5976
+0.7155393094147028#5977
+0.7817054698033725#5978
+0.8400610875352369#5979
+0.8900230925677216#5980
+0.9310922810617849#5981
+0.9628583032616626#5982
+0.9850037635739842#5983
+0.997307391879625#5984
+0.9996462543915937#5985
+0.9919969819687958#5986
+0.9744360036127667#5987
+0.9471387828143523#5988
+0.9103780643805088#5989
+0.8645211492583496#5990
+0.8100262245854944#5991
+0.7474377856356479#5992
+0.6773811954018097#5993
+0.6005564361759669#5994
+0.5177311155574154#5995
+0.42973279677136517#5996
+0.33744072993074997#5997
+0.2417770668597405#5998
+0.14369764725754003#5999
+0.04418244826406843#6000
+-0.055774207147682296#6001
+-0.15517358511811483#6002
+-0.25302251991961405#6003
+-0.34834333734020045#6004
+-0.4401836232810802#6005
+-0.5276257399634938#6006
+-0.6097959946620711#6007
+-0.6858733693537384#6008
+-0.7550977240584129#6009
+-0.8167773919064145#6010
+-0.8702960900451931#6011
+-0.9151190773338755#6012
+-0.9507984972999824#6013
+-0.9769778529732608#6014
+-0.9933955688855672#6015
+-0.9998876046464816#6016
+-0.9963890939806623#6017
+-0.9829349928502283#6018
+-0.9596597301863407#6019
+-0.926795864719758#6020
+-0.8846717613308728#6021
+-0.8337083101363698#6022
+-0.7744147210943076#6023
+-0.70738343614654#6024
+-0.6332842097346686#6025
+-0.5528574168350533#6026
+-0.46690665537678444#6027
+-0.37629071695680905#6028
+-0.28191500607817316#6029
+-0.18472249364751417#6030
+-0.0856842951214665#6031
+0.014210032557972981#6032
+0.11396237828930539#6033
+0.21257604960772433#6034
+0.3090657313067615#6035
+0.40246733038212795#6036
+0.491847608930326#6037
+0.5763135087532935#6038
+0.6550210745007133#6039
+0.7271838861928992#6040
+0.7920809168692764#6041
+0.8490637368514327#6042
+0.8975629926381219#6043
+0.9370940956972457#6044
+0.9672620643142826#6045
+0.9877654701190156#6046
+0.9983994498581685#6047
+0.9990577523213141#6048
+0.9897337999678465#6049
+0.9705207546475926#6050
+0.9416105867584041#6051
+0.903292157141399#6052
+0.8559483308789219#6053
+0.8000521518331991#6054
+0.7361621161484359#6055
+0.6649165919419564#6056
+0.5870274409409932#6057
+0.5032729057956179#6058
+0.4144898341354351#6059
+0.3215653170646921#6060
+0.22542782564119876#6061
+0.1270379339004295#6062
+0.027378721117284403#6063
+-0.07255405079706279#6064
+-0.17176188661902594#6065
+-0.26925353444682204#6066
+-0.3640548899618095#6067
+-0.4552187293568439#6068
+-0.5418341736834483#6069
+-0.6230357900531704#6070
+-0.6980122387569291#6071
+-0.7660143799031949#6072
+-0.8263627585761534#6073
+-0.8784543937246257#6074
+-0.9217688029494135#6075
+-0.9558732029913825#6076
+-0.980426833958729#6077
+-0.9951843640871785#6078
+-0.9999983410138783#6079
+-0.994820665072666#6080
+-0.9797030698900342#6081
+-0.9547966054798351#6082
+-0.9203501290014732#6083
+-0.876707818261429#6084
+-0.8243057328023874#6085
+-0.7636674569404289#6086
+-0.6953988682836173#6087
+-0.620182084003217#6088
+-0.5387686453443945#6089
+-0.45197200847452446#6090
+-0.36065941669805746#6091
+-0.26574323524809457#6092
+-0.1681718352345661#6093
+-0.06892011783359091#6094
+0.031020226602815813#6095
+0.1306506271889307#6096
+0.22897560989552862#6097
+0.3250127439973229#6098
+0.4178024581960238#6099
+0.5064176283395591#6100
+0.5899728409401348#6101
+0.6676332399331268#6102
+0.7386228682829117#6103
+0.8022324210890692#6104
+0.8578263327264827#6105
+0.9048491272069747#6106
+0.9428309683117653#6107
+0.9713923540396625#6108
+0.9902479084656121#6109
+0.9992092331226073#6110
+0.9981867894168958#6111
+0.98719079326801#6112
+0.9663311130346763#6113
+0.935816171746493#6114
+0.8959508646099132#6115
+0.8471335125961273#6116
+0.789851882549586#6117
+0.7246783135829253#6118
+0.6522639984537427#6119
+0.5733324770618192#6120
+0.4886724070776113#6121
+0.39912968393550297#6122
+0.3055989889262417#6123
+0.20901484983722315#6124
+0.1103423034597536#6125
+0.010567253260429845#6126
+-0.08931338144040267#6127
+-0.188301626356961#6128
+-0.2854084236672018#6129
+-0.37966351435164025#6130
+-0.47012513270074757#6131
+-0.5558894161266145#6132
+-0.6360994362591523#6133
+-0.7099537610911038#6134
+-0.7767144626217417#6135
+-0.8357144899895256#6136
+-0.8863643344238125#6137
+-0.9281579194216271#6138
+-0.9606776572967937#6139
+-0.9835986215780596#6140
+-0.9966917935669896#6141
+-0.9998263506170976#6142
+-0.9929709732704858#6143
+-0.9761941581915149#6144
+-0.9496635337707765#6145
+-0.9136441852376241#6146
+-0.8684960060161877#6147
+-0.8146701017892441#6148
+-0.7527042831993508#6149
+-0.683217692222682#6150
+-0.6069046159070638#6151
+-0.5245275492852929#6152
+-0.4369095767768165#6153
+-0.34492614820028883#6154
+-0.24949633156836795#6155
+-0.151573630063937#6156
+-0.052136454951487186#6157
+0.04782165038481744#6158
+0.14730193759821267#6159
+0.2453104325426728#6160
+0.34086786673401337#6161
+0.4330194618768823#6162
+0.520844469693879#6163
+0.6034653717379834#6164
+0.6800566472668097#6165
+0.7498530215729831#6166
+0.8121571123560498#6167
+0.8663463977358996#6168
+0.9118794362856127#6169
+0.9483012769352218#6170
+0.9752480046924157#6171
+0.9924503767608481#6172
+0.9997365127251596#6173
+0.997033611923271#6174
+0.9843686808465345#6175
+0.9618682632997994#6176
+0.9297571760175435#6177
+0.888356262369377#6178
+0.8380791865991503#6179
+0.7794283006285677#6180
+0.7129896247228424#6181
+0.6394269921699185#6182
+0.5594754164776916#6183
+0.47393374736200167#6184
+0.38365668890433663#6185
+0.28954625963117797#6186
+0.1925427798430516#6187
+0.09361547624491363#6188
+-0.00624720224670175#6189
+-0.10604746075851858#6190
+-0.2047881280970657#6191
+-0.30148262015362104#6192
+-0.3951647975265046#6193
+-0.4848986188666166#6194
+-0.5697874934931841#6195
+-0.6489832398314691#6196
+-0.7216945601626925#6197
+-0.7871949470092712#6198
+-0.844829942157383#6199
+-0.8940236757871044#6200
+-0.9342846203732933#6201
+-0.9652105018661431#6202
+-0.9864923190805144#6203
+-0.9979174311336345#6204
+-0.9993716820825086#6205
+-0.9908405415323671#6206
+-0.9724092498195667#6207
+-0.9442619663183269#6208
+-0.9066799293811373#6209
+-0.8600386462981047#6210
+-0.8048041413522367#6211
+-0.7415282994588526#6212
+-0.6708433519139391#6213
+-0.593455559348028#6214
+-0.5101381550034353#6215
+-0.4217236188433001#6216
+-0.32909535968697506#6217
+-0.23317888848111895#6218
+-0.13493257090025113#6219
+-0.03533805167372523#6220
+0.06460955368391785#6221
+0.16391160173822988#6222
+0.2615758992499447#6223
+0.35662661684184926#6224
+0.4481140391633548#6225
+0.5351240541323454#6226
+0.6167872864409377#6227
+0.6922877840661794#6228
+0.7608711709929451#6229
+0.8218521846897158#6230
+0.8746215230252763#6231
+0.9186519322142014#6232
+0.9535034749623935#6233
+0.978827926175101#6234
+0.9943722523069567#6235
+0.9999811395895223#6236
+0.9955985458751219#6237
+0.9812682605914571#6238
+0.9571334672121197#6239
+0.9234353126146541#6240
+0.8805104976206695#6241
+0.8287879127925286#6242
+0.768784353100621#6243
+0.7010993542788487#6244
+0.6264092024617534#6245
+0.5454601769570099#6246
+0.45906109366927184#6247
+0.36807522367901085#6248
+0.27341166772324016#6249
+0.17601627276145895#6250
+0.07686218138548857#6251
+-0.02305989149962678#6252
+-0.12275155757146444#6253
+-0.22121673065631767#6254
+-0.317471579292981#6255
+-0.4105543568514991#6256
+-0.4995350109875823#6257
+-0.5835244764181962#6258
+-0.6616835581679836#6259
+-0.7332313165280581#6260
+-0.7974528699474296#6261
+-0.8537065378931546#6262
+-0.9014302523101099#6263
+-0.9401471736192033#6264
+-0.969470455140827#6265
+-0.9891071083390048#6266
+-0.9988609302659951#6267
+-0.9986344639572882#6268
+-0.9884299721893809#6269
+-0.9683494148708616#6270
+-0.9385934302927073#6271
+-0.8994593304168023#6272
+-0.8513381302330933#6273
+-0.7947106408670623#6274
+-0.7301426654738955#6275
+-0.6582793459203868#6276
+-0.57983871674066#6277
+-0.49560453077245464#6278
+-0.40641842815784546#6279
+-0.31317152695315215#6280
+-0.21679551937188488#6281
+-0.11825336262412364#6282
+-0.018529657366386256#6283
+0.08137919010266577#6284
+0.18047492360459536#6285
+0.27776741132694516#6286
+0.37228453889301355#6287
+0.46308192240736856#6288
+0.5492523444275588#6289
+0.6299348185809126#6290
+0.7043231922557696#6291
+0.7716742014118969#6292
+0.8313148970290903#6293
+0.8826493689913352#6294
+0.9251647002237049#6295
+0.9584360915902255#6296
+0.9821311063464223#6297
+0.9960129917373818#6298
+0.9999430445530186#6299
+0.9938819970047018#6300
+0.9778904090760181#6301
+0.9521280634274347#6302
+0.9168523689007734#6303
+0.8724157885751502#6304
+0.8192623180723986#6305
+0.7579230492995809#6306
+0.6890108639542089#6307
+0.6132143098129139#6308
+0.5312907209896665#6309
+0.4440586509036509#6310
+0.3523896935640783#6311
+0.25719977489095747#6312
+0.15944000108606712#6313
+0.06008715549418129#6314
+-0.03986606109322982#6315
+-0.13942094917616493#6316
+-0.23758278922136963#6317
+-0.3333707805711021#6318
+-0.42582784127909545#6319
+-0.514030170956996#6320
+-0.5970964810824756#6321
+-0.6741968005428316#6322
+-0.7445607684319929#6323
+-0.807485331242046#6324
+-0.8623417675414878#6325
+-0.9085819699519408#6326
+-0.9457439216558984#6327
+-0.9734563127160425#6328
+-0.9914422500813985#6329
+-0.9995220242111722#6330
+-0.9976149046730771#6331
+-0.9857399467751279#6332
+-0.9640158011713017#6333
+-0.9326595283434245#6334
+-0.8919844298045866#6335
+-0.8423969176939883#6336
+-0.7843924540411868#6337
+-0.7185506002732748#6338
+-0.645529226428678#6339
+-0.5660579379371954#6340
+-0.4809307856437185#6341
+-0.390998331914669#6342
+-0.2971591520999911#6343
+-0.20035085626528476#6344
+-0.10154072090196273#6345
+-0.0017160242202876055#6346
+0.09812581840815446#6347
+0.19698722029514487#6348
+0.29388039099226304#6349
+0.3878372059665269#6350
+0.47791887978070685#6351
+0.5632253461270936#6352
+0.6429042509925226#6353
+0.7161594690979219#6354
+0.7822590585189381#6355
+0.840542574007695#6356
+0.8904276659433977#6357
+0.9314158989772433#6358
+0.963097732233666#6359
+0.9851566113073892#6360
+0.9973721311704039#6361
+0.9996222383861532#6362
+0.9918844506271235#6363
+0.9742360813108307#6364
+0.946853467109708#6365
+0.9100102060533641#6366
+0.8640744238275117#6367
+0.8095050955838005#6368
+0.7468474600118203#6369
+0.6767275714943461#6370
+0.5998460447788914#6371
+0.5169710546667434#6372
+0.4289306606642735#6373
+0.33660453328606976#6374
+0.2409151646779356#6375
+0.142818651380304#6376
+0.04329514132764921#6377
+-0.05666095946568067#6378
+-0.15605092268165224#6379
+-0.25388167666176487#6380
+-0.3491757288507966#6381
+-0.4409809325792998#6382
+-0.5283800005983845#6383
+-0.6104996703106945#6384
+-0.6865194291216177#6385
+-0.7556797127299064#6386
+-0.8172894944430965#6387
+-0.8707331896877957#6388
+-0.9154768067272556#6389
+-0.9510732821302911#6390
+-0.9771669476813053#6391
+-0.9934970840995313#6392
+-0.9999005260599038#6393
+-0.9963132924870508#6394
+-0.9827712258330508#6395
+-0.9594096339514985#6396
+-0.9264619381461588#6397
+-0.8842573409024587#6398
+-0.8332175366050724#6399
+-0.7738524981070234#6400
+-0.7067553812495116#6401
+-0.6325965982448198#6402
+-0.5521171191390967#6403
+-0.466121068284588#6404
+-0.3754676897949175#6405
+-0.2810627622619315#6406
+-0.1838495485154199#6407
+-0.08479937085272225#6408
+0.015098094092590981#6409
+0.11484470387249736#6410
+0.21344382333392106#6411
+0.30991028266773873#6412
+0.4032802208998583#6413
+0.49262071647146216#6414
+0.5770391086828398#6415
+0.6556919168640254#6416
+0.7277932681548336#6417
+0.7926227496867044#6418
+0.8495326067099487#6419
+0.8979542147450874#6420
+0.9374037610906888#6421
+0.9674870789199537#6422
+0.9879035856653547#6423
+0.9984492863402916#6424
+0.9990188117895656#6425
+0.9896064715031475#6426
+0.9703063104738733#6427
+0.9413111695309624#6428
+0.9029107585381975#6429
+0.8554887617087299#6430
+0.799519003959252#6431
+0.7355607166080547#6432
+0.6642529497205526#6433
+0.5863081869322719#6434
+0.5025052265478807#6435
+0.41368140004596415#6436
+0.32072420573967675#6437
+0.2245624411869641#6438
+0.12615692295238418#6439
+0.026490886445597783#6440
+-0.07343983824183033#6441
+-0.17263677634152869#6442
+-0.2701087848381528#6443
+-0.3648819556427663#6444
+-0.4560093465605342#6445
+-0.5425804428241162#6446
+-0.623730254656246#6447
+-0.698647959961658#6448
+-0.7665850057934409#6449
+-0.8268625876466449#6450
+-0.8788784318485121#6451
+-0.9221128132779292#6452
+-0.9561337482870396#6453
+-0.9806013109390582#6454
+-0.9952710294358666#6455
+-0.9999963287994093#6456
+-0.9947299954004215#6457
+-0.9795246487014079#6458
+-0.9545322155003655#6459
+-0.9200024119284395#6460
+-0.876280248368885#6461
+-0.8238025822273635#6462
+-0.7630937529971512#6463
+-0.694760343232246#6464
+-0.6194851177749968#6465
+-0.5380202017954916#6466
+-0.45117956580547686#6467
+-0.35983089273406754#6468
+-0.264886908326737#6469
+-0.16729626149137494#6470
+-0.06803404571198197#6471
+0.031907943763099904#6472
+0.13153111961146466#6473
+0.2298400799910786#6474
+0.32585255426645#6475
+0.4186092175321232#6476
+0.5071832758700237#6477
+0.5906897265679296#6478
+0.6682942007740298#6479
+0.7392213002346851#6480
+0.8027623448174664#6481
+0.8582824534087788#6482
+0.9052268874360858#6483
+0.943126593632353#6484
+0.9716028906612442#6485
+0.9903712527758591#6486
+0.999244152705944#6487
+0.9981329353683882#6488
+0.9870487036795089#6489
+0.9661022076183817#6490
+0.9355027376496583#6491
+0.8955560335624265#6492
+0.8466612296193012#6493
+0.7893068665388091#6494
+0.7240660101580189#6495
+0.6515905255481277#6496
+0.572604563794148#6497
+0.4878973265166385#6498
+0.39831518042998615#6499
+0.3047532007259689#6500
+0.20814622777831115#6501
+0.10945952652668677#6502
+0.009679141868516105#6503
+-0.0901979535757059#6504
+-0.18917382088327842#6505
+-0.28625952590513565#6506
+-0.3804850203689661#6507
+-0.47090883428089403#6508
+-0.5566274827824501#6509
+-0.6367844934726242#6510
+-0.7105789639969848#6511
+-0.7772735643992611#6512
+-0.8362019042785367#6513
+-0.8867751911418572#6514
+-0.9284881134241899#6515
+-0.9609238893945486#6516
+-0.9837584315012794#6517
+-0.9967635845477477#6518
+-0.9998094053436452#6519
+-0.9928654610543938#6520
+-0.9760011332759688#6521
+-0.9493849247969268#6522
+-0.9132827759742418#6523
+-0.8680554075451663#6524
+-0.8141547164248637#6525
+-0.7521192605018084#6526
+-0.6825688775453889#6527
+-0.6061984919918056#6528
+-0.5237711714888175#6529
+-0.43611050257604106#6530
+-0.3440923616804886#6531
+-0.24863616364883562#6532
+-0.15069567525819083#6533
+-0.051249485493732934#6534
+0.04870877218895102#6535
+0.14818034792090215#6536
+0.2461713545983377#6537
+0.3417026984740565#6538
+0.4338198619385158#6539
+0.5216024407442641#6540
+0.6041733403809366#6541
+0.6807075397136739#6542
+0.7504403343215857#6543
+0.8126749771715466#6544
+0.8667896402842373#6545
+0.912243627833765#6546
+0.9485827786016253#6547
+0.9754440038054716#6548
+0.9925589149622076#6549
+0.9997565055369927#6550
+0.9969648595840104#6551
+0.9842118703068278#6552
+0.9616249613587246#6553
+0.9294298136676707#6554
+0.8879481105070949#6555
+0.8375943233429495#6556
+0.7788715705718298#6557
+0.7123665905282638#6558
+0.6387438789892236#6559
+0.5587390497519747#6560
+0.47315148462417583#6561
+0.3828363462650965#6562
+0.28869603368300556#6563
+0.1916711657625737#6564
+0.09273118291190512#6565
+-0.0071353392655659825#6566
+-0.10693056749172508#6567
+-0.20565738083405258#6568
+-0.30232933360837705#6569
+-0.395980511618076#6570
+-0.48567518324943976#6571
+-0.5705171489926438#6572
+-0.6496586959710069#6573
+-0.7223090680078381#6574
+-0.7877423666007652#6575
+-0.8453048038596203#6576
+-0.8944212349389244#6577
+-0.9346009046950666#6578
+-0.9654423511494763#6579
+-0.9866374167640076#6580
+-0.9979743274491972#6581
+-0.9993398085409632#6582
+-0.9907202166036044#6583
+-0.9722016757505011#6584
+-0.9439692171204415#6585
+-0.9063049301076473#6586
+-0.8595851438177926#6587
+-0.8042766669119777#6588
+-0.7409321234088941#6589
+-0.6701844310483026#6590
+-0.5927404773861927#6591
+-0.5093740568079891#6592
+-0.4209181390308347#6593
+-0.3282565463455203#6594
+-0.2323151227563079#6595
+-0.13405248325368307#6596
+-0.0344504356502464#6597
+0.06549582931840771#6598
+0.1647876816105547#6599
+0.2624330298596137#6600
+0.35745623402314036#6601
+0.44890785365562746#6602
+0.5358741344035932#6603
+0.6174861379370337#6604
+0.6929284240939841#6605
+0.7614471984890684#6606
+0.8223578441778256#6607
+0.8750517621229162#6608
+0.9190024521145261#6609
+0.9537707733864255#6610
+0.9790093323653442#6611
+0.9944659537127232#6612
+0.9999861999773392#6613
+0.995514914683267#6614
+0.9810967734351546#6615
+0.9568758375343491#6616
+0.9230941145659948#6617
+0.8800891403392386#6618
+0.8282906063409999#6619
+0.7682160664006705#6620
+0.7004657654633318#6621
+0.625716642140678#6622
+0.5447155649641743#6623
+0.4582718699215725#6624
+0.36724927383925204#6625
+0.272557244409198#6626
+0.17514191308845256#6627
+0.07597662166634576#6628
+-0.023947803044919447#6629
+-0.12363294922425093#6630
+-0.22208279584255267#6631
+-0.3183136645756067#6632
+-0.411364048392728#6633
+-0.5003042186171828#6634
+-0.5842455144677996#6635
+-0.6623492222637417#6636
+-0.7338349555743653#6637
+-0.7979884525824719#6638
+-0.8541687127522828#6639
+-0.9018144014949061#6640
+-0.9404494588379959#6641
+-0.969687856059632#6642
+-0.9892374527597048#6643
+-0.9989029158302245#6644
+-0.9985876711591678#6645
+-0.9882948685670818#6646
+-0.9681273503351187#6647
+-0.9382866236389569#6648
+-0.8990708471557118#6649
+-0.8508718519609921#6650
+-0.7941712264823142#6651
+-0.7295355046267261#6652
+-0.6576105051612804#6653
+-0.5791148789053921#6654
+-0.4948329282094064#6655
+-0.4056067704647689#6656
+-0.3123279239454181#6657
+-0.2159284000518886#6658
+-0.117371390961479#6659
+-0.017641645730405324#6660
+0.08226436899325389#6661
+0.18134842533491713#6662
+0.2786205081564525#6663
+0.3731087069601824#6664
+0.46386892689730536#6665
+0.5499943218515493#6666
+0.6306243553458014#6667
+0.7049533987381323#6668
+0.7722387807968807#6669
+0.8318082082261052#6670
+0.8830664829979679#6671
+0.9255014493746805#6672
+0.958689111199342#6673
+0.9822978683253825#6674
+0.9960918298556162#6675
+0.9999331710861101#6676
+0.9937835106050681#6677
+0.977704293787209#6678
+0.9518561788518946#6679
+0.9164974316193079#6680
+0.871981345003749#6681
+0.8187527090276192#6682
+0.7573433666265443#6683
+0.6883668996505666#6684
+0.6125124981571216#6685
+0.5305380742518008#6686
+0.4432626892811246#6687
+0.3515583700423137#6688
+0.25634139577978515#6689
+0.15856314302582344#6690
+0.05920057976075344#6691
+-0.04075349612817637#6692
+-0.14030037655510802#6693
+-0.2384454219966389#6694
+-0.3342079996011555#6695
+-0.42663128134813255#6696
+-0.514791804357429#6697
+-0.5978086978251298#6698
+-0.674852484393442#6699
+-0.7451533680142645#6700
+-0.8080089254968401#6701
+-0.8627911248880876#6702
+-0.908952600560277#6703
+-0.9460321223074467#6704
+-0.973659203805159#6705
+-0.9915578043873877#6706
+-0.9995490871536059#6707
+-0.9975532058479801#6708
+-0.9855901026567658#6709
+-0.9637793089525735#6710
+-0.9323387509764054#6711
+-0.8915825723906932#6712
+-0.8419179954596638#6713
+-0.783841252219086#6714
+-0.7179326262898007#6715
+-0.6448506548755989#6716
+-0.5653255488771634#6717
+-0.4801518968661259#6718
+-0.39018072581871516#6719
+-0.2963109979355221#6720
+-0.1994806285083495#6721
+-0.10065711458064946#6722
+-8.278680368774796E-4#6723
+0.0990096502906622#6724
+0.1978578969207362#6725
+0.2947292128479025#6726
+0.388655691904816#6727
+0.4786988517607058#6728
+0.5639590109266028#6729
+0.6435842780753824#6730
+0.7167790638583078#6731
+0.7828120301708148#6732
+0.8410233974411052#6733
+0.8908315369295339#6734
+0.9317387821707139#6735
+0.963336401492333#6736
+0.9853086819269133#6737
+0.997436083711423#6738
+0.9995974338560171#6739
+0.9917711368644981#6740
+0.9740353905093757#6741
+0.9465674045055719#6742
+0.9096416298895278#6743
+0.863627016795169#6744
+0.8089833280261255#6745
+0.746256545257776#6746
+0.6760734137688245#6747
+0.59913518020965#6748
+0.5162105859775773#6749
+0.42812818620694754#6750
+0.33576807112009877#6751
+0.24005307245678428#6752
+0.14193954284447627#6753
+0.04240780023904047#6754
+-0.05754766708822902#6755
+-0.15692813714868228#6756
+-0.2547406331362906#6757
+-0.3500078449236578#6758
+-0.4417778940217574#6759
+-0.5291338444351459#6760
+-0.6112028643833304#6761
+-0.6871649473473994#6762
+-0.7562611053041018#6763
+-0.8178009522832872#6764
+-0.8711696024763078#6765
+-0.9158338139717653#6766
+-0.9513473167324222#6767
+-0.977355271577897#6768
+-0.9935978156204607#6769
+-0.9999126587291108#6770
+-0.9962367050789155#6771
+-0.9826066835836388#6772
+-0.9591587809125754#6773
+-0.9261272807583686#6774
+-0.8838422229517972#6775
+-0.8327261058128828#6776
+-0.7732896646873357#6777
+-0.7061267688478077#6778
+-0.6319084877484257#6779
+-0.5513763859206331#6780
+-0.4653351135055202#6781
+-0.37464436645559573#6782
+-0.28021029673700776#6783
+-0.18297645835863166#6784
+-0.08391437969231084#6785
+0.0159861437174899#6786
+0.11572693886358196#6787
+0.21431142869078854#6788
+0.31075458956445545#6789
+0.40409279330100306#6790
+0.4933934354222034#6791
+0.5777642534308487#6792
+0.6563622420026807#6793
+0.72840207601693#6794
+0.793163957265329#6795
+0.8500008064378751#6796
+0.8983447285254006#6797
+0.9377126870387825#6798
+0.967711330349872#6799
+0.9880409219309375#6800
+0.9984983352229706#6801
+0.9989790832091183#6802
+0.9894783624144172#6803
+0.9700911009005274#6804
+0.9410110097759191#6805
+0.9025286476985094#6806
+0.8550285177095982#6807
+0.7989852254065796#6808
+0.7349587368406961#6809
+0.6635887835213552#6810
+0.585588470430354#6811
+0.5017371509126227#6812
+0.41287263963522164#6813
+0.3198828414201331#6814
+0.22369687959278223#6815
+0.1252758124888965#6816
+0.02560303087729906#6817
+-0.07432556775558767#6818
+-0.17351152988422644#6819
+-0.27096382216154746#6820
+-0.3657087334965602#6821
+-0.4567996040537086#6822
+-0.5433262839650238#6823
+-0.6244242272467491#6824
+-0.699283130057029#6825
+-0.7671550269840464#6826
+-0.8273617644691722#6827
+-0.8793017766931565#6828
+-0.9224560962229421#6829
+-0.9563935393627088#6830
+-0.980775014398831#6831
+-0.9953569096921918#6832
+-0.9999935277651537#6833
+-0.9946385410625938#6834
+-0.9793454548415207#6835
+-0.9542670725642333#6836
+-0.9196539691366354#6837
+-0.8758519872466048#6838
+-0.823298781818177#6839
+-0.7625194471082125#6840
+-0.6941212701381572#6841
+-0.6187876628828645#6842
+-0.5372713338440499#6843
+-0.45038676723575394#6844
+-0.3590020849273077#6845
+-0.26403037245657784#6846
+-0.16642055578109807#6847
+-0.06714791992357462#6848
+0.03279563575367421#6849
+0.13241150827926804#6850
+0.23070436878356018#6851
+0.32669210749569116#6852
+0.4194156466597768#6853
+0.5079485233228161#6854
+0.59140614624627#6855
+0.6689546344493088#6856
+0.7398191490719298#6857
+0.8032916353087174#6858
+0.858737897058408#6859
+0.9056039336016954#6860
+0.9434214749932913#6861
+0.9718126608604276#6862
+0.9904938158587981#6863
+0.9992782840628278#6864
+0.9980782939699812#6865
+0.986905835484602#6866
+0.9658725401187522#6867
+0.9351885656070448#6868
+0.8951604960800272#6869
+0.846188278776893#6870
+0.7887612279048725#6871
+0.72345313557342#6872
+0.6509165386531266#6873
+0.571876198843009#6874
+0.4871218610911878#6875
+0.3975003627244203#6876
+0.3039071721294589#6877
+0.20727744152893346#6878
+0.1085766632494626#6879
+0.008791022841475713#6880
+-0.09108245456081744#6881
+-0.19004586618499503#6882
+-0.2871104023350624#6883
+-0.3813062262510775#6884
+-0.4716921643974707#6885
+-0.5573651103579016#6886
+-0.637469048376044#6887
+-0.7112036063820617#6888
+-0.7778320530457624#6889
+-0.8366886589525186#6890
+-0.8871853483515171#6891
+-0.9288175750142688#6892
+-0.9611693634937438#6893
+-0.9839174654135346#6894
+-0.9968345892587814#6895
+-0.9997916713978559#6896
+-0.9927591656435055#6897
+-0.9758073384685907#6898
+-0.9491055669267142#6899
+-0.9129206462926903#6900
+-0.86761412433235#6901
+-0.813638688836776#6902
+-0.7515336445155336#6903
+-0.6819195244422828#6904
+-0.605491889893427#6905
+-0.5230143805297617#6906
+-0.43531108436140914#6907
+-0.3432583037328287#6908
+-0.24777579959945775#6909
+-0.1498176015802779#6910
+-0.050362475609222065#6911
+0.04959585557050026#6912
+0.14905864135557212#6913
+0.24703208246845434#6914
+0.34253726067126045#6915
+0.43461991979320214#6916
+0.5223600003428128#6917
+0.6048808324382549#6918
+0.6813578952029908#6919
+0.7510270551058309#6920
+0.813192200930588#6921
+0.867232199089246#6922
+0.9126070997834519#6923
+0.9488635320044169#6924
+0.975639233466172#6925
+0.9926666702105814#6926
+0.9997757097182173#6927
+0.9968953208162551#6928
+0.9840542833984735#6929
+0.9613809008660682#6930
+0.9291017181624794#6931
+0.8875392582112024#6932
+0.8371087993733477#6933
+0.7783142261235303#6934
+0.7117429944027603#6935
+0.6380602619528687#6936
+0.558002242280222#6937
+0.47236884865372675#6938
+0.38201570163586274#6939
+0.28784558000485344#6940
+0.19079940048753272#6941
+0.09184681643043616#6942
+-0.008023470655912756#6943
+-0.10781358987567453#6944
+-0.20652647134383265#6945
+-0.30317580857889714#6946
+-0.39679591335123815#6947
+-0.4864513645206622#6948
+-0.5712463544552357#6949
+-0.6503336396450295#6950
+-0.7229230060792073#6951
+-0.7882891648032128#6952
+-0.8457789987662547#6953
+-0.8948180885509868#6954
+-0.9349164517824474#6955
+-0.9656734388699845#6956
+-0.9867817361655272#6957
+-0.998030436539974#6958
+-0.9993071466975093#6959
+-0.9905991101722632#6960
+-0.9719933347867018#6961
+-0.9436757232982262#6962
+-0.9059292159202714#6963
+-0.8591309632772218#6964
+-0.8037485580400412#6965
+-0.7403353628948707#6966
+-0.6695249815259856#6967
+-0.592024927857224#6968
+-0.508609556806733#6969
+-0.42011232718859376#6970
+-0.3274174740678562#6971
+-0.23145117377605856#6972
+-0.1331722898634756#6973
+-0.03356279245148251#6974
+0.0663820532883018#6975
+0.16566363149461852#6976
+0.2632899534561562#6977
+0.3582855692348461#6978
+0.449701314039203#6979
+0.5366237919651687#6980
+0.618184502346058#6981
+0.6935685175241308#6982
+0.7620226253383701#6983
+0.8228628549714151#6984
+0.8754813109598781#6985
+0.9193522470848716#6986
+0.9540373194544375#6987
+0.9791899662908198#6988
+0.9945588706611886#6989
+0.9999904715533596#6990
+0.9954304982066668#6991
+0.9809245123674635#6992
+0.9566174530512137#6993
+0.92275218835976#6994
+0.8796670888235313#6995
+0.8277926465150534#6996
+0.767647173714462#6997
+0.699831624104531#6998
+0.6250235882401227#6999
+0.5439705232873457#7000
+0.45748228467862745#7001
+0.3664230343049359#7002
+0.2717026060958192#7003
+0.17426741525953252#7004
+0.07509100201512046#7005
+-0.024835695699641874#7006
+-0.12451424335256278#7007
+-0.22294868584484095#7008
+-0.3191554987651938#7009
+-0.4121734154406648#7010
+-0.5010730315954676#7011
+-0.5849660916512891#7012
+-0.6630143638834097#7013
+-0.7344380157550146#7014
+-0.7985234057461226#7015
+-0.8546302138237558#7016
+-0.9021978393080471#7017
+-0.9407510022089238#7018
+-0.9699044920666614#7019
+-0.9893670168474638#7020
+-0.9989441134371765#7021
+-0.9985400906524421#7022
+-0.9881589853553737#7023
+-0.9679045221185625#7024
+-0.9379790768434352#7025
+-0.8986816546871441#7026
+-0.8504049025018744#7027
+-0.7936311856372888#7028
+-0.7289277683054031#7029
+-0.6569411456640912#7030
+-0.5783905842511721#7031
+-0.4940609353109204#7032
+-0.40479479281987163#7033
+-0.3114840745663333#7034
+-0.21506111040267262#7035
+-0.11648932671361892#7036
+-0.016753620178294085#7037
+0.0831494829918418#7038
+0.1822217840134876#7039
+0.27947338520378323#7040
+0.37393258071074015#7041
+0.46465556547691106#7042
+0.5507358654275436#7043
+0.6313133946598948#7044
+0.7055830491372643#7045
+0.7728027510223979#7046
+0.8323008632739383#7047
+0.8834829004217286#7048
+0.9258374684691203#7049
+0.9589413745727422#7050
+0.9824638554455033#7051
+0.9961698822340214#7052
+0.9999225088492355#7053
+0.9936842402864599#7054
+0.9775174072630763#7055
+0.9515835434306101#7056
+0.9161417713838799#7057
+0.8715462135936842#7058
+0.8182424541321317#7059
+0.756763086543882#7060
+0.6877223923475002#7061
+0.6118102033375776#7062
+0.5297850090134684#7063
+0.44246637800293476#7064
+0.35072676920333273#7065
+0.2554828144607054#7066
+0.15768615988737594#7067
+0.05831395732856547#7068
+-0.041640899015840796#7069
+-0.14117969326193175#7070
+-0.2393078666807508#7071
+-0.33504495500035825#7072
+-0.427434384880738#7073
+-0.5155530316784099#7074
+-0.5985204430027234#7075
+-0.6755076359051054#7076
+-0.7457453798026574#7077
+-0.8085318823758662#7078
+-0.863239801645478#7079
+-0.9093225141661847#7080
+-0.9463195767073986#7081
+-0.9738613268498107#7082
+-0.99167257653009#7083
+-0.9995753616290475#7084
+-0.9974907201302877#7085
+-0.9854394810825754#7086
+-0.9635420564828655#7087
+-0.932017238159432#7088
+-0.8911800116762435#7089
+-0.8414384091013278#7090
+-0.783289432085226#7091
+-0.7173140859847869#7092
+-0.6441715746496963#7093
+-0.5645927138755155#7094
+-0.47937262933382613#7095
+-0.38936281193935457#7096
+-0.2954626100342169#7097
+-0.1986102433965698#7098
+-0.09977342885872108#7099
+6.0288799573731514E-5#7100
+0.09989340407211203#7101
+0.19872841747153056#7102
+0.2955778022144536#7103
+0.3894738712626798#7104
+0.47947844613219254#7105
+0.5646922308624522#7106
+0.6442637974843658#7107
+0.7173980932071098#7108
+0.7833643843228061#7109
+0.8415035574561832#7110
+0.8912347052075476#7111
+0.9320609303874993#7112
+0.9635743108493957#7113
+0.9854599753126002#7114
+0.9974992494522351#7115
+0.9995718408207521#7116
+0.9916570407703045#7117
+0.9738339313667114#7118
+0.9462805952275968#7119
+0.909272336179741#7120
+0.8631789285142464#7121
+0.8084609223240518#7122
+0.745665041839642#7123
+0.675418722741259#7124
+0.5984238430289884#7125
+0.5154497100897922#7126
+0.4273253740323974#7127
+0.3349313440926573#7128
+0.23919079087632442#7129
+0.14106032234351765#7130
+0.041520425698197#7131
+-0.05843432931587226#7132
+-0.15780522782723821#7133
+-0.2555993886656267#7134
+-0.3508396849023918#7135
+-0.4425745069797916#7136
+-0.5298872708791288#7137
+-0.6119055763252834#7138
+-0.6878099235218842#7139
+-0.7568419013223837#7140
+-0.8183117650235371#7141
+-0.8716053280664775#7142
+-0.9161900987857895#7143
+-0.9516206008902112#7144
+-0.9775428245144819#7145
+-0.9936977633688959#7146
+-0.9999240026445323#7147
+-0.9961593318166703#7148
+-0.9824413662317869#7149
+-0.95890717126745#7150
+-0.9257918928203727#7151
+-0.8834264078063425#7152
+-0.8322340181474527#7153
+-0.7727262212792206#7154
+-0.7054975994372918#7155
+-0.6312198787882831#7156
+-0.55063521776397#7157
+-0.46454879165956#7158
+-0.3738207475882999#7159
+-0.27935761017584615#7160
+-0.1821032238658627#7161
+-0.08302932233833335#7162
+0.01687418073215605#7163
+0.11660908256663223#7164
+0.21517886499393998#7165
+0.3115986513309033#7166
+0.4049050469445867#7167
+0.4941657651730115#7168
+0.5784889424253095#7169
+0.6570320493879117#7170
+0.7290103092989471#7171
+0.7937045391782332#7172
+0.8504683356658855#7173
+0.8987345336710154#7174
+0.9380208732978393#7175
+0.967934818427143#7176
+0.98817747880743#7177
+0.9985465964675143#7178
+0.998938566611311#7179
+0.989349472802711#7180
+0.9698751260973173#7181
+0.9407101077300469#7182
+0.9021458249237525#7183
+0.8545675992445777#7184
+0.7984508165962385#7185
+0.7343561773212153#7186
+0.6629240938682737#7187
+0.5848682920029681#7188
+0.5009686794957195#7189
+0.4120635535411761#7190
+0.31904122476974855#7191
+0.22283114154142777#7192
+0.12439460320500637#7193
+0.02471515511274884#7194
+-0.0752112386396513#7195
+-0.17438614655709378#7196
+-0.271818645742533#7197
+-0.3665352228710099#7198
+-0.4575895012129941#7199
+-0.5440716965178346#7200
+-0.6251177072772582#7201
+-0.6999177485420057#7202
+-0.7677244430253657#7203
+-0.8278602886499732#7204
+-0.8797244279246147#7205
+-0.9227986515136628#7206
+-0.9566525760134608#7207
+-0.9809479442010262#7208
+-0.9954420047884096#7209
+-0.9999899379133214#7210
+-0.9945463021313241#7211
+-0.9791654884517249#7212
+-0.9540011768805893#7213
+-0.9193048009009206#7214
+-0.8754230352324109#7215
+-0.822794331972237#7216
+-0.7619445397266382#7217
+-0.6934816495054661#7218
+-0.618089719876988#7219
+-0.5365220420807936#7220
+-0.44959361339073317#7221
+-0.3581729939315602#7222
+-0.26317362831327207#7223
+-0.16554471879451196#7224
+-0.06626174116736495#7225
+0.03368330187430715#7226
+0.1332917924978703#7227
+0.23156847559120272#7228
+0.32753140302278777#7229
+0.42022174494285497#7230
+0.5087133700942921#7231
+0.5921220994100276#7232
+0.6696145404379987#7233
+0.7404164143230488#7234
+0.803820292145306#7235
+0.8591926633161057#7236
+0.9059802654063811#7237
+0.9437156121619712#7238
+0.9720216644717411#7239
+0.9906155976177484#7240
+0.9993116271663351#7241
+0.9980228652647771#7242
+0.9867621887959865#7243
+0.9656421107169549#7244
+0.9348736558664785#7245
+0.8947642524747242#7246
+0.8457146604419769#7247
+0.7882149670781883#7248
+0.7228396903125782#7249
+0.6502420383003954#7250
+0.5711473827829529#7251
+0.48634601141296413#7252
+0.39668523146155205#7253
+0.3030609038040782#7254
+0.20640849177440834#7255
+0.1076937143245037#7256
+0.007902896879877103#7257
+-0.09196688369802286#7258
+-0.19091776157422172#7259
+-0.2879610522857915#7260
+-0.38212713135018883#7261
+-0.472475122432569#7262
+-0.5581022982711118#7263
+-0.6381531004294191#7264
+-0.711827687753602#7265
+-0.7783899281206974#7266
+-0.8371747536275085#7267
+-0.8875948057292506#7268
+-0.9291463039319765#7269
+-0.9614140794007434#7270
+-0.9840757231893756#7271
+-0.9969048076440806#7272
+-0.9997731487937185#7273
+-0.9926520871216694#7274
+-0.9756127739222505#7275
+-0.9488254603805024#7276
+-0.9125577964786259#7277
+-0.8671721567258328#7278
+-0.8131220194320353#7279
+-0.7509474357024735#7280
+-0.6812696334255883#7281
+-0.6047848101693116#7282
+-0.5222571770050993#7283
+-0.43451132276352#7284
+-0.3424239750152328#7285
+-0.24691524009890903#7286
+-0.14893940972284261#7287
+-0.0494754259976481#7288
+0.050482899829713684#7289
+0.14993681720940477#7290
+0.24789261547406108#7291
+0.3433715526673036#7292
+0.4354196348098376#7293
+0.5231171478919449#7294
+0.6055878473518524#7295
+0.6820077132217451#7296
+0.7516131834628998#7297
+0.8137087832251761#7298
+0.8676740738018253#7299
+0.9129698518479584#7300
+0.949143536922132#7301
+0.9758336935205153#7302
+0.9927736424209699#7303
+0.9997941252536848#7304
+0.9968249956748588#7305
+0.9838959202457798#7306
+0.961136082014351#7307
+0.9287728897607787#7308
+0.8871297058042116#7309
+0.8366226150733376#7310
+0.7777562677233152#7311
+0.7111188368382388#7312
+0.6373761416001066#7313
+0.5572649946436438#7314
+0.4715858400680154#7315
+0.3811947556639786#7316
+0.2869948992675788#7317
+0.18992748470559684#7318
+0.0909623774981151#7319
+-0.008911595717163887#7320
+-0.10869652721381882#7321
+-0.20739539894084763#7322
+-0.3040220443974627#7323
+-0.3976110020827836#7324
+-0.48722716206801436#7325
+-0.5719751093057461#7326
+-0.6510080703211262#7327
+-0.7235363738925117#7328
+-0.7888353411852869#7329
+-0.8462525265032307#7330
+-0.8952142363102442#7331
+-0.935231261386525#7332
+-0.9659037648453803#7333
+-0.9869252771712309#7334
+-0.9980857583617049#7335
+-0.9992736965779115#7336
+-0.9904772223338747#7337
+-0.971784227092513#7338
+-0.9433814850831956#7339
+-0.9055527871153815#7340
+-0.85867610503466#7341
+-0.8032198151530112#7342
+-0.7397380183875204#7343
+-0.6688650038671767#7344
+-0.5913089113255638#7345
+-0.5078446556027223#7346
+-0.4193061839522201#7347
+-0.32657814351586195#7348
+-0.23058704222187348#7349
+-0.13229199142394524#7350
+-0.03267512277762666#7351
+0.06726822489452655#7352
+0.16653945069945214#7353
+0.2641466693636113#7354
+0.35911462182276815#7355
+0.45049441968818166#7356
+0.5373730262257255#7357
+0.6188823791171251#7358
+0.6942080638516992#7359
+0.7625974510869405#7360
+0.82336721667212#7361
+0.875910169197324#7362
+0.9197013168493114#7363
+0.9543031129561722#7364
+0.9793698278090396#7365
+0.994651003079058#7366
+0.999993954314214#7367
+0.995345296511911#7368
+0.9807514775242675#7369
+0.9563583139665331#7370
+0.9224095342656689#7371
+0.8792443434064714#7372
+0.827294033707491#7373
+0.7670776754907508#7374
+0.6991969307026712#7375
+0.624330041306784#7376
+0.5432250525142298#7377
+0.4566923385632795#7378
+0.36559650572781904#7379
+0.27084775345726186#7380
+0.1733927799645225#7381
+0.07420532313040953#7382
+-0.025723568763404207#7383
+-0.1253954392612152#7384
+-0.22381439998014888#7385
+-0.3199970811976842#7386
+-0.4129824573568625#7387
+-0.5018414493159796#7388
+-0.5856862074002571#7389
+-0.6636789825023087#7390
+-0.7350404965942983#7391
+-0.7990577290163985#7392
+-0.855091040743531#7393
+-0.9025805654470686#7394
+-0.9410518034941227#7395
+-0.9701203629910278#7396
+-0.9894958005000788#7397
+-0.9989845230543534#7398
+-0.9984917224746438#7399
+-0.9880223226614443#7400
+-0.9676809303969649#7401
+-0.9376707901487422#7402
+-0.8982917533181031#7403
+-0.8499372822240805#7404
+-0.793090518757983#7405
+-0.7283194569893225#7406
+-0.6562712679568256#7407
+-0.57766583334934#7408
+-0.4932885526859621#7409
+-0.40398249586366014#7410
+-0.31063997948154537#7411
+-0.21419365110837466#7412
+-0.11560717057633567#7413
+-0.015865581410547242#7414
+0.0840345314002315#7415
+0.18309499895138165#7416
+0.28032604179616866#7417
+0.3747561594947966#7418
+0.4654418375256672#7419
+0.5514769745705953#7420
+0.6320019359796627#7421
+0.7062121429564829#7422
+0.7733661116435763#7423
+0.8327928617839718#7424
+0.8838986209341382#7425
+0.9261727572419648#7426
+0.9591928815114351#7427
+0.9826290675758504#7428
+0.996247148811028#7429
+0.9999110578508053#7430
+0.9935841861271838#7431
+0.9773297496510405#7432
+0.9513101573786427#7433
+0.9157853884750424#7434
+0.8711103946881975#7435
+0.8177315537884366#7436
+0.7561822095093318#7437
+0.6870773425534116#7438
+0.6111074259082679#7439
+0.529031525868704#7440
+0.44166971769722985#7441
+0.34989489170312094#7442
+0.2546240316109867#7443
+0.15680905236250883#7444
+0.05742728889700527#7445
+-0.04252826905621956#7446
+-0.14205889860301116#7447
+-0.2401701225933894#7448
+-0.33588164610850085#7449
+-0.42823715124340533#7450
+-0.5163138523194657#7451
+-0.5992317160538159#7452
+-0.6761622545610236#7453
+-0.7463368033301797#7454
+-0.809054201466604#7455
+-0.8636877974597326#7456
+-0.9096917104778677#7457
+-0.9466062846290039#7458
+-0.9740626816905584#7459
+-0.9917865664189706#7460
+-0.9996008476167711#7461
+-0.9974274475692897#7462
+-0.9852880821713702#7463
+-0.963304043949328#7464
+-0.9316949901461209#7465
+-0.8907767479787866#7466
+-0.840958158997289#7467
+-0.782736994074895#7468
+-0.7166949798461515#7469
+-0.6434919862866445#7470
+-0.5638594335103286#7471
+-0.47859298366152303#7472
+-0.38854459092177623#7473
+-0.2946139890653031#7474
+-0.19773970161652513#7475
+-0.09888966443324891#7476
+9.484455884677701E-4#7477
+0.10077707905537892#7478
+0.19959878126084157#7479
+0.29642615842253006#7480
+0.3902917433947197#7481
+0.4802576622802053#7482
+0.5654250053562614#7483
+0.6449428086834523#7484
+0.7180165566560236#7485
+0.7839161205392026#7486
+0.8419830536741678#7487
+0.8916371704594106#7488
+0.9323823433734814#7489
+0.963811460117186#7490
+0.985610491345106#7491
+0.9975616283430137#7492
+0.9995454593005464#7493
+0.9915421624345439#7494
+0.973631704041753#7495
+0.9459930395020244#7496
+0.908902325215311#7497
+0.8627301593382061#7498
+0.8079378788896648#7499
+0.7450729502240094#7500
+0.6747634989280851#7501
+0.597712033798026#7502
+0.5146884276035842#7503
+0.4265222247738995#7504
+0.33409435286377454#7505
+0.23832832061674333#7506
+0.1401809905709772#7507
+0.040633018405099953#7508
+-0.0593209454491911#7509
+-0.15868219402545106#7510
+-0.25645794257236754#7511
+-0.35167124813082457#7512
+-0.4433707708250161#7513
+-0.5306402793360133#7514
+-0.6126078055822383#7515
+-0.6884543571363001#7516
+-0.7574221003266068#7517
+-0.8188219322609055#7518
+-0.8720403661145942#7519
+-0.9165456608882823#7520
+-0.9518931343880851#7521
+-0.9777296063431139#7522
+-0.993796927265996#7523
+-0.99993455779722#7524
+-0.9960811727613489#7525
+-0.9822752739079014#7526
+-0.9586548052145977#7527
+-0.9254557745967325#7528
+-0.8830098957940993#7529
+-0.8317412739969522#7530
+-0.772162168327135#7531
+-0.7048678735142673#7532
+-0.6305307719075828#7533
+-0.5498936152537572#7534
+-0.4637621033669758#7535
+-0.37299683384271926#7536
+-0.2785047032510652#7537
+-0.18122984572594025#7538
+-0.0821441994889431#7539
+0.017762204436085696#7540
+0.1174911342857932#7541
+0.21604613155912197#7542
+0.31244246730126723#7543
+0.4057169811898851#7544
+0.4949377051146552#7545
+0.5792131750945708#7546
+0.6577013384913591#7547
+0.7296179675210964#7548
+0.794244494998994#7549
+0.8509351940251821#7550
+0.8991236298744447#7551
+0.9383283196247547#7552
+0.9681575429754743#7553
+0.9883132561871131#7554
+0.9985940700358535#7555
+0.998897262028104#7556
+0.9892198027697#7557
+0.9696583862346088#7558
+0.9404084636307043#7559
+0.9017622905159063#7560
+0.8541060066772513#7561
+0.7979157779497825#7562
+0.7337530385249249#7563
+0.6622588812856302#7564
+0.5841476522182073#7565
+0.5001998129033588#7566
+0.4112541424020529#7567
+0.3181993564524092#7568
+0.22196522771581453#7569
+0.12351329579583167#7570
+0.023827259852323673#7571
+-0.07609685019538392#7572
+-0.17526062567021322#7573
+-0.2726732549068054#7574
+-0.367361423114162#7575
+-0.4583790374153017#7576
+-0.5448166798945504#7577
+-0.6258106942007409#7578
+-0.7005518149159866#7579
+-0.7682932534682305#7580
+-0.8283581597958007#7581
+-0.8801463852094901#7582
+-0.923140478879876#7583
+-0.9569108580349618#7584
+-0.9811201002092328#7585
+-0.995526314657395#7586
+-0.9999855592467439#7587
+-0.9944532786793728#7588
+-0.9789847496739821#7589
+-0.953734528659178#7590
+-0.9189549074967269#7591
+-0.8749933926646701#7592
+-0.822289233087465#7593
+-0.7613690313059284#7594
+-0.6928414818387202#7595
+-0.6173912893079209#7596
+-0.5357723270967809#7597
+-0.44880010489607236#7598
+-0.3573436204008309#7599
+-0.2623166765726389#7600
+-0.16466875122249675#7601
+-0.06537551014239087#7602
+0.03457094142478756#7603
+0.13417197157288324#7604
+0.23243239973237922#7605
+0.3283704401856845#7606
+0.42102751174548914#7607
+0.5094778155811228#7608
+0.5928375854944425#7609
+0.6702739182195506#7610
+0.7410130955169058#7611
+0.8043483149102156#7612
+0.859646751823142#7613
+0.9063558825532837#7614
+0.9440090049063705#7615
+0.9722299013303181#7616
+0.9907365979566459#7617
+0.9993441819901644#7618
+0.9979666492964995#7619
+0.9866177637269746#7620
+0.9654109195947578#7621
+0.9345580086763673#7622
+0.8943673030590836#7623
+0.8452403749881539#7624
+0.7876680844896596#7625
+0.722225674859393#7626
+0.6495670250219955#7627
+0.5704181161888862#7628
+0.48556977809397517#7629
+0.39586978728437555#7630
+0.30221439641738246#7631
+0.2055393792001831#7632
+0.10681068044830018#7633
+0.007014764684294179#7634
+-0.0928512402896644#7635
+-0.19178950636318762#7636
+-0.28881147508631094#7637
+-0.38294773501875135#7638
+-0.4732577077685739#7639
+-0.55883904594057#7640
+-0.6388366490931539#7641
+-0.7124512076193162#7642
+-0.7789471891840013#7643
+-0.8376601879200635#7644
+-0.8880035629520688#7645
+-0.9294742999180047#7646
+-0.9616580369225101#7647
+-0.984233204703965#7648
+-0.9969742396482555#7649
+-0.9997538375458441#7650
+-0.9925442255733512#7651
+-0.9754174397904251#7652
+-0.948544605379246#7653
+-0.9121942268182728#7654
+-0.866729505074249#7655
+-0.8126047086182022#7656
+-0.7503606345250428#7657
+-0.6806192050079543#7658
+-0.6040772533772201#7659
+-0.5214995615121297#7660
+-0.4337112184132438#7661
+-0.3415893761858385#7662
+-0.2460544858260183#7663
+-0.14806110037862266#7664
+-0.048588337358735884#7665
+0.05136990426687065#7666
+0.15081487478967512#7667
+0.24875295293634997#7668
+0.3442055738040776#7669
+0.43621900635758876#7670
+0.5238738827944053#7671
+0.6062943845640199#7672
+0.6826569932573459#7673
+0.7521987189304415#7674
+0.8142247236478194#7675
+0.8681152640734142#7676
+0.9133318837411375#7677
+0.9494227931338964#7678
+0.976027383815107#7679
+0.9928798315089906#7680
+0.9998117521288687#7681
+0.9967538842152956#7682
+0.9837367809736671#7683
+0.9608905049966914#7684
+0.9284433287219556#7685
+0.8867194536091866#7686
+0.836135770826432#7687
+0.7771976958113149#7688
+0.7104941183270491#7689
+0.6366915184705867#7690
+0.5565273074237976#7691
+0.4708024594846968#7692
+0.3803735089970247#7693
+0.286143992142218#7694
+0.18905541910455304#7695
+0.09007786681260743#7696
+-0.009799713748746178#7697
+-0.10957937880967696#7698
+-0.2082641629396677#7699
+-0.30486804039654375#7700
+-0.3984257771697518#7701
+-0.48800257527952967#7702
+-0.5727034129693166#7703
+-0.6516819874672904#7704
+-0.7241491709639128#7705
+-0.7893808953161512#7706
+-0.8467253866970188#7707
+-0.8956096779042066#7708
+-0.9355453332589703#7709
+-0.9661333288939775#7710
+-0.9870680396678903#7711
+-0.9981402928707507#7712
+-0.9992394582085561#7713
+-0.9903545531845869#7714
+-0.9715743528328836#7715
+-0.9430865027074515#7716
+-0.9051756439899129#7717
+-0.8582205694489098#7718
+-0.8026904386679721#7719
+-0.7391400903580423#7720
+-0.6682044985924814#7721
+-0.5905924283560221#7722
+-0.507079353799328#7723
+-0.4184997099576176#7724
+-0.32573855535162055#7725
+-0.22972272877539926#7726
+-0.13141158862949134#7727
+-0.03178742732889281#7728
+0.0681543434380497#7729
+0.16741513853418957#7730
+0.26500317690618225#7731
+0.3599433911329309#7732
+0.45128716997694385#7733
+0.5381218365942502#7734
+0.6195797676997338#7735
+0.6948470625722005#7736
+0.763171675281344#7737
+0.8238709288820886#7738
+0.8763383364969607#7739
+0.9200496611324916#7740
+0.9545681536819657#7741
+0.979548916778125#7742
+0.994742350893655#7743
+0.999996648257155#7744
+0.9952593096662085#7745
+0.9805776690420603#7746
+0.956098420484722#7747
+0.9220661525540147#7748
+0.8788209044215302#7749
+0.8267947683116299#7750
+0.7665075721787701#7751
+0.6985616857584132#7752
+0.6236360018877475#7753
+0.542479153232871#7754
+0.4559020321986561#7755
+0.3647696887598858#7756
+0.2699926871678532#7757
+0.1725180078933547#7758
+0.07331958571085657#7759
+-0.026611421535832028#7760
+-0.1262765362551009#7761
+-0.22467993756558144#7762
+-0.3208384112092187#7763
+-0.4137911735031304#7764
+-0.5026094711725734#7765
+-0.58640586114666#7766
+-0.6643430775961726#7767
+-0.7356423976169658#7768
+-0.7995914219718132#7769
+-0.855551193148098#7770
+-0.9029625796100673#7771
+-0.9413518624563137#7772
+-0.9703354686624472#7773
+-0.9896238036159622#7774
+-0.9990241446498792#7775
+-0.9984425666639266#7776
+-0.987884880593096#7777
+-0.9674565753467003#7778
+-0.9373617637980615#7779
+-0.8979011433561516#7780
+-0.8494689914964797#7781
+-0.7925492262708868#7782
+-0.7277105711583345#7783
+-0.6556008725678979#7784
+-0.5769406267715956#7785
+-0.4925157809438046#7786
+-0.40316988023689265#7787
+-0.3097956393568956#7788
+-0.2133260228532663#7789
+-0.11472492324549403#7790
+-0.014977530127669912#7791
+0.08491951352027674#7792
+0.1839680694597875#7793
+0.28117847726101386#7794
+0.3755794426626941#7795
+0.46622774242334464#7796
+0.5522176486961006#7797
+0.6326899787619682#7798
+0.7068406796995446#7799
+0.773928862216024#7800
+0.8332842033681063#7801
+0.8843136442072667#7802
+0.9265073154287307#7803
+0.9594436318170264#7804
+0.9827935045861007#7805
+0.9963236295256865#7806
+0.9998988180998523#7807
+0.993483348206165#7808
+0.97714132109913#7809
+0.951036020911645#7810
+0.9154282831739184#7811
+0.8706738886310726#7812
+0.817220008399544#7813
+0.7556007359811027#7814
+0.6864317507771306#7815
+0.6104041664235594#7816
+0.5282776254118724#7817
+0.44087270899243347#7818
+0.3490627381978821#7819
+0.2537650479080564#7820
+0.15593182114310442#7821
+0.056540575165497#7822
+-0.04341560554933505#7823
+-0.1429379918848091#7824
+-0.2410321890543877#7825
+-0.3367180722655825#7826
+-0.4290395798028944#7827
+-0.5170742656804435#7828
+-0.5999425164173386#7829
+-0.6768163398448185#7830
+-0.7469276381303027#7831
+-0.8095758823570365#7832
+-0.8641351119774621#7833
+-0.9100601892040956#7834
+-0.9468922458461004#7835
+-0.9742632681685688#7836
+-0.9918997739641114#7837
+-0.9996255450966729#7838
+-0.9973633882148972#7839
+-0.9851359060425772#7840
+-0.9630652715397107#7841
+-0.9313720071906685#7842
+-0.8903727816164261#7843
+-0.8404772455263794#7844
+-0.782183938623869#7845
+-0.7160753083622596#7846
+-0.642811890322518#7847
+-0.5631257083600311#7848
+-0.47781296046421884#7849
+-0.3877260634114115#7850
+-0.2937651356981923#7851
+-0.19686900385491865#7852
+-0.0980058220013664#7853
+0.0018366016292064157#7854
+0.10166067454339997#7855
+0.2004689876021066#7856
+0.29727428080292906#7857
+0.3911093076557798#7858
+0.4810364995900806#7859
+0.5661573338300011#7860
+0.6456213111370226#7861
+0.7186344537171913#7862
+0.7844672383847822#7863
+0.8424618857168215#7864
+0.8920389323676491#7865
+0.9327030208751224#7866
+0.9640478491086351#7867
+0.9857602299057003#7868
+0.9976232203345528#7869
+0.9995182893162105#7870
+0.9914265019478351#7871
+0.9734287086940224#7872
+0.9457047375556851#7873
+0.908531597288111#7874
+0.8622807096210473#7875
+0.807414198135553#7876
+0.7444802708779339#7877
+0.6741077428461579#7878
+0.5969997530782538#7879
+0.5139267391194702#7880
+0.42571873906499613#7881
+0.3332570980936882#7882
+0.2374656623583771#7883
+0.13930154822049173#7884
+0.03974557905975634#7885
+-0.06020751478880264#7886
+-0.15955903505155#7887
+-0.25731629417926616#7888
+-0.3525025339530001#7889
+-0.4441666849293199#7890
+-0.5313928692118094#7891
+-0.6133095516002608#7892
+-0.6890982476823034#7893
+-0.7580017018590971#7894
+-0.819331453592961#7895
+-0.8724747162774904#7896
+-0.9169004999987684#7897
+-0.9521649170110635#7898
+-0.9779156169164552#7899
+-0.9938953072335382#7900
+-0.9999443241788476#7901
+-0.996002227974605#7902
+-0.9821084067429994#7903
+-0.9584016829530904#7904
+-0.9251189263525859#7905
+-0.8825926872436216#7906
+-0.8312478737500688#7907
+-0.7715975062760166#7908
+-0.7042375915754759#7909
+-0.6298411676499076#7910
+-0.5491515789749879#7911
+-0.46297504924832533#7912
+-0.37217262586877564#7913
+-0.27765157663545714#7914
+-0.18035632462780476#7915
+-0.08125901184234507#7916
+0.018650214128785595#7917
+0.1183730933252825#7918
+0.21691322770221497#7919
+0.313286036809926#7920
+0.40652859539642616#7921
+0.4957092546382107#7922
+0.5799369508673419#7923
+0.6583701087850726#7924
+0.7302250502040435#7925
+0.7947838243016816#7926
+0.8514013811474965#7927
+0.8995120168287606#7928
+0.9386350257770081#7929
+0.9683795038191755#7930
+0.9884482539628825#7931
+0.9986407558905398#7932
+0.9988551694920795#7933
+0.9890893524176707#7934
+0.9694408814833709#7935
+0.940106077715835#7936
+0.9013780447775112#7937
+0.8536437403717337#7938
+0.7973801098892623#7939
+0.7331493209275945#7940
+0.6615931462981596#7941
+0.5834265516445285#7942
+0.49943055174204004#7943
+0.410444406856334#7944
+0.31735723713220004#7945
+0.221099138798995#7946
+0.1226318909565677#7947
+0.022939345796415475#7948
+-0.07698240172419506#7949
+-0.17613496653377583#7950
+-0.2735276489802294#7951
+-0.3681873335742909#7952
+-0.45916821203782765#7953
+-0.5455612335075115#7954
+-0.626503187470553#7955
+-0.7011853286788058#7956
+-0.7688614578639504#7957
+-0.8288553775139227#7958
+-0.8805676482149329#7959
+-0.9234815780519405#7960
+-0.957168385223473#7961
+-0.9812914822876503#7962
+-0.9956098392326427#7963
+-0.9999803917688753#7964
+-0.9943594707801187#7965
+-0.9788032386508632#7966
+-0.9534671281103374#7967
+-0.9186042892000581#7968
+-0.8745630598822943#7969
+-0.8217834855622946#7970
+-0.7607929223000569#7971
+-0.6922007676428981#7972
+-0.6166923717266009#7973
+-0.535022189483404#7974
+-0.44800624237770903#7975
+-0.35651396498934845#7976
+-0.2614595179106613#7977
+-0.1637926537560355#7978
+-0.06448922754773154#7979
+0.03545855370492522#7980
+0.13505204481000171#7981
+0.23329614052560674#7982
+0.32920921832252986#7983
+0.42183294643207214#7984
+0.5102418591802964#7985
+0.5935526039351231#7986
+0.6709327672738326#7987
+0.7416091921828252#7988
+0.80487570318693#7989
+0.8601001622213218#7990
+0.9067307847461078#7991
+0.9443016529950545#7992
+0.9724373712718963#7993
+0.9908568167800427#7994
+0.9993759485086353#7995
+0.9979096461094927#7996
+0.9864725603914919#7997
+0.9651789669345293#7998
+0.9342416242857009#7999
\ No newline at end of file
diff --git a/MPChartExample/assets/sine.txt b/MPChartExample/src/main/assets/sine.txt
similarity index 100%
rename from MPChartExample/assets/sine.txt
rename to MPChartExample/src/main/assets/sine.txt
diff --git a/MPChartExample/assets/square.txt b/MPChartExample/src/main/assets/square.txt
similarity index 100%
rename from MPChartExample/assets/square.txt
rename to MPChartExample/src/main/assets/square.txt
diff --git a/MPChartExample/assets/stacked_bars.txt b/MPChartExample/src/main/assets/stacked_bars.txt
similarity index 100%
rename from MPChartExample/assets/stacked_bars.txt
rename to MPChartExample/src/main/assets/stacked_bars.txt
diff --git a/MPChartExample/assets/three.txt b/MPChartExample/src/main/assets/three.txt
similarity index 100%
rename from MPChartExample/assets/three.txt
rename to MPChartExample/src/main/assets/three.txt
diff --git a/MPChartExample/ic_launcher-web.png b/MPChartExample/src/main/ic_launcher-web.png
similarity index 100%
rename from MPChartExample/ic_launcher-web.png
rename to MPChartExample/src/main/ic_launcher-web.png
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java
new file mode 100644
index 0000000000..69b5a96c42
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java
@@ -0,0 +1,214 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.BarChart;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+public class AnotherBarActivity extends DemoBase implements OnSeekBarChangeListener {
+
+ private BarChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_barchart);
+
+ setTitle("AnotherBarActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawBarShadow(false);
+ chart.setDrawGridBackground(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxisPosition.BOTTOM);
+ xAxis.setDrawGridLines(false);
+
+ chart.getAxisLeft().setDrawGridLines(false);
+
+ // setting data
+ seekBarX.setProgress(10);
+ seekBarY.setProgress(100);
+
+ // add a nice and smooth animation
+ chart.animateY(1500);
+
+ chart.getLegend().setEnabled(false);
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < seekBarX.getProgress(); i++) {
+ float multi = (seekBarY.getProgress() + 1);
+ float val = (float) (Math.random() * multi) + multi / 3;
+ values.add(new BarEntry(i, val));
+ }
+
+ BarDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ set1 = new BarDataSet(values, "Data Set");
+ set1.setColors(ColorTemplate.VORDIPLOM_COLORS);
+ set1.setDrawValues(false);
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1);
+
+ BarData data = new BarData(dataSets);
+ chart.setData(data);
+ chart.setFitBars(true);
+ }
+
+ chart.invalidate();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ menu.removeItem(R.id.actionToggleIcons);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ /*
+ case R.id.actionToggleIcons: { break; }
+ */
+ case R.id.actionToggleHighlight: {
+
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "AnotherBarActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivity.java
new file mode 100644
index 0000000000..0d83e3444a
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivity.java
@@ -0,0 +1,327 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.RectF;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.BarChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.Legend.LegendForm;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.components.YAxis.AxisDependency;
+import com.github.mikephil.charting.components.YAxis.YAxisLabelPosition;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.Fill;
+import com.github.mikephil.charting.utils.MPPointF;
+import com.xxmassdeveloper.mpchartexample.custom.DayAxisValueFormatter;
+import com.xxmassdeveloper.mpchartexample.custom.MyAxisValueFormatter;
+import com.xxmassdeveloper.mpchartexample.custom.XYMarkerView;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BarChartActivity extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private BarChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_barchart);
+
+ setTitle("BarChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarY = findViewById(R.id.seekBar2);
+
+ seekBarY.setOnSeekBarChangeListener(this);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+
+ chart.setDrawBarShadow(false);
+ chart.setDrawValueAboveBar(true);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawGridBackground(false);
+ // chart.setDrawYLabels(false);
+
+ IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(chart);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxisPosition.BOTTOM);
+ xAxis.setTypeface(tfLight);
+ xAxis.setDrawGridLines(false);
+ xAxis.setGranularity(1f); // only intervals of 1 day
+ xAxis.setLabelCount(7);
+ xAxis.setValueFormatter(xAxisFormatter);
+
+ IAxisValueFormatter custom = new MyAxisValueFormatter();
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setLabelCount(8, false);
+ leftAxis.setValueFormatter(custom);
+ leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
+ leftAxis.setSpaceTop(15f);
+ leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setDrawGridLines(false);
+ rightAxis.setTypeface(tfLight);
+ rightAxis.setLabelCount(8, false);
+ rightAxis.setValueFormatter(custom);
+ rightAxis.setSpaceTop(15f);
+ rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+ l.setForm(LegendForm.SQUARE);
+ l.setFormSize(9f);
+ l.setTextSize(11f);
+ l.setXEntrySpace(4f);
+
+ XYMarkerView mv = new XYMarkerView(this, xAxisFormatter);
+ mv.setChartView(chart); // For bounds control
+ chart.setMarker(mv); // Set the marker to the chart
+
+ // setting data
+ seekBarY.setProgress(50);
+ seekBarX.setProgress(12);
+
+ // chart.setDrawLegend(false);
+ }
+
+ private void setData(int count, float range) {
+
+ float start = 1f;
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = (int) start; i < start + count; i++) {
+ float val = (float) (Math.random() * (range + 1));
+
+ if (Math.random() * 100 < 25) {
+ values.add(new BarEntry(i, val, getResources().getDrawable(R.drawable.star)));
+ } else {
+ values.add(new BarEntry(i, val));
+ }
+ }
+
+ BarDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+
+ } else {
+ set1 = new BarDataSet(values, "The year 2017");
+
+ set1.setDrawIcons(false);
+
+ int startColor1 = ContextCompat.getColor(this, android.R.color.holo_orange_light);
+ int startColor2 = ContextCompat.getColor(this, android.R.color.holo_blue_light);
+ int startColor3 = ContextCompat.getColor(this, android.R.color.holo_orange_light);
+ int startColor4 = ContextCompat.getColor(this, android.R.color.holo_green_light);
+ int startColor5 = ContextCompat.getColor(this, android.R.color.holo_red_light);
+ int endColor1 = ContextCompat.getColor(this, android.R.color.holo_blue_dark);
+ int endColor2 = ContextCompat.getColor(this, android.R.color.holo_purple);
+ int endColor3 = ContextCompat.getColor(this, android.R.color.holo_green_dark);
+ int endColor4 = ContextCompat.getColor(this, android.R.color.holo_red_dark);
+ int endColor5 = ContextCompat.getColor(this, android.R.color.holo_orange_dark);
+
+ List gradientFills = new ArrayList<>();
+ gradientFills.add(new Fill(startColor1, endColor1));
+ gradientFills.add(new Fill(startColor2, endColor2));
+ gradientFills.add(new Fill(startColor3, endColor3));
+ gradientFills.add(new Fill(startColor4, endColor4));
+ gradientFills.add(new Fill(startColor5, endColor5));
+
+ set1.setFills(gradientFills);
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1);
+
+ BarData data = new BarData(dataSets);
+ data.setValueTextSize(10f);
+ data.setValueTypeface(tfLight);
+ data.setBarWidth(0.9f);
+
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawIcons(!set.isDrawIconsEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if (chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet) set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "BarChartActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ private final RectF onValueSelectedRectF = new RectF();
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+
+ if (e == null)
+ return;
+
+ RectF bounds = onValueSelectedRectF;
+ chart.getBarBounds((BarEntry) e, bounds);
+ MPPointF position = chart.getPosition(e, AxisDependency.LEFT);
+
+ Log.i("bounds", bounds.toString());
+ Log.i("position", position.toString());
+
+ Log.i("x-index",
+ "low: " + chart.getLowestVisibleX() + ", high: "
+ + chart.getHighestVisibleX());
+
+ MPPointF.recycleInstance(position);
+ }
+
+ @Override
+ public void onNothingSelected() { }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java
new file mode 100644
index 0000000000..075af0edbc
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java
@@ -0,0 +1,289 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.BarChart;
+import com.github.mikephil.charting.components.AxisBase;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.formatter.LargeValueFormatter;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.Locale;
+
+public class BarChartActivityMultiDataset extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private BarChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_barchart);
+
+ setTitle("BarChartActivityMultiDataset");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvX.setTextSize(10);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setMax(50);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+ chart.getDescription().setEnabled(false);
+
+// chart.setDrawBorders(true);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawBarShadow(false);
+
+ chart.setDrawGridBackground(false);
+
+ // create a custom MarkerView (extend MarkerView) and specify the layout
+ // to use for it
+ MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
+ mv.setChartView(chart); // For bounds control
+ chart.setMarker(mv); // Set the marker to the chart
+
+ seekBarX.setProgress(10);
+ seekBarY.setProgress(100);
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
+ l.setOrientation(Legend.LegendOrientation.VERTICAL);
+ l.setDrawInside(true);
+ l.setTypeface(tfLight);
+ l.setYOffset(0f);
+ l.setXOffset(10f);
+ l.setYEntrySpace(0f);
+ l.setTextSize(8f);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setTypeface(tfLight);
+ xAxis.setGranularity(1f);
+ xAxis.setCenterAxisLabels(true);
+ xAxis.setValueFormatter(new IAxisValueFormatter() {
+ @Override
+ public String getFormattedValue(float value, AxisBase axis) {
+ return String.valueOf((int) value);
+ }
+ });
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setValueFormatter(new LargeValueFormatter());
+ leftAxis.setDrawGridLines(false);
+ leftAxis.setSpaceTop(35f);
+ leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ chart.getAxisRight().setEnabled(false);
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ float groupSpace = 0.08f;
+ float barSpace = 0.03f; // x4 DataSet
+ float barWidth = 0.2f; // x4 DataSet
+ // (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group"
+
+ int groupCount = seekBarX.getProgress() + 1;
+ int startYear = 1980;
+ int endYear = startYear + groupCount;
+
+ tvX.setText(String.format(Locale.ENGLISH, "%d-%d", startYear, endYear));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ ArrayList values1 = new ArrayList<>();
+ ArrayList values2 = new ArrayList<>();
+ ArrayList values3 = new ArrayList<>();
+ ArrayList values4 = new ArrayList<>();
+
+ float randomMultiplier = seekBarY.getProgress() * 100000f;
+
+ for (int i = startYear; i < endYear; i++) {
+ values1.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
+ values2.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
+ values3.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
+ values4.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
+ }
+
+ BarDataSet set1, set2, set3, set4;
+
+ if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {
+
+ set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set2 = (BarDataSet) chart.getData().getDataSetByIndex(1);
+ set3 = (BarDataSet) chart.getData().getDataSetByIndex(2);
+ set4 = (BarDataSet) chart.getData().getDataSetByIndex(3);
+ set1.setValues(values1);
+ set2.setValues(values2);
+ set3.setValues(values3);
+ set4.setValues(values4);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+
+ } else {
+ // create 4 DataSets
+ set1 = new BarDataSet(values1, "Company A");
+ set1.setColor(Color.rgb(104, 241, 175));
+ set2 = new BarDataSet(values2, "Company B");
+ set2.setColor(Color.rgb(164, 228, 251));
+ set3 = new BarDataSet(values3, "Company C");
+ set3.setColor(Color.rgb(242, 247, 158));
+ set4 = new BarDataSet(values4, "Company D");
+ set4.setColor(Color.rgb(255, 102, 0));
+
+ BarData data = new BarData(set1, set2, set3, set4);
+ data.setValueFormatter(new LargeValueFormatter());
+ data.setValueTypeface(tfLight);
+
+ chart.setData(data);
+ }
+
+ // specify the width each bar should have
+ chart.getBarData().setBarWidth(barWidth);
+
+ // restrict the x-axis range
+ chart.getXAxis().setAxisMinimum(startYear);
+
+ // barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters
+ chart.getXAxis().setAxisMaximum(startYear + chart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);
+ chart.groupBars(startYear, groupSpace, barSpace);
+ chart.invalidate();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet) set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if (chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "BarChartActivityMultiDataset");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("Activity", "Selected: " + e.toString() + ", dataSet: " + h.getDataSetIndex());
+ }
+
+ @Override
+ public void onNothingSelected() {
+ Log.i("Activity", "Nothing selected.");
+ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java
new file mode 100644
index 0000000000..95443e8214
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java
@@ -0,0 +1,239 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.BarChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.Legend.LegendForm;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.utils.FileUtils;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BarChartActivitySinus extends DemoBase implements OnSeekBarChangeListener {
+
+ private BarChart chart;
+ private SeekBar seekBarX;
+ private TextView tvX;
+
+ private List data;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_barchart_sinus);
+
+ setTitle("BarChartActivitySinus");
+
+ data = FileUtils.loadBarEntriesFromAssets(getAssets(), "othersine.txt");
+
+ tvX = findViewById(R.id.tvValueCount);
+
+ seekBarX = findViewById(R.id.seekbarValues);
+
+ chart = findViewById(R.id.chart1);
+
+ chart.setDrawBarShadow(false);
+ chart.setDrawValueAboveBar(true);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ // draw shadows for each bar that show the maximum value
+ // chart.setDrawBarShadow(true);
+
+ // chart.setDrawXLabels(false);
+
+ chart.setDrawGridBackground(false);
+ // chart.setDrawYLabels(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setEnabled(false);
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setLabelCount(6, false);
+ leftAxis.setAxisMinimum(-2.5f);
+ leftAxis.setAxisMaximum(2.5f);
+ leftAxis.setGranularityEnabled(true);
+ leftAxis.setGranularity(0.1f);
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setDrawGridLines(false);
+ rightAxis.setTypeface(tfLight);
+ rightAxis.setLabelCount(6, false);
+ rightAxis.setAxisMinimum(-2.5f);
+ rightAxis.setAxisMaximum(2.5f);
+ rightAxis.setGranularity(0.1f);
+
+ seekBarX.setOnSeekBarChangeListener(this);
+ seekBarX.setProgress(150); // set data
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+ l.setForm(LegendForm.SQUARE);
+ l.setFormSize(9f);
+ l.setTextSize(11f);
+ l.setXEntrySpace(4f);
+
+ chart.animateXY(1500, 1500);
+ }
+
+ private void setData(int count) {
+
+ ArrayList entries = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ entries.add(data.get(i));
+ }
+
+ BarDataSet set;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set.setValues(entries);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ set = new BarDataSet(entries, "Sinus Function");
+ set.setColor(Color.rgb(240, 120, 124));
+ }
+
+ BarData data = new BarData(set);
+ data.setValueTextSize(10f);
+ data.setValueTypeface(tfLight);
+ data.setDrawValues(false);
+ data.setBarWidth(0.8f);
+
+ chart.setData(data);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivitySinus.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if (chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet) set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+
+ setData(seekBarX.getProgress());
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "BarChartActivitySinus");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java
new file mode 100644
index 0000000000..4fec7dd6ab
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java
@@ -0,0 +1,200 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+
+import com.github.mikephil.charting.charts.BarChart;
+import com.github.mikephil.charting.components.AxisBase;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.formatter.IValueFormatter;
+import com.github.mikephil.charting.utils.ViewPortHandler;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BarChartPositiveNegative extends DemoBase {
+
+ private BarChart chart;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_barchart_noseekbar);
+
+ setTitle("BarChartPositiveNegative");
+
+ chart = findViewById(R.id.chart1);
+ chart.setBackgroundColor(Color.WHITE);
+ chart.setExtraTopOffset(-30f);
+ chart.setExtraBottomOffset(10f);
+ chart.setExtraLeftOffset(70f);
+ chart.setExtraRightOffset(70f);
+
+ chart.setDrawBarShadow(false);
+ chart.setDrawValueAboveBar(true);
+
+ chart.getDescription().setEnabled(false);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawGridBackground(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxisPosition.BOTTOM);
+ xAxis.setTypeface(tfRegular);
+ xAxis.setDrawGridLines(false);
+ xAxis.setDrawAxisLine(false);
+ xAxis.setTextColor(Color.LTGRAY);
+ xAxis.setTextSize(13f);
+ xAxis.setLabelCount(5);
+ xAxis.setCenterAxisLabels(true);
+ xAxis.setGranularity(1f);
+
+ YAxis left = chart.getAxisLeft();
+ left.setDrawLabels(false);
+ left.setSpaceTop(25f);
+ left.setSpaceBottom(25f);
+ left.setDrawAxisLine(false);
+ left.setDrawGridLines(false);
+ left.setDrawZeroLine(true); // draw a zero line
+ left.setZeroLineColor(Color.GRAY);
+ left.setZeroLineWidth(0.7f);
+ chart.getAxisRight().setEnabled(false);
+ chart.getLegend().setEnabled(false);
+
+ // THIS IS THE ORIGINAL DATA YOU WANT TO PLOT
+ final List data = new ArrayList<>();
+ data.add(new Data(0f, -224.1f, "12-29"));
+ data.add(new Data(1f, 238.5f, "12-30"));
+ data.add(new Data(2f, 1280.1f, "12-31"));
+ data.add(new Data(3f, -442.3f, "01-01"));
+ data.add(new Data(4f, -2280.1f, "01-02"));
+
+ xAxis.setValueFormatter(new IAxisValueFormatter() {
+ @Override
+ public String getFormattedValue(float value, AxisBase axis) {
+ return data.get(Math.min(Math.max((int) value, 0), data.size()-1)).xAxisValue;
+ }
+ });
+
+ setData(data);
+ }
+
+ private void setData(List dataList) {
+
+ ArrayList values = new ArrayList<>();
+ List colors = new ArrayList<>();
+
+ int green = Color.rgb(110, 190, 102);
+ int red = Color.rgb(211, 74, 88);
+
+ for (int i = 0; i < dataList.size(); i++) {
+
+ Data d = dataList.get(i);
+ BarEntry entry = new BarEntry(d.xValue, d.yValue);
+ values.add(entry);
+
+ // specific colors
+ if (d.yValue >= 0)
+ colors.add(red);
+ else
+ colors.add(green);
+ }
+
+ BarDataSet set;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ set = new BarDataSet(values, "Values");
+ set.setColors(colors);
+ set.setValueTextColors(colors);
+
+ BarData data = new BarData(set);
+ data.setValueTextSize(13f);
+ data.setValueTypeface(tfRegular);
+ data.setValueFormatter(new ValueFormatter());
+ data.setBarWidth(0.8f);
+
+ chart.setData(data);
+ chart.invalidate();
+ }
+ }
+
+ /**
+ * Demo class representing data.
+ */
+ private class Data {
+
+ final String xAxisValue;
+ final float yValue;
+ final float xValue;
+
+ Data(float xValue, float yValue, String xAxisValue) {
+ this.xAxisValue = xAxisValue;
+ this.yValue = yValue;
+ this.xValue = xValue;
+ }
+ }
+
+ private class ValueFormatter implements IValueFormatter
+ {
+
+ private final DecimalFormat mFormat;
+
+ ValueFormatter() {
+ mFormat = new DecimalFormat("######.0");
+ }
+
+ @Override
+ public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
+ return mFormat.format(value);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.only_github, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java"));
+ startActivity(i);
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BubbleChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BubbleChartActivity.java
new file mode 100644
index 0000000000..6288dda2be
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/BubbleChartActivity.java
@@ -0,0 +1,248 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.BubbleChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BubbleData;
+import com.github.mikephil.charting.data.BubbleDataSet;
+import com.github.mikephil.charting.data.BubbleEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.IBubbleDataSet;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.github.mikephil.charting.utils.MPPointF;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+public class BubbleChartActivity extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private BubbleChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_bubblechart);
+
+ setTitle("BubbleChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.getDescription().setEnabled(false);
+
+ chart.setOnChartValueSelectedListener(this);
+
+ chart.setDrawGridBackground(false);
+
+ chart.setTouchEnabled(true);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+
+ chart.setMaxVisibleValueCount(200);
+ chart.setPinchZoom(true);
+
+ seekBarX.setProgress(10);
+ seekBarY.setProgress(50);
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
+ l.setOrientation(Legend.LegendOrientation.VERTICAL);
+ l.setDrawInside(false);
+ l.setTypeface(tfLight);
+
+ YAxis yl = chart.getAxisLeft();
+ yl.setTypeface(tfLight);
+ yl.setSpaceTop(30f);
+ yl.setSpaceBottom(30f);
+ yl.setDrawZeroLine(false);
+
+ chart.getAxisRight().setEnabled(false);
+
+ XAxis xl = chart.getXAxis();
+ xl.setPosition(XAxis.XAxisPosition.BOTTOM);
+ xl.setTypeface(tfLight);
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ int count = seekBarX.getProgress();
+ int range = seekBarY.getProgress();
+
+ tvX.setText(String.valueOf(count));
+ tvY.setText(String.valueOf(range));
+
+ ArrayList values1 = new ArrayList<>();
+ ArrayList values2 = new ArrayList<>();
+ ArrayList values3 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ values1.add(new BubbleEntry(i, (float) (Math.random() * range), (float) (Math.random() * range), getResources().getDrawable(R.drawable.star)));
+ values2.add(new BubbleEntry(i, (float) (Math.random() * range), (float) (Math.random() * range), getResources().getDrawable(R.drawable.star)));
+ values3.add(new BubbleEntry(i, (float) (Math.random() * range), (float) (Math.random() * range)));
+ }
+
+ // create a dataset and give it a type
+ BubbleDataSet set1 = new BubbleDataSet(values1, "DS 1");
+ set1.setDrawIcons(false);
+ set1.setColor(ColorTemplate.COLORFUL_COLORS[0], 130);
+ set1.setDrawValues(true);
+
+ BubbleDataSet set2 = new BubbleDataSet(values2, "DS 2");
+ set2.setDrawIcons(false);
+ set2.setIconsOffset(new MPPointF(0, 15));
+ set2.setColor(ColorTemplate.COLORFUL_COLORS[1], 130);
+ set2.setDrawValues(true);
+
+ BubbleDataSet set3 = new BubbleDataSet(values3, "DS 3");
+ set3.setColor(ColorTemplate.COLORFUL_COLORS[2], 130);
+ set3.setDrawValues(true);
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1); // add the data sets
+ dataSets.add(set2);
+ dataSets.add(set3);
+
+ // create a data object with the data sets
+ BubbleData data = new BubbleData(dataSets);
+ data.setDrawValues(false);
+ data.setValueTypeface(tfLight);
+ data.setValueTextSize(8f);
+ data.setValueTextColor(Color.WHITE);
+ data.setHighlightCircleWidth(1.5f);
+
+ chart.setData(data);
+ chart.invalidate();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bubble, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BubbleChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawIcons(!set.isDrawIconsEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "BubbleChartActivity");
+ }
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("VAL SELECTED",
+ "Value: " + e.getY() + ", xIndex: " + e.getX()
+ + ", DataSet index: " + h.getDataSetIndex());
+ }
+
+ @Override
+ public void onNothingSelected() {}
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java
new file mode 100644
index 0000000000..ecf7167a62
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java
@@ -0,0 +1,238 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.CandleStickChart;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.components.YAxis.AxisDependency;
+import com.github.mikephil.charting.data.CandleData;
+import com.github.mikephil.charting.data.CandleDataSet;
+import com.github.mikephil.charting.data.CandleEntry;
+import com.github.mikephil.charting.interfaces.datasets.ICandleDataSet;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+public class CandleStickChartActivity extends DemoBase implements OnSeekBarChangeListener {
+
+ private CandleStickChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_candlechart);
+
+ setTitle("CandleStickChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setBackgroundColor(Color.WHITE);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawGridBackground(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxisPosition.BOTTOM);
+ xAxis.setDrawGridLines(false);
+
+ YAxis leftAxis = chart.getAxisLeft();
+// leftAxis.setEnabled(false);
+ leftAxis.setLabelCount(7, false);
+ leftAxis.setDrawGridLines(false);
+ leftAxis.setDrawAxisLine(false);
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setEnabled(false);
+// rightAxis.setStartAtZero(false);
+
+ // setting data
+ seekBarX.setProgress(40);
+ seekBarY.setProgress(100);
+
+ chart.getLegend().setEnabled(false);
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ progress = (seekBarX.getProgress());
+
+ tvX.setText(String.valueOf(progress));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ chart.resetTracking();
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < progress; i++) {
+ float multi = (seekBarY.getProgress() + 1);
+ float val = (float) (Math.random() * 40) + multi;
+
+ float high = (float) (Math.random() * 9) + 8f;
+ float low = (float) (Math.random() * 9) + 8f;
+
+ float open = (float) (Math.random() * 6) + 1f;
+ float close = (float) (Math.random() * 6) + 1f;
+
+ boolean even = i % 2 == 0;
+
+ values.add(new CandleEntry(
+ i, val + high,
+ val - low,
+ even ? val + open : val - open,
+ even ? val - close : val + close,
+ getResources().getDrawable(R.drawable.star)
+ ));
+ }
+
+ CandleDataSet set1 = new CandleDataSet(values, "Data Set");
+
+ set1.setDrawIcons(false);
+ set1.setAxisDependency(AxisDependency.LEFT);
+// set1.setColor(Color.rgb(80, 80, 80));
+ set1.setShadowColor(Color.DKGRAY);
+ set1.setShadowWidth(0.7f);
+ set1.setDecreasingColor(Color.RED);
+ set1.setDecreasingPaintStyle(Paint.Style.FILL);
+ set1.setIncreasingColor(Color.rgb(122, 242, 84));
+ set1.setIncreasingPaintStyle(Paint.Style.STROKE);
+ set1.setNeutralColor(Color.BLUE);
+ //set1.setHighlightLineWidth(1f);
+
+ CandleData data = new CandleData(set1);
+
+ chart.setData(data);
+ chart.invalidate();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.candle, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CandleStickChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawIcons(!set.isDrawIconsEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleMakeShadowSameColorAsCandle: {
+ for (ICandleDataSet set : chart.getData().getDataSets()) {
+ ((CandleDataSet) set).setShadowColorSameAsCandle(!set.getShadowColorSameAsCandle());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "CandleStickChartActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java
new file mode 100644
index 0000000000..0308b9a891
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java
@@ -0,0 +1,282 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+
+import com.github.mikephil.charting.charts.CombinedChart;
+import com.github.mikephil.charting.charts.CombinedChart.DrawOrder;
+import com.github.mikephil.charting.components.AxisBase;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.BubbleData;
+import com.github.mikephil.charting.data.BubbleDataSet;
+import com.github.mikephil.charting.data.BubbleEntry;
+import com.github.mikephil.charting.data.CandleData;
+import com.github.mikephil.charting.data.CandleDataSet;
+import com.github.mikephil.charting.data.CandleEntry;
+import com.github.mikephil.charting.data.CombinedData;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.data.ScatterData;
+import com.github.mikephil.charting.data.ScatterDataSet;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+public class CombinedChartActivity extends DemoBase {
+
+ private CombinedChart chart;
+ private final int count = 12;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_combined);
+
+ setTitle("CombinedChartActivity");
+
+ chart = findViewById(R.id.chart1);
+ chart.getDescription().setEnabled(false);
+ chart.setBackgroundColor(Color.WHITE);
+ chart.setDrawGridBackground(false);
+ chart.setDrawBarShadow(false);
+ chart.setHighlightFullBarEnabled(false);
+
+ // draw bars behind lines
+ chart.setDrawOrder(new DrawOrder[]{
+ DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.CANDLE, DrawOrder.LINE, DrawOrder.SCATTER
+ });
+
+ Legend l = chart.getLegend();
+ l.setWordWrapEnabled(true);
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setDrawGridLines(false);
+ rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setDrawGridLines(false);
+ leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxisPosition.BOTH_SIDED);
+ xAxis.setAxisMinimum(0f);
+ xAxis.setGranularity(1f);
+ xAxis.setValueFormatter(new IAxisValueFormatter() {
+ @Override
+ public String getFormattedValue(float value, AxisBase axis) {
+ return months[(int) value % months.length];
+ }
+ });
+
+ CombinedData data = new CombinedData();
+
+ data.setData(generateLineData());
+ data.setData(generateBarData());
+ data.setData(generateBubbleData());
+ data.setData(generateScatterData());
+ data.setData(generateCandleData());
+ data.setValueTypeface(tfLight);
+
+ xAxis.setAxisMaximum(data.getXMax() + 0.25f);
+
+ chart.setData(data);
+ chart.invalidate();
+ }
+
+ private LineData generateLineData() {
+
+ LineData d = new LineData();
+
+ ArrayList entries = new ArrayList<>();
+
+ for (int index = 0; index < count; index++)
+ entries.add(new Entry(index + 0.5f, getRandom(15, 5)));
+
+ LineDataSet set = new LineDataSet(entries, "Line DataSet");
+ set.setColor(Color.rgb(240, 238, 70));
+ set.setLineWidth(2.5f);
+ set.setCircleColor(Color.rgb(240, 238, 70));
+ set.setCircleRadius(5f);
+ set.setFillColor(Color.rgb(240, 238, 70));
+ set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
+ set.setDrawValues(true);
+ set.setValueTextSize(10f);
+ set.setValueTextColor(Color.rgb(240, 238, 70));
+
+ set.setAxisDependency(YAxis.AxisDependency.LEFT);
+ d.addDataSet(set);
+
+ return d;
+ }
+
+ private BarData generateBarData() {
+
+ ArrayList entries1 = new ArrayList<>();
+ ArrayList entries2 = new ArrayList<>();
+
+ for (int index = 0; index < count; index++) {
+ entries1.add(new BarEntry(0, getRandom(25, 25)));
+
+ // stacked
+ entries2.add(new BarEntry(0, new float[]{getRandom(13, 12), getRandom(13, 12)}));
+ }
+
+ BarDataSet set1 = new BarDataSet(entries1, "Bar 1");
+ set1.setColor(Color.rgb(60, 220, 78));
+ set1.setValueTextColor(Color.rgb(60, 220, 78));
+ set1.setValueTextSize(10f);
+ set1.setAxisDependency(YAxis.AxisDependency.LEFT);
+
+ BarDataSet set2 = new BarDataSet(entries2, "");
+ set2.setStackLabels(new String[]{"Stack 1", "Stack 2"});
+ set2.setColors(Color.rgb(61, 165, 255), Color.rgb(23, 197, 255));
+ set2.setValueTextColor(Color.rgb(61, 165, 255));
+ set2.setValueTextSize(10f);
+ set2.setAxisDependency(YAxis.AxisDependency.LEFT);
+
+ float groupSpace = 0.06f;
+ float barSpace = 0.02f; // x2 dataset
+ float barWidth = 0.45f; // x2 dataset
+ // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
+
+ BarData d = new BarData(set1, set2);
+ d.setBarWidth(barWidth);
+
+ // make this BarData object grouped
+ d.groupBars(0, groupSpace, barSpace); // start at x = 0
+
+ return d;
+ }
+
+ private ScatterData generateScatterData() {
+
+ ScatterData d = new ScatterData();
+
+ ArrayList entries = new ArrayList<>();
+
+ for (float index = 0; index < count; index += 0.5f)
+ entries.add(new Entry(index + 0.25f, getRandom(10, 55)));
+
+ ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet");
+ set.setColors(ColorTemplate.MATERIAL_COLORS);
+ set.setScatterShapeSize(7.5f);
+ set.setDrawValues(false);
+ set.setValueTextSize(10f);
+ d.addDataSet(set);
+
+ return d;
+ }
+
+ private CandleData generateCandleData() {
+
+ CandleData d = new CandleData();
+
+ ArrayList entries = new ArrayList<>();
+
+ for (int index = 0; index < count; index += 2)
+ entries.add(new CandleEntry(index + 1f, 90, 70, 85, 75f));
+
+ CandleDataSet set = new CandleDataSet(entries, "Candle DataSet");
+ set.setDecreasingColor(Color.rgb(142, 150, 175));
+ set.setShadowColor(Color.DKGRAY);
+ set.setBarSpace(0.3f);
+ set.setValueTextSize(10f);
+ set.setDrawValues(false);
+ d.addDataSet(set);
+
+ return d;
+ }
+
+ private BubbleData generateBubbleData() {
+
+ BubbleData bd = new BubbleData();
+
+ ArrayList entries = new ArrayList<>();
+
+ for (int index = 0; index < count; index++) {
+ float y = getRandom(10, 105);
+ float size = getRandom(100, 105);
+ entries.add(new BubbleEntry(index + 0.5f, y, size));
+ }
+
+ BubbleDataSet set = new BubbleDataSet(entries, "Bubble DataSet");
+ set.setColors(ColorTemplate.VORDIPLOM_COLORS);
+ set.setValueTextSize(10f);
+ set.setValueTextColor(Color.WHITE);
+ set.setHighlightCircleWidth(1.5f);
+ set.setDrawValues(true);
+ bd.addDataSet(set);
+
+ return bd;
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.combined, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleLineValues: {
+ for (IDataSet set : chart.getData().getDataSets()) {
+ if (set instanceof LineDataSet)
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleBarValues: {
+ for (IDataSet set : chart.getData().getDataSets()) {
+ if (set instanceof BarDataSet)
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionRemoveDataSet: {
+ int rnd = (int) getRandom(chart.getData().getDataSetCount(), 0);
+ chart.getData().removeDataSet(chart.getData().getDataSetByIndex(rnd));
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ chart.invalidate();
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java
new file mode 100644
index 0000000000..996e088f43
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java
@@ -0,0 +1,320 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.formatter.IFillFormatter;
+import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
+import com.github.mikephil.charting.interfaces.datasets.IDataSet;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CubicLineChartActivity extends DemoBase implements OnSeekBarChangeListener {
+
+ private LineChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart);
+
+ setTitle("CubicLineChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarY = findViewById(R.id.seekBar2);
+
+ chart = findViewById(R.id.chart1);
+ chart.setViewPortOffsets(0, 0, 0, 0);
+ chart.setBackgroundColor(Color.rgb(104, 241, 175));
+
+ // no description text
+ chart.getDescription().setEnabled(false);
+
+ // enable touch gestures
+ chart.setTouchEnabled(true);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+
+ // if disabled, scaling can be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ chart.setDrawGridBackground(false);
+ chart.setMaxHighlightDistance(300);
+
+ XAxis x = chart.getXAxis();
+ x.setEnabled(false);
+
+ YAxis y = chart.getAxisLeft();
+ y.setTypeface(tfLight);
+ y.setLabelCount(6, false);
+ y.setTextColor(Color.WHITE);
+ y.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
+ y.setDrawGridLines(false);
+ y.setAxisLineColor(Color.WHITE);
+
+ chart.getAxisRight().setEnabled(false);
+
+ // add data
+ seekBarY.setOnSeekBarChangeListener(this);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ // lower max, as cubic runs significantly slower than linear
+ seekBarX.setMax(700);
+
+ seekBarX.setProgress(45);
+ seekBarY.setProgress(100);
+
+ chart.getLegend().setEnabled(false);
+
+ chart.animateXY(2000, 2000);
+
+ // don't forget to refresh the drawing
+ chart.invalidate();
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * (range + 1)) + 20;
+ values.add(new Entry(i, val));
+ }
+
+ LineDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (LineDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ // create a dataset and give it a type
+ set1 = new LineDataSet(values, "DataSet 1");
+
+ set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
+ set1.setCubicIntensity(0.2f);
+ set1.setDrawFilled(true);
+ set1.setDrawCircles(false);
+ set1.setLineWidth(1.8f);
+ set1.setCircleRadius(4f);
+ set1.setCircleColor(Color.WHITE);
+ set1.setHighLightColor(Color.rgb(244, 117, 117));
+ set1.setColor(Color.WHITE);
+ set1.setFillColor(Color.WHITE);
+ set1.setFillAlpha(100);
+ set1.setDrawHorizontalHighlightIndicator(false);
+ set1.setFillFormatter(new IFillFormatter() {
+ @Override
+ public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
+ return chart.getAxisLeft().getAxisMinimum();
+ }
+ });
+
+ // create a data object with the data sets
+ LineData data = new LineData(set1);
+ data.setValueTypeface(tfLight);
+ data.setValueTextSize(9f);
+ data.setDrawValues(false);
+
+ // set data
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.line, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CubicLineChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ for (IDataSet set : chart.getData().getDataSets())
+ set.setDrawValues(!set.isDrawValuesEnabled());
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionToggleFilled: {
+
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+
+ if (set.isDrawFilledEnabled())
+ set.setDrawFilled(false);
+ else
+ set.setDrawFilled(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCircles: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawCirclesEnabled())
+ set.setDrawCircles(false);
+ else
+ set.setDrawCircles(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.CUBIC_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.CUBIC_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleStepped: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.STEPPED
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.STEPPED);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHorizontalCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.HORIZONTAL_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.HORIZONTAL_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+
+ // redraw
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "CubicLineChartActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java
new file mode 100644
index 0000000000..7a32e5329c
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DrawChartActivity.java
@@ -0,0 +1,184 @@
+// TODO: Finish and add to main activity list
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+
+import com.github.mikephil.charting.charts.Chart;
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.DataSet;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.listener.OnDrawListener;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This Activity demonstrates drawing into the Chart with the finger. Both line,
+ * bar and scatter charts can be used for drawing.
+ *
+ * @author Philipp Jahoda
+ */
+public class DrawChartActivity extends DemoBase implements OnChartValueSelectedListener,
+ OnDrawListener {
+
+ private LineChart chart;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_draw_chart);
+
+ setTitle("DrawChartActivity");
+
+ chart = findViewById(R.id.chart1);
+
+ // listener for selecting and drawing
+ chart.setOnChartValueSelectedListener(this);
+ chart.setOnDrawListener(this);
+
+ // if disabled, drawn data sets with the finger will not be automatically
+ // finished
+ // chart.setAutoFinish(true);
+ chart.setDrawGridBackground(false);
+
+ // add dummy-data to the chart
+ initWithDummyData();
+
+ XAxis xl = chart.getXAxis();
+ xl.setTypeface(tfRegular);
+ xl.setAvoidFirstLastClipping(true);
+
+ YAxis yl = chart.getAxisLeft();
+ yl.setTypeface(tfRegular);
+
+ chart.getLegend().setEnabled(false);
+
+ // chart.setYRange(-40f, 40f, true);
+ // call this to reset the changed y-range
+ // chart.resetYRange(true);
+ }
+
+ private void initWithDummyData() {
+
+ ArrayList values = new ArrayList<>();
+
+ // create a dataset and give it a type (0)
+ LineDataSet set1 = new LineDataSet(values, "DataSet");
+ set1.setLineWidth(3f);
+ set1.setCircleRadius(5f);
+
+ // create a data object with the data sets
+ LineData data = new LineData(set1);
+
+ chart.setData(data);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.draw, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "DrawChartActivity");
+ }
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("VAL SELECTED",
+ "Value: " + e.getY() + ", xIndex: " + e.getX()
+ + ", DataSet index: " + h.getDataSetIndex());
+ }
+
+ @Override
+ public void onNothingSelected() {
+ }
+
+ /** callback for each new entry drawn with the finger */
+ @Override
+ public void onEntryAdded(Entry entry) {
+ Log.i(Chart.LOG_TAG, entry.toString());
+ }
+
+ /** callback when a DataSet has been drawn (when lifting the finger) */
+ @Override
+ public void onDrawFinished(DataSet> dataSet) {
+ Log.i(Chart.LOG_TAG, "DataSet drawn. " + dataSet.toSimpleString());
+
+ // prepare the legend again
+ chart.getLegendRenderer().computeLegend(chart.getData());
+ }
+
+ @Override
+ public void onEntryMoved(Entry entry) {
+ Log.i(Chart.LOG_TAG, "Point moved " + entry.toString());
+ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java
new file mode 100644
index 0000000000..84de449283
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java
@@ -0,0 +1,242 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.Toast;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.YAxis.AxisDependency;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+public class DynamicalAddingActivity extends DemoBase implements OnChartValueSelectedListener {
+
+ private LineChart chart;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart_noseekbar);
+
+ setTitle("DynamicalAddingActivity");
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+ chart.setDrawGridBackground(false);
+ chart.getDescription().setEnabled(false);
+ chart.setNoDataText("No chart data available. Use the menu to add entries and data sets!");
+
+// chart.getXAxis().setDrawLabels(false);
+// chart.getXAxis().setDrawGridLines(false);
+
+ chart.invalidate();
+ }
+
+ private final int[] colors = ColorTemplate.VORDIPLOM_COLORS;
+
+ private void addEntry() {
+
+ LineData data = chart.getData();
+
+ if (data == null) {
+ data = new LineData();
+ chart.setData(data);
+ }
+
+ ILineDataSet set = data.getDataSetByIndex(0);
+ // set.addEntry(...); // can be called as well
+
+ if (set == null) {
+ set = createSet();
+ data.addDataSet(set);
+ }
+
+ // choose a random dataSet
+ int randomDataSetIndex = (int) (Math.random() * data.getDataSetCount());
+ ILineDataSet randomSet = data.getDataSetByIndex(randomDataSetIndex);
+ float value = (float) (Math.random() * 50) + 50f * (randomDataSetIndex + 1);
+
+ data.addEntry(new Entry(randomSet.getEntryCount(), value), randomDataSetIndex);
+ data.notifyDataChanged();
+
+ // let the chart know it's data has changed
+ chart.notifyDataSetChanged();
+
+ chart.setVisibleXRangeMaximum(6);
+ //chart.setVisibleYRangeMaximum(15, AxisDependency.LEFT);
+//
+// // this automatically refreshes the chart (calls invalidate())
+ chart.moveViewTo(data.getEntryCount() - 7, 50f, AxisDependency.LEFT);
+
+ }
+
+ private void removeLastEntry() {
+
+ LineData data = chart.getData();
+
+ if (data != null) {
+
+ ILineDataSet set = data.getDataSetByIndex(0);
+
+ if (set != null) {
+
+ Entry e = set.getEntryForXValue(set.getEntryCount() - 1, Float.NaN);
+
+ data.removeEntry(e, 0);
+ // or remove by index
+ // mData.removeEntryByXValue(xIndex, dataSetIndex);
+ data.notifyDataChanged();
+ chart.notifyDataSetChanged();
+ chart.invalidate();
+ }
+ }
+ }
+
+ private void addDataSet() {
+
+ LineData data = chart.getData();
+
+ if (data == null) {
+ chart.setData(new LineData());
+ } else {
+ int count = (data.getDataSetCount() + 1);
+ int amount = data.getDataSetByIndex(0).getEntryCount();
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < amount; i++) {
+ values.add(new Entry(i, (float) (Math.random() * 50f) + 50f * count));
+ }
+
+ LineDataSet set = new LineDataSet(values, "DataSet " + count);
+ set.setLineWidth(2.5f);
+ set.setCircleRadius(4.5f);
+
+ int color = colors[count % colors.length];
+
+ set.setColor(color);
+ set.setCircleColor(color);
+ set.setHighLightColor(color);
+ set.setValueTextSize(10f);
+ set.setValueTextColor(color);
+
+ data.addDataSet(set);
+ data.notifyDataChanged();
+ chart.notifyDataSetChanged();
+ chart.invalidate();
+ }
+ }
+
+ private void removeDataSet() {
+
+ LineData data = chart.getData();
+
+ if (data != null) {
+
+ data.removeDataSet(data.getDataSetByIndex(data.getDataSetCount() - 1));
+
+ chart.notifyDataSetChanged();
+ chart.invalidate();
+ }
+ }
+
+ private LineDataSet createSet() {
+
+ LineDataSet set = new LineDataSet(null, "DataSet 1");
+ set.setLineWidth(2.5f);
+ set.setCircleRadius(4.5f);
+ set.setColor(Color.rgb(240, 99, 99));
+ set.setCircleColor(Color.rgb(240, 99, 99));
+ set.setHighLightColor(Color.rgb(190, 190, 190));
+ set.setAxisDependency(AxisDependency.LEFT);
+ set.setValueTextSize(10f);
+
+ return set;
+ }
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onNothingSelected() {}
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.dynamical, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionAddEntry: {
+ addEntry();
+ Toast.makeText(this, "Entry added!", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.actionRemoveEntry: {
+ removeLastEntry();
+ Toast.makeText(this, "Entry removed!", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.actionAddDataSet: {
+ addDataSet();
+ Toast.makeText(this, "DataSet added!", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.actionRemoveDataSet: {
+ removeDataSet();
+ Toast.makeText(this, "DataSet removed!", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.actionClear: {
+ chart.clear();
+ Toast.makeText(this, "Chart cleared!", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "DynamicalAddingActivity");
+ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/FilledLineActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/FilledLineActivity.java
new file mode 100644
index 0000000000..e821a04969
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/FilledLineActivity.java
@@ -0,0 +1,189 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.formatter.IFillFormatter;
+import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+/**
+ * This works by inverting the background and desired "fill" color. First, we draw the fill color
+ * that we want between the lines as the actual background of the chart. Then, we fill the area
+ * above the highest line and the area under the lowest line with the desired background color.
+ *
+ * This method makes it look like we filled the area between the lines, but really we are filling
+ * the area OUTSIDE the lines!
+ */
+@SuppressWarnings("SameParameterValue")
+public class FilledLineActivity extends DemoBase {
+
+ private LineChart chart;
+ private final int fillColor = Color.argb(150, 51, 181, 229);
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart_noseekbar);
+
+ setTitle("FilledLineActivity");
+
+ chart = findViewById(R.id.chart1);
+ chart.setBackgroundColor(Color.WHITE);
+ chart.setGridBackgroundColor(fillColor);
+ chart.setDrawGridBackground(true);
+
+ chart.setDrawBorders(true);
+
+ // no description text
+ chart.getDescription().setEnabled(false);
+
+ // if disabled, scaling can be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ Legend l = chart.getLegend();
+ l.setEnabled(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setEnabled(false);
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setAxisMaximum(900f);
+ leftAxis.setAxisMinimum(-250f);
+ leftAxis.setDrawAxisLine(false);
+ leftAxis.setDrawZeroLine(false);
+ leftAxis.setDrawGridLines(false);
+
+ chart.getAxisRight().setEnabled(false);
+
+ // add data
+ setData(100, 60);
+
+ chart.invalidate();
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList values1 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range) + 50;
+ values1.add(new Entry(i, val));
+ }
+
+ ArrayList values2 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range) + 450;
+ values2.add(new Entry(i, val));
+ }
+
+ LineDataSet set1, set2;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (LineDataSet) chart.getData().getDataSetByIndex(0);
+ set2 = (LineDataSet) chart.getData().getDataSetByIndex(1);
+ set1.setValues(values1);
+ set2.setValues(values2);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ // create a dataset and give it a type
+ set1 = new LineDataSet(values1, "DataSet 1");
+
+ set1.setAxisDependency(YAxis.AxisDependency.LEFT);
+ set1.setColor(Color.rgb(255, 241, 46));
+ set1.setDrawCircles(false);
+ set1.setLineWidth(2f);
+ set1.setCircleRadius(3f);
+ set1.setFillAlpha(255);
+ set1.setDrawFilled(true);
+ set1.setFillColor(Color.WHITE);
+ set1.setHighLightColor(Color.rgb(244, 117, 117));
+ set1.setDrawCircleHole(false);
+ set1.setFillFormatter(new IFillFormatter() {
+ @Override
+ public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
+ // change the return value here to better understand the effect
+ // return 0;
+ return chart.getAxisLeft().getAxisMinimum();
+ }
+ });
+
+ // create a dataset and give it a type
+ set2 = new LineDataSet(values2, "DataSet 2");
+ set2.setAxisDependency(YAxis.AxisDependency.LEFT);
+ set2.setColor(Color.rgb(255, 241, 46));
+ set2.setDrawCircles(false);
+ set2.setLineWidth(2f);
+ set2.setCircleRadius(3f);
+ set2.setFillAlpha(255);
+ set2.setDrawFilled(true);
+ set2.setFillColor(Color.WHITE);
+ set2.setDrawCircleHole(false);
+ set2.setHighLightColor(Color.rgb(244, 117, 117));
+ set2.setFillFormatter(new IFillFormatter() {
+ @Override
+ public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
+ // change the return value here to better understand the effect
+ // return 600;
+ return chart.getAxisLeft().getAxisMaximum();
+ }
+ });
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1); // add the data sets
+ dataSets.add(set2);
+
+ // create a data object with the data sets
+ LineData data = new LineData(dataSets);
+ data.setDrawValues(false);
+
+ // set data
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.only_github, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/FilledLineActivity.java"));
+ startActivity(i);
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HalfPieChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HalfPieChartActivity.java
new file mode 100644
index 0000000000..ed2adcc960
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HalfPieChartActivity.java
@@ -0,0 +1,168 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
+import android.text.style.RelativeSizeSpan;
+import android.text.style.StyleSpan;
+import android.util.DisplayMetrics;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.RelativeLayout;
+
+import com.github.mikephil.charting.animation.Easing;
+import com.github.mikephil.charting.charts.PieChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.data.PieData;
+import com.github.mikephil.charting.data.PieDataSet;
+import com.github.mikephil.charting.data.PieEntry;
+import com.github.mikephil.charting.formatter.PercentFormatter;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+
+@SuppressWarnings("SameParameterValue")
+public class HalfPieChartActivity extends DemoBase {
+
+ private PieChart chart;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_piechart_half);
+
+ setTitle("HalfPieChartActivity");
+
+ chart = findViewById(R.id.chart1);
+ chart.setBackgroundColor(Color.WHITE);
+
+ moveOffScreen();
+
+ chart.setUsePercentValues(true);
+ chart.getDescription().setEnabled(false);
+
+ chart.setCenterTextTypeface(tfLight);
+ chart.setCenterText(generateCenterSpannableText());
+
+ chart.setDrawHoleEnabled(true);
+ chart.setHoleColor(Color.WHITE);
+
+ chart.setTransparentCircleColor(Color.WHITE);
+ chart.setTransparentCircleAlpha(110);
+
+ chart.setHoleRadius(58f);
+ chart.setTransparentCircleRadius(61f);
+
+ chart.setDrawCenterText(true);
+
+ chart.setRotationEnabled(false);
+ chart.setHighlightPerTapEnabled(true);
+
+ chart.setMaxAngle(180f); // HALF CHART
+ chart.setRotationAngle(180f);
+ chart.setCenterTextOffset(0, -20);
+
+ setData(4, 100);
+
+ chart.animateY(1400, Easing.EaseInOutQuad);
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+ l.setXEntrySpace(7f);
+ l.setYEntrySpace(0f);
+ l.setYOffset(0f);
+
+ // entry label styling
+ chart.setEntryLabelColor(Color.WHITE);
+ chart.setEntryLabelTypeface(tfRegular);
+ chart.setEntryLabelTextSize(12f);
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ values.add(new PieEntry((float) ((Math.random() * range) + range / 5), parties[i % parties.length]));
+ }
+
+ PieDataSet dataSet = new PieDataSet(values, "Election Results");
+ dataSet.setSliceSpace(3f);
+ dataSet.setSelectionShift(5f);
+
+ dataSet.setColors(ColorTemplate.MATERIAL_COLORS);
+ //dataSet.setSelectionShift(0f);
+
+ PieData data = new PieData(dataSet);
+ data.setValueFormatter(new PercentFormatter());
+ data.setValueTextSize(11f);
+ data.setValueTextColor(Color.WHITE);
+ data.setValueTypeface(tfLight);
+ chart.setData(data);
+
+ chart.invalidate();
+ }
+
+ private SpannableString generateCenterSpannableText() {
+
+ SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda");
+ s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0);
+ s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0);
+ s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0);
+ s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0);
+ s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0);
+ s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0);
+ return s;
+ }
+
+ private void moveOffScreen() {
+
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+
+ int height = displayMetrics.heightPixels;
+
+ int offset = (int)(height * 0.65); /* percent to move */
+
+ RelativeLayout.LayoutParams rlParams =
+ (RelativeLayout.LayoutParams) chart.getLayoutParams();
+ rlParams.setMargins(0, 0, 0, -offset);
+ chart.setLayoutParams(rlParams);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.only_github, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HalfPieChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java
new file mode 100644
index 0000000000..27f7f29627
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java
@@ -0,0 +1,291 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.RectF;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.HorizontalBarChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.MPPointF;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HorizontalBarChartActivity extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private HorizontalBarChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_horizontalbarchart);
+
+ setTitle("HorizontalBarChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarY = findViewById(R.id.seekBar2);
+
+ seekBarY.setOnSeekBarChangeListener(this);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+ // chart.setHighlightEnabled(false);
+
+ chart.setDrawBarShadow(false);
+
+ chart.setDrawValueAboveBar(true);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ // draw shadows for each bar that show the maximum value
+ // chart.setDrawBarShadow(true);
+
+ chart.setDrawGridBackground(false);
+
+ XAxis xl = chart.getXAxis();
+ xl.setPosition(XAxisPosition.BOTTOM);
+ xl.setTypeface(tfLight);
+ xl.setDrawAxisLine(true);
+ xl.setDrawGridLines(false);
+ xl.setGranularity(10f);
+
+ YAxis yl = chart.getAxisLeft();
+ yl.setTypeface(tfLight);
+ yl.setDrawAxisLine(true);
+ yl.setDrawGridLines(true);
+ yl.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+// yl.setInverted(true);
+
+ YAxis yr = chart.getAxisRight();
+ yr.setTypeface(tfLight);
+ yr.setDrawAxisLine(true);
+ yr.setDrawGridLines(false);
+ yr.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+// yr.setInverted(true);
+
+ chart.setFitBars(true);
+ chart.animateY(2500);
+
+ // setting data
+ seekBarY.setProgress(50);
+ seekBarX.setProgress(12);
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+ l.setFormSize(8f);
+ l.setXEntrySpace(4f);
+ }
+
+ private void setData(int count, float range) {
+
+ float barWidth = 9f;
+ float spaceForBar = 10f;
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range);
+ values.add(new BarEntry(i * spaceForBar, val,
+ getResources().getDrawable(R.drawable.star)));
+ }
+
+ BarDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ set1 = new BarDataSet(values, "DataSet 1");
+
+ set1.setDrawIcons(false);
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1);
+
+ BarData data = new BarData(dataSets);
+ data.setValueTextSize(10f);
+ data.setValueTypeface(tfLight);
+ data.setBarWidth(barWidth);
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (IBarDataSet iSet : sets) {
+ iSet.setDrawValues(!iSet.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (IBarDataSet iSet : sets) {
+ iSet.setDrawIcons(!iSet.isDrawIconsEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+ chart.setFitBars(true);
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "HorizontalBarChartActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ private final RectF mOnValueSelectedRectF = new RectF();
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+
+ if (e == null)
+ return;
+
+ RectF bounds = mOnValueSelectedRectF;
+ chart.getBarBounds((BarEntry) e, bounds);
+
+ MPPointF position = chart.getPosition(e, chart.getData().getDataSetByIndex(h.getDataSetIndex())
+ .getAxisDependency());
+
+ Log.i("bounds", bounds.toString());
+ Log.i("position", position.toString());
+
+ MPPointF.recycleInstance(position);
+ }
+
+ @Override
+ public void onNothingSelected() {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarNegativeChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarNegativeChartActivity.java
new file mode 100644
index 0000000000..86d578cc43
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/HorizontalBarNegativeChartActivity.java
@@ -0,0 +1,292 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.RectF;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.core.content.ContextCompat;
+
+import com.github.mikephil.charting.charts.HorizontalBarChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.XAxis.XAxisPosition;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.BarData;
+import com.github.mikephil.charting.data.BarDataSet;
+import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.MPPointF;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HorizontalBarNegativeChartActivity extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private HorizontalBarChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_horizontalbarchart);
+
+ setTitle("HorizontalBarChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarY = findViewById(R.id.seekBar2);
+
+ seekBarY.setOnSeekBarChangeListener(this);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+ // chart.setHighlightEnabled(false);
+
+ chart.setDrawBarShadow(false);
+
+ chart.setDrawValueAboveBar(true);
+
+ chart.getDescription().setEnabled(false);
+
+ // if more than 60 entries are displayed in the chart, no values will be
+ // drawn
+ chart.setMaxVisibleValueCount(60);
+
+ // scaling can now only be done on x- and y-axis separately
+ chart.setPinchZoom(false);
+
+ // draw shadows for each bar that show the maximum value
+ // chart.setDrawBarShadow(true);
+
+ chart.setDrawGridBackground(false);
+
+ XAxis xl = chart.getXAxis();
+ xl.setPosition(XAxisPosition.BOTTOM);
+ xl.setTypeface(tfLight);
+ xl.setDrawAxisLine(true);
+ xl.setDrawGridLines(false);
+ xl.setGranularity(10f);
+
+ YAxis yl = chart.getAxisLeft();
+ yl.setTypeface(tfLight);
+ yl.setDrawAxisLine(true);
+ yl.setDrawGridLines(true);
+// yl.setInverted(true);
+
+ YAxis yr = chart.getAxisRight();
+ yr.setTypeface(tfLight);
+ yr.setDrawAxisLine(true);
+ yr.setDrawGridLines(false);
+// yr.setInverted(true);
+
+ chart.setFitBars(true);
+ chart.animateY(2500);
+
+ // setting data
+ seekBarY.setProgress(50);
+ seekBarX.setProgress(12);
+
+ Legend l = chart.getLegend();
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+ l.setFormSize(8f);
+ l.setXEntrySpace(4f);
+ }
+
+ private void setData(int count, float range) {
+
+ float barWidth = 9f;
+ float spaceForBar = 10f;
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range - range / 2);
+ values.add(new BarEntry(i * spaceForBar, val,
+ getResources().getDrawable(R.drawable.star)));
+ }
+
+ BarDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ set1 = new BarDataSet(values, "DataSet 1");
+
+ set1.setDrawIcons(false);
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1);
+
+ BarData data = new BarData(dataSets);
+ data.setValueTextSize(10f);
+ data.setValueTypeface(tfLight);
+ data.setBarWidth(barWidth);
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.bar, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/HorizontalBarChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (IBarDataSet iSet : sets) {
+ iSet.setDrawValues(!iSet.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (IBarDataSet iSet : sets) {
+ iSet.setDrawIcons(!iSet.isDrawIconsEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionToggleBarBorders: {
+ for (IBarDataSet set : chart.getData().getDataSets())
+ ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+ chart.setFitBars(true);
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "HorizontalBarChartActivity");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ private final RectF mOnValueSelectedRectF = new RectF();
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+
+ if (e == null)
+ return;
+
+ RectF bounds = mOnValueSelectedRectF;
+ chart.getBarBounds((BarEntry) e, bounds);
+
+ MPPointF position = chart.getPosition(e, chart.getData().getDataSetByIndex(h.getDataSetIndex())
+ .getAxisDependency());
+
+ Log.i("bounds", bounds.toString());
+ Log.i("position", position.toString());
+
+ MPPointF.recycleInstance(position);
+ }
+
+ @Override
+ public void onNothingSelected() {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java
new file mode 100644
index 0000000000..08983710f2
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java
@@ -0,0 +1,283 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.Legend.LegendForm;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.EntryXComparator;
+import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class InvertedLineChartActivity extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private LineChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart);
+
+ setTitle("InvertedLineChartActivity");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarY = findViewById(R.id.seekBar2);
+
+ seekBarY.setOnSeekBarChangeListener(this);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+ chart.setDrawGridBackground(false);
+
+ // no description text
+ chart.getDescription().setEnabled(false);
+
+ // enable touch gestures
+ chart.setTouchEnabled(true);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+
+ // if disabled, scaling can be done on x- and y-axis separately
+ chart.setPinchZoom(true);
+
+ // set an alternative background color
+ // chart.setBackgroundColor(Color.GRAY);
+
+ // create a custom MarkerView (extend MarkerView) and specify the layout
+ // to use for it
+ MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
+ mv.setChartView(chart); // For bounds control
+ chart.setMarker(mv); // Set the marker to the chart
+
+ XAxis xl = chart.getXAxis();
+ xl.setAvoidFirstLastClipping(true);
+ xl.setAxisMinimum(0f);
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setInverted(true);
+ leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setEnabled(false);
+
+ // add data
+ seekBarX.setProgress(25);
+ seekBarY.setProgress(50);
+
+ // // restrain the maximum scale-out factor
+ // chart.setScaleMinima(3f, 3f);
+ //
+ // // center the view to a specific position inside the chart
+ // chart.centerViewPort(10, 50);
+
+ // get the legend (only possible after setting data)
+ Legend l = chart.getLegend();
+
+ // modify the legend ...
+ l.setForm(LegendForm.LINE);
+
+ // don't forget to refresh the drawing
+ chart.invalidate();
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList entries = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float xVal = (float) (Math.random() * range);
+ float yVal = (float) (Math.random() * range);
+ entries.add(new Entry(xVal, yVal));
+ }
+
+ // sort by x-value
+ Collections.sort(entries, new EntryXComparator());
+
+ // create a dataset and give it a type
+ LineDataSet set1 = new LineDataSet(entries, "DataSet 1");
+
+ set1.setLineWidth(1.5f);
+ set1.setCircleRadius(4f);
+
+ // create a data object with the data sets
+ LineData data = new LineData(set1);
+
+ // set data
+ chart.setData(data);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.line, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/InvertedLineChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionToggleFilled: {
+
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawFilledEnabled())
+ set.setDrawFilled(false);
+ else
+ set.setDrawFilled(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCircles: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawCirclesEnabled())
+ set.setDrawCircles(false);
+ else
+ set.setDrawCircles(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+
+ // redraw
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "InvertedLineChartActivity");
+ }
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("VAL SELECTED",
+ "Value: " + e.getY() + ", xIndex: " + e.getX()
+ + ", DataSet index: " + h.getDataSetIndex());
+ }
+
+ @Override
+ public void onNothingSelected() {}
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java
new file mode 100644
index 0000000000..dd43b056eb
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java
@@ -0,0 +1,454 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.graphics.DashPathEffect;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.animation.Easing;
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.Legend.LegendForm;
+import com.github.mikephil.charting.components.LimitLine;
+import com.github.mikephil.charting.components.LimitLine.LimitLabelPosition;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.formatter.IFillFormatter;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.Utils;
+import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Example of a heavily customized {@link LineChart} with limit lines, custom line shapes, etc.
+ *
+ * @since 1.7.4
+ * @version 3.1.0
+ */
+public class LineChartActivity1 extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private LineChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart);
+
+ setTitle("LineChartActivity1");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setMax(180);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+
+ { // // Chart Style // //
+ chart = findViewById(R.id.chart1);
+
+ // background color
+ chart.setBackgroundColor(Color.WHITE);
+
+ // disable description text
+ chart.getDescription().setEnabled(false);
+
+ // enable touch gestures
+ chart.setTouchEnabled(true);
+
+ // set listeners
+ chart.setOnChartValueSelectedListener(this);
+ chart.setDrawGridBackground(false);
+
+ // create marker to display box when values are selected
+ MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
+
+ // Set the marker to the chart
+ mv.setChartView(chart);
+ chart.setMarker(mv);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+ // chart.setScaleXEnabled(true);
+ // chart.setScaleYEnabled(true);
+
+ // force pinch zoom along both axis
+ chart.setPinchZoom(true);
+ }
+
+ XAxis xAxis;
+ { // // X-Axis Style // //
+ xAxis = chart.getXAxis();
+
+ // vertical grid lines
+ xAxis.enableGridDashedLine(10f, 10f, 0f);
+ }
+
+ YAxis yAxis;
+ { // // Y-Axis Style // //
+ yAxis = chart.getAxisLeft();
+
+ // disable dual axis (only use LEFT axis)
+ chart.getAxisRight().setEnabled(false);
+
+ // horizontal grid lines
+ yAxis.enableGridDashedLine(10f, 10f, 0f);
+
+ // axis range
+ yAxis.setAxisMaximum(200f);
+ yAxis.setAxisMinimum(-50f);
+ }
+
+
+ { // // Create Limit Lines // //
+ LimitLine llXAxis = new LimitLine(9f, "Index 10");
+ llXAxis.setLineWidth(4f);
+ llXAxis.enableDashedLine(10f, 10f, 0f);
+ llXAxis.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM);
+ llXAxis.setTextSize(10f);
+ llXAxis.setTypeface(tfRegular);
+
+ LimitLine ll1 = new LimitLine(150f, "Upper Limit");
+ ll1.setLineWidth(4f);
+ ll1.enableDashedLine(10f, 10f, 0f);
+ ll1.setLabelPosition(LimitLabelPosition.RIGHT_TOP);
+ ll1.setTextSize(10f);
+ ll1.setTypeface(tfRegular);
+
+ LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
+ ll2.setLineWidth(4f);
+ ll2.enableDashedLine(10f, 10f, 0f);
+ ll2.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM);
+ ll2.setTextSize(10f);
+ ll2.setTypeface(tfRegular);
+
+ // draw limit lines behind data instead of on top
+ yAxis.setDrawLimitLinesBehindData(true);
+ xAxis.setDrawLimitLinesBehindData(true);
+
+ // add limit lines
+ yAxis.addLimitLine(ll1);
+ yAxis.addLimitLine(ll2);
+ //xAxis.addLimitLine(llXAxis);
+ }
+
+ // add data
+ seekBarX.setProgress(45);
+ seekBarY.setProgress(180);
+ setData(45, 180);
+
+ // draw points over time
+ chart.animateX(1500);
+
+ // get the legend (only possible after setting data)
+ Legend l = chart.getLegend();
+
+ // draw legend entries as lines
+ l.setForm(LegendForm.LINE);
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList values = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+
+ float val = (float) (Math.random() * range) - 30;
+ values.add(new Entry(i, val, getResources().getDrawable(R.drawable.star)));
+ }
+
+ LineDataSet set1;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (LineDataSet) chart.getData().getDataSetByIndex(0);
+ set1.setValues(values);
+ set1.notifyDataSetChanged();
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ // create a dataset and give it a type
+ set1 = new LineDataSet(values, "DataSet 1");
+
+ set1.setDrawIcons(false);
+
+ // draw dashed line
+ set1.enableDashedLine(10f, 5f, 0f);
+
+ // black lines and points
+ set1.setColor(Color.BLACK);
+ set1.setCircleColor(Color.BLACK);
+
+ // line thickness and point size
+ set1.setLineWidth(1f);
+ set1.setCircleRadius(3f);
+
+ // draw points as solid circles
+ set1.setDrawCircleHole(false);
+
+ // customize legend entry
+ set1.setFormLineWidth(1f);
+ set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
+ set1.setFormSize(15.f);
+
+ // text size of values
+ set1.setValueTextSize(9f);
+
+ // draw selection line as dashed
+ set1.enableDashedHighlightLine(10f, 5f, 0f);
+
+ // set the filled area
+ set1.setDrawFilled(true);
+ set1.setFillFormatter(new IFillFormatter() {
+ @Override
+ public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
+ return chart.getAxisLeft().getAxisMinimum();
+ }
+ });
+
+ // set color of filled area
+ if (Utils.getSDKInt() >= 18) {
+ // drawables only supported on api level 18 and above
+ Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);
+ set1.setFillDrawable(drawable);
+ } else {
+ set1.setFillColor(Color.BLACK);
+ }
+
+ ArrayList dataSets = new ArrayList<>();
+ dataSets.add(set1); // add the data sets
+
+ // create a data object with the data sets
+ LineData data = new LineData(dataSets);
+
+ // set data
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.line, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleIcons: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawIcons(!set.isDrawIconsEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if(chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionToggleFilled: {
+
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawFilledEnabled())
+ set.setDrawFilled(false);
+ else
+ set.setDrawFilled(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCircles: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawCirclesEnabled())
+ set.setDrawCircles(false);
+ else
+ set.setDrawCircles(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.CUBIC_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.CUBIC_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleStepped: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.STEPPED
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.STEPPED);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHorizontalCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.HORIZONTAL_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.HORIZONTAL_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000, Easing.EaseInCubic);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+
+ // redraw
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "LineChartActivity1");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("Entry selected", e.toString());
+ Log.i("LOW HIGH", "low: " + chart.getLowestVisibleX() + ", high: " + chart.getHighestVisibleX());
+ Log.i("MIN MAX", "xMin: " + chart.getXChartMin() + ", xMax: " + chart.getXChartMax() + ", yMin: " + chart.getYChartMin() + ", yMax: " + chart.getYChartMax());
+ }
+
+ @Override
+ public void onNothingSelected() {
+ Log.i("Nothing selected", "Nothing selected.");
+ }
+}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java
new file mode 100644
index 0000000000..6b9cbb5f22
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java
@@ -0,0 +1,409 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.Legend.LegendForm;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.components.YAxis.AxisDependency;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.highlight.Highlight;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Example of a dual axis {@link LineChart} with multiple data sets.
+ *
+ * @since 1.7.4
+ * @version 3.1.0
+ */
+public class LineChartActivity2 extends DemoBase implements OnSeekBarChangeListener,
+ OnChartValueSelectedListener {
+
+ private LineChart chart;
+ private SeekBar seekBarX, seekBarY;
+ private TextView tvX, tvY;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart);
+
+ setTitle("LineChartActivity2");
+
+ tvX = findViewById(R.id.tvXMax);
+ tvY = findViewById(R.id.tvYMax);
+
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ seekBarY = findViewById(R.id.seekBar2);
+ seekBarY.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+ chart.setOnChartValueSelectedListener(this);
+
+ // no description text
+ chart.getDescription().setEnabled(false);
+
+ // enable touch gestures
+ chart.setTouchEnabled(true);
+
+ chart.setDragDecelerationFrictionCoef(0.9f);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+ chart.setDrawGridBackground(false);
+ chart.setHighlightPerDragEnabled(true);
+
+ // if disabled, scaling can be done on x- and y-axis separately
+ chart.setPinchZoom(true);
+
+ // set an alternative background color
+ chart.setBackgroundColor(Color.LTGRAY);
+
+ // add data
+ seekBarX.setProgress(20);
+ seekBarY.setProgress(30);
+
+ chart.animateX(1500);
+
+ // get the legend (only possible after setting data)
+ Legend l = chart.getLegend();
+
+ // modify the legend ...
+ l.setForm(LegendForm.LINE);
+ l.setTypeface(tfLight);
+ l.setTextSize(11f);
+ l.setTextColor(Color.WHITE);
+ l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
+ l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
+ l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
+ l.setDrawInside(false);
+// l.setYOffset(11f);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setTypeface(tfLight);
+ xAxis.setTextSize(11f);
+ xAxis.setTextColor(Color.WHITE);
+ xAxis.setDrawGridLines(false);
+ xAxis.setDrawAxisLine(false);
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setTextColor(ColorTemplate.getHoloBlue());
+ leftAxis.setAxisMaximum(200f);
+ leftAxis.setAxisMinimum(0f);
+ leftAxis.setDrawGridLines(true);
+ leftAxis.setGranularityEnabled(true);
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setTypeface(tfLight);
+ rightAxis.setTextColor(Color.RED);
+ rightAxis.setAxisMaximum(900);
+ rightAxis.setAxisMinimum(-200);
+ rightAxis.setDrawGridLines(false);
+ rightAxis.setDrawZeroLine(false);
+ rightAxis.setGranularityEnabled(false);
+ }
+
+ private void setData(int count, float range) {
+
+ ArrayList values1 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * (range / 2f)) + 50;
+ values1.add(new Entry(i, val));
+ }
+
+ ArrayList values2 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range) + 450;
+ values2.add(new Entry(i, val));
+ }
+
+ ArrayList values3 = new ArrayList<>();
+
+ for (int i = 0; i < count; i++) {
+ float val = (float) (Math.random() * range) + 500;
+ values3.add(new Entry(i, val));
+ }
+
+ LineDataSet set1, set2, set3;
+
+ if (chart.getData() != null &&
+ chart.getData().getDataSetCount() > 0) {
+ set1 = (LineDataSet) chart.getData().getDataSetByIndex(0);
+ set2 = (LineDataSet) chart.getData().getDataSetByIndex(1);
+ set3 = (LineDataSet) chart.getData().getDataSetByIndex(2);
+ set1.setValues(values1);
+ set2.setValues(values2);
+ set3.setValues(values3);
+ chart.getData().notifyDataChanged();
+ chart.notifyDataSetChanged();
+ } else {
+ // create a dataset and give it a type
+ set1 = new LineDataSet(values1, "DataSet 1");
+
+ set1.setAxisDependency(AxisDependency.LEFT);
+ set1.setColor(ColorTemplate.getHoloBlue());
+ set1.setCircleColor(Color.WHITE);
+ set1.setLineWidth(2f);
+ set1.setCircleRadius(3f);
+ set1.setFillAlpha(65);
+ set1.setFillColor(ColorTemplate.getHoloBlue());
+ set1.setHighLightColor(Color.rgb(244, 117, 117));
+ set1.setDrawCircleHole(false);
+ //set1.setFillFormatter(new MyFillFormatter(0f));
+ //set1.setDrawHorizontalHighlightIndicator(false);
+ //set1.setVisible(false);
+ //set1.setCircleHoleColor(Color.WHITE);
+
+ // create a dataset and give it a type
+ set2 = new LineDataSet(values2, "DataSet 2");
+ set2.setAxisDependency(AxisDependency.RIGHT);
+ set2.setColor(Color.RED);
+ set2.setCircleColor(Color.WHITE);
+ set2.setLineWidth(2f);
+ set2.setCircleRadius(3f);
+ set2.setFillAlpha(65);
+ set2.setFillColor(Color.RED);
+ set2.setDrawCircleHole(false);
+ set2.setHighLightColor(Color.rgb(244, 117, 117));
+ //set2.setFillFormatter(new MyFillFormatter(900f));
+
+ set3 = new LineDataSet(values3, "DataSet 3");
+ set3.setAxisDependency(AxisDependency.RIGHT);
+ set3.setColor(Color.YELLOW);
+ set3.setCircleColor(Color.WHITE);
+ set3.setLineWidth(2f);
+ set3.setCircleRadius(3f);
+ set3.setFillAlpha(65);
+ set3.setFillColor(ColorTemplate.colorWithAlpha(Color.YELLOW, 200));
+ set3.setDrawCircleHole(false);
+ set3.setHighLightColor(Color.rgb(244, 117, 117));
+
+ // create a data object with the data sets
+ LineData data = new LineData(set1, set2, set3);
+ data.setValueTextColor(Color.WHITE);
+ data.setValueTextSize(9f);
+
+ // set data
+ chart.setData(data);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.line, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity2.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if (chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionToggleFilled: {
+
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawFilledEnabled())
+ set.setDrawFilled(false);
+ else
+ set.setDrawFilled(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCircles: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawCirclesEnabled())
+ set.setDrawCircles(false);
+ else
+ set.setDrawCircles(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.CUBIC_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.CUBIC_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleStepped: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.STEPPED
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.STEPPED);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHorizontalCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setMode(set.getMode() == LineDataSet.Mode.HORIZONTAL_BEZIER
+ ? LineDataSet.Mode.LINEAR
+ : LineDataSet.Mode.HORIZONTAL_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+ tvY.setText(String.valueOf(seekBarY.getProgress()));
+
+ setData(seekBarX.getProgress(), seekBarY.getProgress());
+
+ // redraw
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "LineChartActivity2");
+ }
+
+ @Override
+ public void onValueSelected(Entry e, Highlight h) {
+ Log.i("Entry selected", e.toString());
+
+ chart.centerViewToAnimated(e.getX(), e.getY(), chart.getData().getDataSetByIndex(h.getDataSetIndex())
+ .getAxisDependency(), 500);
+ //chart.zoomAndCenterAnimated(2.5f, 2.5f, e.getX(), e.getY(), chart.getData().getDataSetByIndex(dataSetIndex)
+ // .getAxisDependency(), 1000);
+ //chart.zoomAndCenterAnimated(1.8f, 1.8f, e.getX(), e.getY(), chart.getData().getDataSetByIndex(dataSetIndex)
+ // .getAxisDependency(), 1000);
+ }
+
+ @Override
+ public void onNothingSelected() {
+ Log.i("Nothing selected", "Nothing selected.");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java
similarity index 55%
rename from MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java
rename to MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java
index b21c385a07..6a12e8f95d 100644
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java
@@ -1,16 +1,17 @@
package com.xxmassdeveloper.mpchartexample;
+import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
+import android.net.Uri;
import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.WindowManager;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
-import com.github.mikephil.charting.components.Legend.LegendForm;
-import com.github.mikephil.charting.components.XAxis;
-import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
@@ -18,10 +19,10 @@
import java.util.ArrayList;
+@SuppressWarnings("SameParameterValue")
public class LineChartActivityColored extends DemoBase {
- private LineChart[] mCharts = new LineChart[4];
- private Typeface mTf;
+ private final LineChart[] charts = new LineChart[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -30,35 +31,40 @@ protected void onCreate(Bundle savedInstanceState) {
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_colored_lines);
- mCharts[0] = (LineChart) findViewById(R.id.chart1);
- mCharts[1] = (LineChart) findViewById(R.id.chart2);
- mCharts[2] = (LineChart) findViewById(R.id.chart3);
- mCharts[3] = (LineChart) findViewById(R.id.chart4);
+ setTitle("LineChartActivityColored");
- mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Bold.ttf");
+ charts[0] = findViewById(R.id.chart1);
+ charts[1] = findViewById(R.id.chart2);
+ charts[2] = findViewById(R.id.chart3);
+ charts[3] = findViewById(R.id.chart4);
- LineData data = getData(36, 100);
- data.setValueTypeface(mTf);
+ Typeface mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Bold.ttf");
+
+ for (int i = 0; i < charts.length; i++) {
+
+ LineData data = getData(36, 100);
+ data.setValueTypeface(mTf);
- for (int i = 0; i < mCharts.length; i++)
// add some transparency to the color with "& 0x90FFFFFF"
- setupChart(mCharts[i], data, mColors[i % mColors.length]);
+ setupChart(charts[i], data, colors[i % colors.length]);
+ }
}
- private int[] mColors = new int[] {
- Color.rgb(137, 230, 81),
- Color.rgb(240, 240, 30),
+ private final int[] colors = new int[] {
+ Color.rgb(137, 230, 81),
+ Color.rgb(240, 240, 30),
Color.rgb(89, 199, 250),
Color.rgb(250, 104, 104)
};
private void setupChart(LineChart chart, LineData data, int color) {
+ ((LineDataSet) data.getDataSetByIndex(0)).setCircleHoleColor(color);
+
// no description text
- chart.setDescription("");
- chart.setNoDataTextDescription("You need to provide data for the chart.");
-
- // mChart.setDrawHorizontalGrid(false);
+ chart.getDescription().setEnabled(false);
+
+ // chart.setDrawHorizontalGrid(false);
//
// enable / disable grid background
chart.setDrawGridBackground(false);
@@ -75,7 +81,7 @@ private void setupChart(LineChart chart, LineData data, int color) {
chart.setPinchZoom(false);
chart.setBackgroundColor(color);
-
+
// set custom chart offsets (automatic offset calculation is hereby disabled)
chart.setViewPortOffsets(10, 0, 10, 0);
@@ -84,15 +90,11 @@ private void setupChart(LineChart chart, LineData data, int color) {
// get the legend (only possible after setting data)
Legend l = chart.getLegend();
-
- // modify the legend ...
- // l.setPosition(LegendPosition.LEFT_OF_CHART);
- l.setForm(LegendForm.CIRCLE);
- l.setFormSize(6f);
- l.setTextColor(Color.WHITE);
- l.setTypeface(mTf);
+ l.setEnabled(false);
chart.getAxisLeft().setEnabled(false);
+ chart.getAxisLeft().setSpaceTop(40);
+ chart.getAxisLeft().setSpaceBottom(40);
chart.getAxisRight().setEnabled(false);
chart.getXAxis().setEnabled(false);
@@ -100,39 +102,54 @@ private void setupChart(LineChart chart, LineData data, int color) {
// animate calls invalidate()...
chart.animateX(2500);
}
-
- private LineData getData(int count, float range) {
- ArrayList xVals = new ArrayList();
- for (int i = 0; i < count; i++) {
- xVals.add(mMonths[i % 12]);
- }
+ private LineData getData(int count, float range) {
- ArrayList yVals = new ArrayList();
+ ArrayList values = new ArrayList<>();
for (int i = 0; i < count; i++) {
float val = (float) (Math.random() * range) + 3;
- yVals.add(new Entry(val, i));
+ values.add(new Entry(i, val));
}
// create a dataset and give it a type
- LineDataSet set1 = new LineDataSet(yVals, "DataSet 1");
+ LineDataSet set1 = new LineDataSet(values, "DataSet 1");
// set1.setFillAlpha(110);
// set1.setFillColor(Color.RED);
set1.setLineWidth(1.75f);
- set1.setCircleSize(3f);
+ set1.setCircleRadius(5f);
+ set1.setCircleHoleRadius(2.5f);
set1.setColor(Color.WHITE);
set1.setCircleColor(Color.WHITE);
set1.setHighLightColor(Color.WHITE);
set1.setDrawValues(false);
- ArrayList dataSets = new ArrayList();
- dataSets.add(set1); // add the datasets
+ // create a data object with the data sets
+ return new LineData(set1);
+ }
- // create a data object with the datasets
- LineData data = new LineData(xVals, dataSets);
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.only_github, menu);
+ return true;
+ }
- return data;
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivityColored.java"));
+ startActivity(i);
+ break;
+ }
+ }
+
+ return true;
}
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
}
diff --git a/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartTime.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartTime.java
new file mode 100644
index 0000000000..212b90ff87
--- /dev/null
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/LineChartTime.java
@@ -0,0 +1,318 @@
+
+package com.xxmassdeveloper.mpchartexample;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import androidx.core.content.ContextCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.AxisBase;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.components.YAxis.AxisDependency;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.utils.ColorTemplate;
+import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+public class LineChartTime extends DemoBase implements OnSeekBarChangeListener {
+
+ private LineChart chart;
+ private SeekBar seekBarX;
+ private TextView tvX;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setContentView(R.layout.activity_linechart_time);
+
+ setTitle("LineChartTime");
+
+ tvX = findViewById(R.id.tvXMax);
+ seekBarX = findViewById(R.id.seekBar1);
+ seekBarX.setOnSeekBarChangeListener(this);
+
+ chart = findViewById(R.id.chart1);
+
+ // no description text
+ chart.getDescription().setEnabled(false);
+
+ // enable touch gestures
+ chart.setTouchEnabled(true);
+
+ chart.setDragDecelerationFrictionCoef(0.9f);
+
+ // enable scaling and dragging
+ chart.setDragEnabled(true);
+ chart.setScaleEnabled(true);
+ chart.setDrawGridBackground(false);
+ chart.setHighlightPerDragEnabled(true);
+
+ // set an alternative background color
+ chart.setBackgroundColor(Color.WHITE);
+ chart.setViewPortOffsets(0f, 0f, 0f, 0f);
+
+ // add data
+ seekBarX.setProgress(100);
+
+ // get the legend (only possible after setting data)
+ Legend l = chart.getLegend();
+ l.setEnabled(false);
+
+ XAxis xAxis = chart.getXAxis();
+ xAxis.setPosition(XAxis.XAxisPosition.TOP_INSIDE);
+ xAxis.setTypeface(tfLight);
+ xAxis.setTextSize(10f);
+ xAxis.setTextColor(Color.WHITE);
+ xAxis.setDrawAxisLine(false);
+ xAxis.setDrawGridLines(true);
+ xAxis.setTextColor(Color.rgb(255, 192, 56));
+ xAxis.setCenterAxisLabels(true);
+ xAxis.setGranularity(1f); // one hour
+ xAxis.setValueFormatter(new IAxisValueFormatter() {
+
+ private final SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM HH:mm", Locale.ENGLISH);
+
+ @Override
+ public String getFormattedValue(float value, AxisBase axis) {
+
+ long millis = TimeUnit.HOURS.toMillis((long) value);
+ return mFormat.format(new Date(millis));
+ }
+ });
+
+ YAxis leftAxis = chart.getAxisLeft();
+ leftAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setTextColor(ColorTemplate.getHoloBlue());
+ leftAxis.setDrawGridLines(true);
+ leftAxis.setGranularityEnabled(true);
+ leftAxis.setAxisMinimum(0f);
+ leftAxis.setAxisMaximum(170f);
+ leftAxis.setYOffset(-9f);
+ leftAxis.setTextColor(Color.rgb(255, 192, 56));
+
+ YAxis rightAxis = chart.getAxisRight();
+ rightAxis.setEnabled(false);
+ }
+
+ private void setData(int count, float range) {
+
+ // now in hours
+ long now = TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis());
+
+ ArrayList values = new ArrayList<>();
+
+ // count = hours
+ float to = now + count;
+
+ // increment by 1 hour
+ for (float x = now; x < to; x++) {
+
+ float y = getRandom(range, 50);
+ values.add(new Entry(x, y)); // add one entry per hour
+ }
+
+ // create a dataset and give it a type
+ LineDataSet set1 = new LineDataSet(values, "DataSet 1");
+ set1.setAxisDependency(AxisDependency.LEFT);
+ set1.setColor(ColorTemplate.getHoloBlue());
+ set1.setValueTextColor(ColorTemplate.getHoloBlue());
+ set1.setLineWidth(1.5f);
+ set1.setDrawCircles(false);
+ set1.setDrawValues(false);
+ set1.setFillAlpha(65);
+ set1.setFillColor(ColorTemplate.getHoloBlue());
+ set1.setHighLightColor(Color.rgb(244, 117, 117));
+ set1.setDrawCircleHole(false);
+
+ // create a data object with the data sets
+ LineData data = new LineData(set1);
+ data.setValueTextColor(Color.WHITE);
+ data.setValueTextSize(9f);
+
+ // set data
+ chart.setData(data);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.line, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartTime.java"));
+ startActivity(i);
+ break;
+ }
+ case R.id.actionToggleValues: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ set.setDrawValues(!set.isDrawValuesEnabled());
+ }
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleHighlight: {
+ if (chart.getData() != null) {
+ chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
+ chart.invalidate();
+ }
+ break;
+ }
+ case R.id.actionToggleFilled: {
+
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawFilledEnabled())
+ set.setDrawFilled(false);
+ else
+ set.setDrawFilled(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCircles: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.isDrawCirclesEnabled())
+ set.setDrawCircles(false);
+ else
+ set.setDrawCircles(true);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleCubic: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.getMode() == LineDataSet.Mode.CUBIC_BEZIER)
+ set.setMode(LineDataSet.Mode.LINEAR);
+ else
+ set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleStepped: {
+ List sets = chart.getData()
+ .getDataSets();
+
+ for (ILineDataSet iSet : sets) {
+
+ LineDataSet set = (LineDataSet) iSet;
+ if (set.getMode() == LineDataSet.Mode.STEPPED)
+ set.setMode(LineDataSet.Mode.LINEAR);
+ else
+ set.setMode(LineDataSet.Mode.STEPPED);
+ }
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionTogglePinch: {
+ if (chart.isPinchZoomEnabled())
+ chart.setPinchZoom(false);
+ else
+ chart.setPinchZoom(true);
+
+ chart.invalidate();
+ break;
+ }
+ case R.id.actionToggleAutoScaleMinMax: {
+ chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
+ chart.notifyDataSetChanged();
+ break;
+ }
+ case R.id.animateX: {
+ chart.animateX(2000);
+ break;
+ }
+ case R.id.animateY: {
+ chart.animateY(2000);
+ break;
+ }
+ case R.id.animateXY: {
+ chart.animateXY(2000, 2000);
+ break;
+ }
+
+ case R.id.actionSave: {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ saveToGallery();
+ } else {
+ requestStoragePermission(chart);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+ tvX.setText(String.valueOf(seekBarX.getProgress()));
+
+ setData(seekBarX.getProgress(), 50);
+
+ // redraw
+ chart.invalidate();
+ }
+
+ @Override
+ protected void saveToGallery() {
+ saveToGallery(chart, "LineChartTime");
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java
similarity index 59%
rename from MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java
rename to MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java
index 258d509a42..1466e5f9de 100644
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java
@@ -1,11 +1,16 @@
package com.xxmassdeveloper.mpchartexample;
+import android.annotation.SuppressLint;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Color;
-import android.graphics.Typeface;
+import android.net.Uri;
import android.os.Bundle;
+import androidx.annotation.NonNull;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@@ -19,6 +24,7 @@
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
+import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
@@ -27,8 +33,8 @@
/**
* Demonstrates the use of charts inside a ListView. IMPORTANT: provide a
- * specific height attribute for the chart inside your listview-item
- *
+ * specific height attribute for the chart inside your ListView item
+ *
* @author Philipp Jahoda
*/
public class ListViewBarChartActivity extends DemoBase {
@@ -39,10 +45,12 @@ protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_listview_chart);
-
- ListView lv = (ListView) findViewById(R.id.listView1);
- ArrayList list = new ArrayList();
+ setTitle("ListViewBarChartActivity");
+
+ ListView lv = findViewById(R.id.listView1);
+
+ ArrayList list = new ArrayList<>();
// 20 items
for (int i = 0; i < 20; i++) {
@@ -55,20 +63,18 @@ protected void onCreate(Bundle savedInstanceState) {
private class ChartDataAdapter extends ArrayAdapter {
- private Typeface mTf;
-
- public ChartDataAdapter(Context context, List objects) {
+ ChartDataAdapter(Context context, List objects) {
super(context, 0, objects);
-
- mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
}
+ @SuppressLint("InflateParams")
+ @NonNull
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public View getView(int position, View convertView, @NonNull ViewGroup parent) {
BarData data = getItem(position);
- ViewHolder holder = null;
+ ViewHolder holder;
if (convertView == null) {
@@ -76,7 +82,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item_barchart, null);
- holder.chart = (BarChart) convertView.findViewById(R.id.chart);
+ holder.chart = convertView.findViewById(R.id.chart);
convertView.setTag(holder);
@@ -85,29 +91,32 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
// apply styling
- data.setValueTypeface(mTf);
- holder.chart.setDescription("");
+ if (data != null) {
+ data.setValueTypeface(tfLight);
+ data.setValueTextColor(Color.BLACK);
+ }
+ holder.chart.getDescription().setEnabled(false);
holder.chart.setDrawGridBackground(false);
- data.setValueTextColor(Color.WHITE);
XAxis xAxis = holder.chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
- xAxis.setTypeface(mTf);
+ xAxis.setTypeface(tfLight);
xAxis.setDrawGridLines(false);
-
+
YAxis leftAxis = holder.chart.getAxisLeft();
- leftAxis.setTypeface(mTf);
- leftAxis.setLabelCount(5);
+ leftAxis.setTypeface(tfLight);
+ leftAxis.setLabelCount(5, false);
leftAxis.setSpaceTop(15f);
-
+
YAxis rightAxis = holder.chart.getAxisRight();
- rightAxis.setTypeface(mTf);
- rightAxis.setLabelCount(5);
+ rightAxis.setTypeface(tfLight);
+ rightAxis.setLabelCount(5, false);
rightAxis.setSpaceTop(15f);
// set data
holder.chart.setData(data);
-
+ holder.chart.setFitBars(true);
+
// do not forget to refresh the chart
// holder.chart.invalidate();
holder.chart.animateY(700);
@@ -123,45 +132,50 @@ private class ViewHolder {
/**
* generates a random ChartData object with just one DataSet
- *
- * @return
+ *
+ * @return Bar data
*/
private BarData generateData(int cnt) {
- ArrayList entries = new ArrayList();
+ ArrayList entries = new ArrayList<>();
for (int i = 0; i < 12; i++) {
- entries.add(new BarEntry((int) (Math.random() * 70) + 30, i));
+ entries.add(new BarEntry(i, (float) (Math.random() * 70) + 30));
}
- BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt);
- d.setBarSpacePercent(20f);
+ BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt);
d.setColors(ColorTemplate.VORDIPLOM_COLORS);
d.setBarShadowColor(Color.rgb(203, 203, 203));
-
- ArrayList sets = new ArrayList();
+
+ ArrayList sets = new ArrayList<>();
sets.add(d);
-
- BarData cd = new BarData(getMonths(), sets);
+
+ BarData cd = new BarData(sets);
+ cd.setBarWidth(0.9f);
return cd;
}
- private ArrayList getMonths() {
-
- ArrayList m = new ArrayList();
- m.add("Jan");
- m.add("Feb");
- m.add("Mar");
- m.add("Apr");
- m.add("May");
- m.add("Jun");
- m.add("Jul");
- m.add("Aug");
- m.add("Sep");
- m.add("Okt");
- m.add("Nov");
- m.add("Dec");
-
- return m;
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.only_github, menu);
+ return true;
}
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.viewGithub: {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java"));
+ startActivity(i);
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void saveToGallery() { /* Intentionally left empty */ }
}
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
similarity index 58%
rename from MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
rename to MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
index 4a47000f90..1455691620 100644
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
+++ b/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
@@ -2,8 +2,13 @@
package com.xxmassdeveloper.mpchartexample;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Color;
+import android.net.Uri;
import android.os.Bundle;
+import androidx.annotation.NonNull;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@@ -18,6 +23,8 @@
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
+import com.github.mikephil.charting.data.PieEntry;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.xxmassdeveloper.mpchartexample.listviewitems.BarChartItem;
import com.xxmassdeveloper.mpchartexample.listviewitems.ChartItem;
@@ -30,8 +37,8 @@
/**
* Demonstrates the use of charts inside a ListView. IMPORTANT: provide a
- * specific height attribute for the chart inside your listview-item
- *
+ * specific height attribute for the chart inside your ListView item
+ *
* @author Philipp Jahoda
*/
public class ListViewMultiChartActivity extends DemoBase {
@@ -42,20 +49,22 @@ protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_listview_chart);
-
- ListView lv = (ListView) findViewById(R.id.listView1);
- ArrayList list = new ArrayList();
+ setTitle("ListViewMultiChartActivity");
+
+ ListView lv = findViewById(R.id.listView1);
+
+ ArrayList list = new ArrayList<>();
// 30 items
for (int i = 0; i < 30; i++) {
-
+
if(i % 3 == 0) {
list.add(new LineChartItem(generateDataLine(i + 1), getApplicationContext()));
} else if(i % 3 == 1) {
list.add(new BarChartItem(generateDataBar(i + 1), getApplicationContext()));
} else if(i % 3 == 2) {
- list.add(new PieChartItem(generateDataPie(i + 1), getApplicationContext()));
+ list.add(new PieChartItem(generateDataPie(), getApplicationContext()));
}
}
@@ -65,141 +74,136 @@ protected void onCreate(Bundle savedInstanceState) {
/** adapter that supports 3 different item types */
private class ChartDataAdapter extends ArrayAdapter {
-
- public ChartDataAdapter(Context context, List objects) {
+
+ ChartDataAdapter(Context context, List objects) {
super(context, 0, objects);
}
+ @NonNull
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public View getView(int position, View convertView, @NonNull ViewGroup parent) {
+ //noinspection ConstantConditions
return getItem(position).getView(position, convertView, getContext());
}
-
+
@Override
- public int getItemViewType(int position) {
+ public int getItemViewType(int position) {
// return the views type
- return getItem(position).getItemType();
+ ChartItem ci = getItem(position);
+ return ci != null ? ci.getItemType() : 0;
}
-
+
@Override
public int getViewTypeCount() {
return 3; // we have 3 different item-types
}
}
-
+
/**
* generates a random ChartData object with just one DataSet
- *
- * @return
+ *
+ * @return Line data
*/
private LineData generateDataLine(int cnt) {
- ArrayList e1 = new ArrayList();
+ ArrayList values1 = new ArrayList<>();
for (int i = 0; i < 12; i++) {
- e1.add(new Entry((int) (Math.random() * 65) + 40, i));
+ values1.add(new Entry(i, (int) (Math.random() * 65) + 40));
}
- LineDataSet d1 = new LineDataSet(e1, "New DataSet " + cnt + ", (1)");
+ LineDataSet d1 = new LineDataSet(values1, "New DataSet " + cnt + ", (1)");
d1.setLineWidth(2.5f);
- d1.setCircleSize(4.5f);
+ d1.setCircleRadius(4.5f);
d1.setHighLightColor(Color.rgb(244, 117, 117));
d1.setDrawValues(false);
-
- ArrayList e2 = new ArrayList();
+
+ ArrayList values2 = new ArrayList<>();
for (int i = 0; i < 12; i++) {
- e2.add(new Entry(e1.get(i).getVal() - 30, i));
+ values2.add(new Entry(i, values1.get(i).getY() - 30));
}
- LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)");
+ LineDataSet d2 = new LineDataSet(values2, "New DataSet " + cnt + ", (2)");
d2.setLineWidth(2.5f);
- d2.setCircleSize(4.5f);
+ d2.setCircleRadius(4.5f);
d2.setHighLightColor(Color.rgb(244, 117, 117));
d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]);
d2.setDrawValues(false);
-
- ArrayList sets = new ArrayList();
+
+ ArrayList