Full Code of limxing/LaplaceKLine for AI

master e53763eb3b8a cached
260 files
3.6 MB
953.5k tokens
2092 symbols
1 requests
Download .txt
Showing preview only (3,819K chars total). Download the full file or copy to clipboard to get everything.
Repository: limxing/LaplaceKLine
Branch: master
Commit: e53763eb3b8a
Files: 260
Total size: 3.6 MB

Directory structure:
gitextract_9o6qzmer/

├── .gitignore
├── .idea/
│   ├── gradle.xml
│   ├── markdown-navigator/
│   │   └── profiles_settings.xml
│   ├── markdown-navigator.xml
│   ├── misc.xml
│   ├── modules.xml
│   ├── runConfigurations.xml
│   └── vcs.xml
├── MPChartLib/
│   ├── .gitignore
│   ├── .settings/
│   │   └── gradle/
│   │       └── org.springsource.ide.eclipse.gradle.core.prefs
│   ├── build.gradle
│   ├── pom.xml
│   ├── proguard-project.txt
│   ├── project.properties
│   ├── src/
│   │   ├── main/
│   │   │   ├── AndroidManifest.xml
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── github/
│   │   │               └── mikephil/
│   │   │                   └── charting/
│   │   │                       ├── animation/
│   │   │                       │   ├── ChartAnimator.java
│   │   │                       │   ├── Easing.java
│   │   │                       │   └── EasingFunction.java
│   │   │                       ├── buffer/
│   │   │                       │   ├── AbstractBuffer.java
│   │   │                       │   ├── BarBuffer.java
│   │   │                       │   └── HorizontalBarBuffer.java
│   │   │                       ├── charts/
│   │   │                       │   ├── BarChart.java
│   │   │                       │   ├── BarLineChartBase.java
│   │   │                       │   ├── BubbleChart.java
│   │   │                       │   ├── CandleStickChart.java
│   │   │                       │   ├── Chart.java
│   │   │                       │   ├── CombinedChart.java
│   │   │                       │   ├── HorizontalBarChart.java
│   │   │                       │   ├── LineChart.java
│   │   │                       │   ├── PieChart.java
│   │   │                       │   ├── PieRadarChartBase.java
│   │   │                       │   ├── RadarChart.java
│   │   │                       │   └── ScatterChart.java
│   │   │                       ├── components/
│   │   │                       │   ├── AxisBase.java
│   │   │                       │   ├── ComponentBase.java
│   │   │                       │   ├── Description.java
│   │   │                       │   ├── IMarker.java
│   │   │                       │   ├── Legend.java
│   │   │                       │   ├── LegendEntry.java
│   │   │                       │   ├── LimitLine.java
│   │   │                       │   ├── MarkerImage.java
│   │   │                       │   ├── MarkerView.java
│   │   │                       │   ├── XAxis.java
│   │   │                       │   └── YAxis.java
│   │   │                       ├── data/
│   │   │                       │   ├── BarData.java
│   │   │                       │   ├── BarDataSet.java
│   │   │                       │   ├── BarEntry.java
│   │   │                       │   ├── BarLineScatterCandleBubbleData.java
│   │   │                       │   ├── BarLineScatterCandleBubbleDataSet.java
│   │   │                       │   ├── BaseDataSet.java
│   │   │                       │   ├── BaseEntry.java
│   │   │                       │   ├── BubbleData.java
│   │   │                       │   ├── BubbleDataSet.java
│   │   │                       │   ├── BubbleEntry.java
│   │   │                       │   ├── CandleData.java
│   │   │                       │   ├── CandleDataSet.java
│   │   │                       │   ├── CandleEntry.java
│   │   │                       │   ├── ChartData.java
│   │   │                       │   ├── CombinedData.java
│   │   │                       │   ├── DataSet.java
│   │   │                       │   ├── Entry.java
│   │   │                       │   ├── LineData.java
│   │   │                       │   ├── LineDataSet.java
│   │   │                       │   ├── LineRadarDataSet.java
│   │   │                       │   ├── LineScatterCandleRadarDataSet.java
│   │   │                       │   ├── PieData.java
│   │   │                       │   ├── PieDataSet.java
│   │   │                       │   ├── PieEntry.java
│   │   │                       │   ├── RadarData.java
│   │   │                       │   ├── RadarDataSet.java
│   │   │                       │   ├── RadarEntry.java
│   │   │                       │   ├── ScatterData.java
│   │   │                       │   ├── ScatterDataSet.java
│   │   │                       │   └── filter/
│   │   │                       │       └── Approximator.java
│   │   │                       ├── exception/
│   │   │                       │   └── DrawingDataSetNotCreatedException.java
│   │   │                       ├── formatter/
│   │   │                       │   ├── ColorFormatter.java
│   │   │                       │   ├── DefaultAxisValueFormatter.java
│   │   │                       │   ├── DefaultFillFormatter.java
│   │   │                       │   ├── DefaultValueFormatter.java
│   │   │                       │   ├── IAxisValueFormatter.java
│   │   │                       │   ├── IFillFormatter.java
│   │   │                       │   ├── IValueFormatter.java
│   │   │                       │   ├── IndexAxisValueFormatter.java
│   │   │                       │   ├── LargeValueFormatter.java
│   │   │                       │   ├── PercentFormatter.java
│   │   │                       │   └── StackedValueFormatter.java
│   │   │                       ├── highlight/
│   │   │                       │   ├── BarHighlighter.java
│   │   │                       │   ├── ChartHighlighter.java
│   │   │                       │   ├── CombinedHighlighter.java
│   │   │                       │   ├── Highlight.java
│   │   │                       │   ├── HorizontalBarHighlighter.java
│   │   │                       │   ├── IHighlighter.java
│   │   │                       │   ├── PieHighlighter.java
│   │   │                       │   ├── PieRadarHighlighter.java
│   │   │                       │   ├── RadarHighlighter.java
│   │   │                       │   └── Range.java
│   │   │                       ├── interfaces/
│   │   │                       │   ├── dataprovider/
│   │   │                       │   │   ├── BarDataProvider.java
│   │   │                       │   │   ├── BarLineScatterCandleBubbleDataProvider.java
│   │   │                       │   │   ├── BubbleDataProvider.java
│   │   │                       │   │   ├── CandleDataProvider.java
│   │   │                       │   │   ├── ChartInterface.java
│   │   │                       │   │   ├── CombinedDataProvider.java
│   │   │                       │   │   ├── LineDataProvider.java
│   │   │                       │   │   └── ScatterDataProvider.java
│   │   │                       │   └── datasets/
│   │   │                       │       ├── IBarDataSet.java
│   │   │                       │       ├── IBarLineScatterCandleBubbleDataSet.java
│   │   │                       │       ├── IBubbleDataSet.java
│   │   │                       │       ├── ICandleDataSet.java
│   │   │                       │       ├── IDataSet.java
│   │   │                       │       ├── ILineDataSet.java
│   │   │                       │       ├── ILineRadarDataSet.java
│   │   │                       │       ├── ILineScatterCandleRadarDataSet.java
│   │   │                       │       ├── IPieDataSet.java
│   │   │                       │       ├── IRadarDataSet.java
│   │   │                       │       └── IScatterDataSet.java
│   │   │                       ├── jobs/
│   │   │                       │   ├── AnimatedMoveViewJob.java
│   │   │                       │   ├── AnimatedViewPortJob.java
│   │   │                       │   ├── AnimatedZoomJob.java
│   │   │                       │   ├── MoveViewJob.java
│   │   │                       │   ├── ViewPortJob.java
│   │   │                       │   └── ZoomJob.java
│   │   │                       ├── listener/
│   │   │                       │   ├── BarLineChartTouchListener.java
│   │   │                       │   ├── ChartTouchListener.java
│   │   │                       │   ├── OnChartGestureListener.java
│   │   │                       │   ├── OnChartValueSelectedListener.java
│   │   │                       │   ├── OnDrawLineChartTouchListener.java
│   │   │                       │   ├── OnDrawListener.java
│   │   │                       │   └── PieRadarChartTouchListener.java
│   │   │                       ├── matrix/
│   │   │                       │   └── Vector3.java
│   │   │                       ├── renderer/
│   │   │                       │   ├── AxisRenderer.java
│   │   │                       │   ├── BarChartRenderer.java
│   │   │                       │   ├── BarLineScatterCandleBubbleRenderer.java
│   │   │                       │   ├── BubbleChartRenderer.java
│   │   │                       │   ├── CandleStickChartRenderer.java
│   │   │                       │   ├── CombinedChartRenderer.java
│   │   │                       │   ├── DataRenderer.java
│   │   │                       │   ├── HorizontalBarChartRenderer.java
│   │   │                       │   ├── LegendRenderer.java
│   │   │                       │   ├── LineChartRenderer.java
│   │   │                       │   ├── LineRadarRenderer.java
│   │   │                       │   ├── LineScatterCandleRadarRenderer.java
│   │   │                       │   ├── PieChartRenderer.java
│   │   │                       │   ├── RadarChartRenderer.java
│   │   │                       │   ├── Renderer.java
│   │   │                       │   ├── ScatterChartRenderer.java
│   │   │                       │   ├── XAxisRenderer.java
│   │   │                       │   ├── XAxisRendererHorizontalBarChart.java
│   │   │                       │   ├── XAxisRendererRadarChart.java
│   │   │                       │   ├── YAxisRenderer.java
│   │   │                       │   ├── YAxisRendererHorizontalBarChart.java
│   │   │                       │   ├── YAxisRendererRadarChart.java
│   │   │                       │   └── scatter/
│   │   │                       │       ├── ChevronDownShapeRenderer.java
│   │   │                       │       ├── ChevronUpShapeRenderer.java
│   │   │                       │       ├── CircleShapeRenderer.java
│   │   │                       │       ├── CrossShapeRenderer.java
│   │   │                       │       ├── IShapeRenderer.java
│   │   │                       │       ├── SquareShapeRenderer.java
│   │   │                       │       ├── TriangleShapeRenderer.java
│   │   │                       │       └── XShapeRenderer.java
│   │   │                       └── utils/
│   │   │                           ├── ColorTemplate.java
│   │   │                           ├── EntryXComparator.java
│   │   │                           ├── FSize.java
│   │   │                           ├── FileUtils.java
│   │   │                           ├── HorizontalViewPortHandler.java
│   │   │                           ├── MPPointD.java
│   │   │                           ├── MPPointF.java
│   │   │                           ├── ObjectPool.java
│   │   │                           ├── Transformer.java
│   │   │                           ├── TransformerHorizontalBarChart.java
│   │   │                           ├── Utils.java
│   │   │                           └── ViewPortHandler.java
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── github/
│   │                   └── mikephil/
│   │                       └── charting/
│   │                           └── test/
│   │                               ├── ApproximatorTest.java
│   │                               ├── AxisRendererTest.java
│   │                               ├── BarDataTest.java
│   │                               ├── ChartDataTest.java
│   │                               ├── DataSetTest.java
│   │                               ├── LargeValueFormatterTest.java
│   │                               └── ObjectPoolTest.java
│   └── 说明.txt
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── cn/
│       │           └── laplacetech/
│       │               └── android/
│       │                   └── laplacekline/
│       │                       └── ExampleInstrumentedTest.kt
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── laplacetech/
│       │   │           └── android/
│       │   │               └── laplacekline/
│       │   │                   └── MainActivity.kt
│       │   └── res/
│       │       ├── drawable/
│       │       │   └── ic_launcher_background.xml
│       │       ├── drawable-v24/
│       │       │   └── ic_launcher_foreground.xml
│       │       ├── layout/
│       │       │   └── activity_main.xml
│       │       ├── mipmap-anydpi-v26/
│       │       │   ├── ic_launcher.xml
│       │       │   └── ic_launcher_round.xml
│       │       ├── raw/
│       │       │   ├── fifteen_minutes.json
│       │       │   ├── five_minutes.json
│       │       │   ├── four_hours.json
│       │       │   ├── one_hour.json
│       │       │   ├── one_minute.json
│       │       │   ├── oneday.json
│       │       │   └── twelve_hours.json
│       │       └── values/
│       │           ├── colors.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── laplacetech/
│                       └── android/
│                           └── laplacekline/
│                               └── ExampleUnitTest.kt
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── klinelib/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── cn/
│       │           └── laplacetech/
│       │               └── klinelib/
│       │                   └── ExampleInstrumentedTest.kt
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── laplacetech/
│       │   │           └── klinelib/
│       │   │               ├── chart/
│       │   │               │   ├── BarChartRenderer.kt
│       │   │               │   ├── BaseView.kt
│       │   │               │   ├── BubbleChartRenderer.kt
│       │   │               │   ├── CandleStickChartRenderer.kt
│       │   │               │   ├── ChartInfoView.kt
│       │   │               │   ├── ChartInfoViewHandler.kt
│       │   │               │   ├── ColorContentYAxisRenderer.kt
│       │   │               │   ├── CoupleChartGestureListener.kt
│       │   │               │   ├── CustomCombinedChart.kt
│       │   │               │   ├── CustomCombinedChartRenderer.kt
│       │   │               │   ├── CustomLineChart.kt
│       │   │               │   ├── CustomLineChartRenderer.kt
│       │   │               │   ├── InfoViewListener.kt
│       │   │               │   ├── KLineChartInfoView.kt
│       │   │               │   ├── KLineView.kt
│       │   │               │   ├── LineChartInfoView.kt
│       │   │               │   ├── LineChartRenderer.kt
│       │   │               │   ├── LineChartXMarkerView.kt
│       │   │               │   ├── LineChartYMarkerView.kt
│       │   │               │   ├── OnLoadMoreListener.kt
│       │   │               │   ├── ScatterChartRenderer.kt
│       │   │               │   ├── TickChart.kt
│       │   │               │   └── TimeLineView.kt
│       │   │               ├── model/
│       │   │               │   ├── HisData.kt
│       │   │               │   ├── KDJ.kt
│       │   │               │   ├── MACD.kt
│       │   │               │   └── RSV.kt
│       │   │               ├── util/
│       │   │               │   ├── DataUtils.kt
│       │   │               │   ├── DateUtils.kt
│       │   │               │   ├── DisplayUtils.kt
│       │   │               │   ├── DoubleUtil.kt
│       │   │               │   └── Extension.kt
│       │   │               └── view/
│       │   │                   ├── KLineMarkView.kt
│       │   │                   └── VolumeMarkView.kt
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── markview_volume.xml
│       │       │   ├── view_kline.xml
│       │       │   ├── view_kline_chart_info.xml
│       │       │   ├── view_line_chart_info.xml
│       │       │   ├── view_mp_line_chart.xml
│       │       │   ├── view_mp_real_price_marker.xml
│       │       │   └── view_timeline.xml
│       │       └── values/
│       │           ├── attr.xml
│       │           ├── colors.xml
│       │           ├── dimens.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── laplacetech/
│                       └── klinelib/
│                           └── ExampleUnitTest.kt
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild


================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/MPChartLib" />
            <option value="$PROJECT_DIR$/app" />
            <option value="$PROJECT_DIR$/klinelib" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

================================================
FILE: .idea/markdown-navigator/profiles_settings.xml
================================================
<component name="MarkdownNavigator.ProfileManager">
  <settings default="" pdf-export="" />
</component>

================================================
FILE: .idea/markdown-navigator.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="MarkdownProjectSettings" wasCopied="false">
    <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" openRemoteLinks="true" replaceUnicodeEmoji="false" lastLayoutSetsDefault="false">
      <PanelProvider>
        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
      </PanelProvider>
    </PreviewSettings>
    <ParserSettings gitHubSyntaxChange="false" emojiShortcuts="1" emojiImages="0">
      <PegdownExtensions>
        <option name="ABBREVIATIONS" value="false" />
        <option name="ANCHORLINKS" value="true" />
        <option name="ASIDE" value="false" />
        <option name="ATXHEADERSPACE" value="true" />
        <option name="AUTOLINKS" value="true" />
        <option name="DEFINITIONS" value="false" />
        <option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" />
        <option name="FENCED_CODE_BLOCKS" value="true" />
        <option name="FOOTNOTES" value="false" />
        <option name="HARDWRAPS" value="false" />
        <option name="HTML_DEEP_PARSER" value="false" />
        <option name="INSERTED" value="false" />
        <option name="QUOTES" value="false" />
        <option name="RELAXEDHRULES" value="true" />
        <option name="SMARTS" value="false" />
        <option name="STRIKETHROUGH" value="true" />
        <option name="SUBSCRIPT" value="false" />
        <option name="SUPERSCRIPT" value="false" />
        <option name="SUPPRESS_HTML_BLOCKS" value="false" />
        <option name="SUPPRESS_INLINE_HTML" value="false" />
        <option name="TABLES" value="true" />
        <option name="TASKLISTITEMS" value="true" />
        <option name="TOC" value="false" />
        <option name="WIKILINKS" value="true" />
      </PegdownExtensions>
      <ParserOptions>
        <option name="ADMONITION_EXT" value="false" />
        <option name="ATTRIBUTES_EXT" value="false" />
        <option name="COMMONMARK_LISTS" value="true" />
        <option name="DUMMY" value="false" />
        <option name="EMOJI_SHORTCUTS" value="true" />
        <option name="ENUMERATED_REFERENCES_EXT" value="false" />
        <option name="FLEXMARK_FRONT_MATTER" value="false" />
        <option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="false" />
        <option name="GFM_TABLE_RENDERING" value="true" />
        <option name="GITBOOK_URL_ENCODING" value="false" />
        <option name="GITHUB_LISTS" value="false" />
        <option name="GITHUB_WIKI_LINKS" value="true" />
        <option name="HEADER_ID_NO_DUPED_DASHES" value="false" />
        <option name="JEKYLL_FRONT_MATTER" value="false" />
        <option name="NO_TEXT_ATTRIBUTES" value="false" />
        <option name="PARSE_HTML_ANCHOR_ID" value="false" />
        <option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
      </ParserOptions>
    </ParserSettings>
    <HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true" embedImages="false" embedHttpImages="false" imageUriSerials="false">
      <GeneratorProvider>
        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
      </GeneratorProvider>
      <headerTop />
      <headerBottom />
      <bodyTop />
      <bodyBottom />
    </HtmlSettings>
    <CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssUriSerial="true" isCssTextEnabled="false" isDynamicPageWidth="true">
      <StylesheetProvider>
        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
      </StylesheetProvider>
      <ScriptProviders />
      <cssText />
      <cssUriHistory />
    </CssSettings>
    <HtmlExportSettings updateOnSave="false" parentDir="" targetDir="" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetExt="" useTargetExt="false" noCssNoScripts="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
    <LinkMapSettings>
      <textMaps />
    </LinkMapSettings>
  </component>
</project>

================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="NullableNotNullManager">
    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
    <option name="myNullables">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
        </list>
      </value>
    </option>
    <option name="myNotNulls">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
        </list>
      </value>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
</project>

================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/LaplaceKLine.iml" filepath="$PROJECT_DIR$/LaplaceKLine.iml" />
      <module fileurl="file://$PROJECT_DIR$/MPChartLib/MPChartLib.iml" filepath="$PROJECT_DIR$/MPChartLib/MPChartLib.iml" />
      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
      <module fileurl="file://$PROJECT_DIR$/klinelib/klinelib.iml" filepath="$PROJECT_DIR$/klinelib/klinelib.iml" />
    </modules>
  </component>
</project>

================================================
FILE: .idea/runConfigurations.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RunConfigurationProducerService">
    <option name="ignoredProducers">
      <set>
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
      </set>
    </option>
  </component>
</project>

================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
  </component>
</project>

================================================
FILE: MPChartLib/.gitignore
================================================
/build


================================================
FILE: MPChartLib/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs
================================================
#org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences
#Mon Jan 18 23:02:46 CET 2016
org.springsource.ide.eclipse.gradle.linkedresources=
org.springsource.ide.eclipse.gradle.rootprojectloc=..


================================================
FILE: MPChartLib/build.gradle
================================================
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
//apply plugin: 'realm-android'

android {
    compileSdkVersion 27
    buildToolsVersion '26.0.2'
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 27
        versionCode 3
        versionName '3.0.3'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
    testOptions {
        unitTests.returnDefaultValues = true // this prevents "not mocked" error
    }
}
dependencies {
    testImplementation 'junit:junit:4.12'
}



================================================
FILE: MPChartLib/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright (c) 2014 Philipp Jahoda <philjay.librarysup@gmail.com>

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
	<version>1.4.2-SNAPSHOT</version>
    <groupId>com.github.mikephil</groupId>
    <artifactId>MPAndroidChart</artifactId>
    <name>MPAndroidChart</name>
	<description>A simple Android chart view/graph view library, supporting line- bar- and piecharts as well as scaling, dragging and animations</description>
	<url>https://github.com/PhilJay/MPAndroidChart</url>
    <packaging>apklib</packaging>
    <!--<packaging>aar</packaging>-->

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
    	<sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.9.0-rc.2</version>
                <extensions>true</extensions>
                <configuration>
                    <!--<sdk>-->
                        <!--<path>${env.ANDROID_HOME}</path>-->
                        <!--<platform>16</platform>-->
                    <!--</sdk>-->
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <scope>provided</scope>
            <version>4.1.1.4</version>
        </dependency>
    </dependencies>


    <issueManagement>
        <url>https://github.com/PhilJay/MPAndroidChart/issues</url>
        <system>GitHub Issues</system>
    </issueManagement>

    <licenses>
        <license>
            <name>Apache License Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <url>https://github.com/PhilJay/MPAndroidChart</url>
        <connection>scm:git:git://github.com/PhilJay/MPAndroidChart.git</connection>
        <developerConnection>scm:git:git@github.com:PhilJay/MPAndroidChart.git</developerConnection>
    </scm>

    <developers>
        <developer>
            <name>Philipp Jahoda</name>
            <email>philjay.librarysup@gmail.com</email>
            <url>http://stackoverflow.com/users/1590502/philipp-jahoda</url>
            <id>PhilJay</id>
        </developer>
    </developers>
</project>


================================================
FILE: MPChartLib/proguard-project.txt
================================================
# 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 *;
#}


================================================
FILE: MPChartLib/project.properties
================================================
# 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-23
android.library=true


================================================
FILE: MPChartLib/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.github.mikephil.charting">

 <!--  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    </application> -->

</manifest>

================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/ChartAnimator.java
================================================

package com.github.mikephil.charting.animation;

import android.animation.ObjectAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.annotation.SuppressLint;

/**
 * Object responsible for all animations in the Chart. ANIMATIONS ONLY WORK FOR
 * API LEVEL 11 (Android 3.0.x) AND HIGHER.
 * 
 * @author Philipp Jahoda
 */
public class ChartAnimator {

    /** object that is updated upon animation update */
    private AnimatorUpdateListener mListener;

    public ChartAnimator() {

    }

    public ChartAnimator(AnimatorUpdateListener listener) {
        mListener = listener;
    }

    /**
     * ################ ################ ################ ################
     */
    /** CODE BELOW THIS RELATED TO ANIMATION */

    /** the phase that is animated and influences the drawn values on the y-axis */
    protected float mPhaseY = 1f;

    /** the phase that is animated and influences the drawn values on the x-axis */
    protected float mPhaseX = 1f;

    /**
     * ################ ################ ################ ################
     */
    /** METHODS FOR CUSTOM EASING */

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart.
     *
     * @param durationMillisX
     * @param durationMillisY
     * @param easingX
     * @param easingY
     */
    public void animateXY(int durationMillisX, int durationMillisY, EasingFunction easingX,
            EasingFunction easingY) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setInterpolator(easingY);
        animatorY.setDuration(
                durationMillisY);
        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setInterpolator(easingX);
        animatorX.setDuration(
                durationMillisX);

        // make sure only one animator produces update-callbacks (which then
        // call invalidate())
        if (durationMillisX > durationMillisY) {
            animatorX.addUpdateListener(mListener);
        } else {
            animatorY.addUpdateListener(mListener);
        }

        animatorX.start();
        animatorY.start();
    }

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     * @param easing
     */
    public void animateX(int durationMillis, EasingFunction easing) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setInterpolator(easing);
        animatorX.setDuration(durationMillis);
        animatorX.addUpdateListener(mListener);
        animatorX.start();
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     * @param easing
     */
    public void animateY(int durationMillis, EasingFunction easing) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setInterpolator(easing);
        animatorY.setDuration(durationMillis);
        animatorY.addUpdateListener(mListener);
        animatorY.start();
    }

    /**
     * ################ ################ ################ ################
     */
    /** METHODS FOR PREDEFINED EASING */

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart.
     *
     * @param durationMillisX
     * @param durationMillisY
     * @param easingX
     * @param easingY
     */
    public void animateXY(int durationMillisX, int durationMillisY, Easing.EasingOption easingX,
            Easing.EasingOption easingY) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setInterpolator(Easing.getEasingFunctionFromOption(easingY));
        animatorY.setDuration(
                durationMillisY);
        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setInterpolator(Easing.getEasingFunctionFromOption(easingX));
        animatorX.setDuration(
                durationMillisX);

        // make sure only one animator produces update-callbacks (which then
        // call invalidate())
        if (durationMillisX > durationMillisY) {
            animatorX.addUpdateListener(mListener);
        } else {
            animatorY.addUpdateListener(mListener);
        }

        animatorX.start();
        animatorY.start();
    }

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     * @param easing
     */
    public void animateX(int durationMillis, Easing.EasingOption easing) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setInterpolator(Easing.getEasingFunctionFromOption(easing));
        animatorX.setDuration(durationMillis);
        animatorX.addUpdateListener(mListener);
        animatorX.start();
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     * @param easing
     */
    public void animateY(int durationMillis, Easing.EasingOption easing) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setInterpolator(Easing.getEasingFunctionFromOption(easing));
        animatorY.setDuration(durationMillis);
        animatorY.addUpdateListener(mListener);
        animatorY.start();
    }

    /**
     * ################ ################ ################ ################
     */
    /** METHODS FOR ANIMATION WITHOUT EASING */

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart.
     *
     * @param durationMillisX
     * @param durationMillisY
     */
    public void animateXY(int durationMillisX, int durationMillisY) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setDuration(
                durationMillisY);
        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setDuration(
                durationMillisX);

        // make sure only one animator produces update-callbacks (which then
        // call invalidate())
        if (durationMillisX > durationMillisY) {
            animatorX.addUpdateListener(mListener);
        } else {
            animatorY.addUpdateListener(mListener);
        }

        animatorX.start();
        animatorY.start();
    }

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     */
    public void animateX(int durationMillis) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorX = ObjectAnimator.ofFloat(this, "phaseX", 0f, 1f);
        animatorX.setDuration(durationMillis);
        animatorX.addUpdateListener(mListener);
        animatorX.start();
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart.
     *
     * @param durationMillis
     */
    public void animateY(int durationMillis) {

        if (android.os.Build.VERSION.SDK_INT < 11)
            return;

        ObjectAnimator animatorY = ObjectAnimator.ofFloat(this, "phaseY", 0f, 1f);
        animatorY.setDuration(durationMillis);
        animatorY.addUpdateListener(mListener);
        animatorY.start();
    }

    /**
     * This gets the y-phase that is used to animate the values.
     *
     * @return
     */
    public float getPhaseY() {
        return mPhaseY;
    }

    /**
     * This modifys the y-phase that is used to animate the values.
     *
     * @param phase
     */
    public void setPhaseY(float phase) {
        mPhaseY = phase;
    }

    /**
     * This gets the x-phase that is used to animate the values.
     *
     * @return
     */
    public float getPhaseX() {
        return mPhaseX;
    }

    /**
     * This modifys the x-phase that is used to animate the values.
     *
     * @param phase
     */
    public void setPhaseX(float phase) {
        mPhaseX = phase;
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/Easing.java
================================================

package com.github.mikephil.charting.animation;

/**
 * Easing options.
 * 
 * @author Daniel Cohen Gindi
 */
public class Easing {

    /**
     * Use EasingOption instead of EasingFunction to avoid crashes below Android
     * 3.0
     */
    public enum EasingOption {
        Linear,
        EaseInQuad,
        EaseOutQuad,
        EaseInOutQuad,
        EaseInCubic,
        EaseOutCubic,
        EaseInOutCubic,
        EaseInQuart,
        EaseOutQuart,
        EaseInOutQuart,
        EaseInSine,
        EaseOutSine,
        EaseInOutSine,
        EaseInExpo,
        EaseOutExpo,
        EaseInOutExpo,
        EaseInCirc,
        EaseOutCirc,
        EaseInOutCirc,
        EaseInElastic,
        EaseOutElastic,
        EaseInOutElastic,
        EaseInBack,
        EaseOutBack,
        EaseInOutBack,
        EaseInBounce,
        EaseOutBounce,
        EaseInOutBounce,
    }

    public static EasingFunction getEasingFunctionFromOption(EasingOption easing) {
        switch (easing) {
            default:
            case Linear:
                return Easing.EasingFunctions.Linear;
            case EaseInQuad:
                return Easing.EasingFunctions.EaseInQuad;
            case EaseOutQuad:
                return Easing.EasingFunctions.EaseOutQuad;
            case EaseInOutQuad:
                return Easing.EasingFunctions.EaseInOutQuad;
            case EaseInCubic:
                return Easing.EasingFunctions.EaseInCubic;
            case EaseOutCubic:
                return Easing.EasingFunctions.EaseOutCubic;
            case EaseInOutCubic:
                return Easing.EasingFunctions.EaseInOutCubic;
            case EaseInQuart:
                return Easing.EasingFunctions.EaseInQuart;
            case EaseOutQuart:
                return Easing.EasingFunctions.EaseOutQuart;
            case EaseInOutQuart:
                return Easing.EasingFunctions.EaseInOutQuart;
            case EaseInSine:
                return Easing.EasingFunctions.EaseInSine;
            case EaseOutSine:
                return Easing.EasingFunctions.EaseOutSine;
            case EaseInOutSine:
                return Easing.EasingFunctions.EaseInOutSine;
            case EaseInExpo:
                return Easing.EasingFunctions.EaseInExpo;
            case EaseOutExpo:
                return Easing.EasingFunctions.EaseOutExpo;
            case EaseInOutExpo:
                return Easing.EasingFunctions.EaseInOutExpo;
            case EaseInCirc:
                return Easing.EasingFunctions.EaseInCirc;
            case EaseOutCirc:
                return Easing.EasingFunctions.EaseOutCirc;
            case EaseInOutCirc:
                return Easing.EasingFunctions.EaseInOutCirc;
            case EaseInElastic:
                return Easing.EasingFunctions.EaseInElastic;
            case EaseOutElastic:
                return Easing.EasingFunctions.EaseOutElastic;
            case EaseInOutElastic:
                return Easing.EasingFunctions.EaseInOutElastic;
            case EaseInBack:
                return Easing.EasingFunctions.EaseInBack;
            case EaseOutBack:
                return Easing.EasingFunctions.EaseOutBack;
            case EaseInOutBack:
                return Easing.EasingFunctions.EaseInOutBack;
            case EaseInBounce:
                return Easing.EasingFunctions.EaseInBounce;
            case EaseOutBounce:
                return Easing.EasingFunctions.EaseOutBounce;
            case EaseInOutBounce:
                return Easing.EasingFunctions.EaseInOutBounce;
        }
    }
    
    private static class EasingFunctions {
        
        /**
         * ########## ########## ########## ########## ########## ##########
         * PREDEFINED EASING FUNCTIONS BELOW THIS
         */

        public static final EasingFunction Linear = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // return elapsed / (float) duration;
            // }

            @Override
            public float getInterpolation(float input) {
                return input;
            }
        };

        public static final EasingFunction EaseInQuad = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return position * position;
            // }

            @Override
            public float getInterpolation(float input) {
                return input * input;
            }
        };

        public static final EasingFunction EaseOutQuad = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return -position * (position - 2.f);
            // }

            @Override
            public float getInterpolation(float input) {
                return -input * (input - 2f);
            }
        };

        public static final EasingFunction EaseInOutQuad = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (duration / 2.f);
            // if (position < 1.f)
            // {
            // return 0.5f * position * position;
            // }
            // return -0.5f * ((--position) * (position - 2.f) - 1.f);
            // }

            @Override
            public float getInterpolation(float input) {

                float position = input / 0.5f;

                if (position < 1.f) {
                    return 0.5f * position * position;
                }

                return -0.5f * ((--position) * (position - 2.f) - 1.f);
            }
        };

        public static final EasingFunction EaseInCubic = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return position * position * position;
            // }

            @Override
            public float getInterpolation(float input) {
                return input * input * input;
            }
        };

        public static final EasingFunction EaseOutCubic = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // float position = elapsed / (float) duration;
                    // position--;
                    // return (position * position * position + 1.f);
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        input--;
                        return (input * input * input + 1.f);
                    }
                };

        public static final EasingFunction EaseInOutCubic = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // float position = elapsed / (duration / 2.f);
                    // if (position < 1.f)
                    // {
                    // return 0.5f * position * position * position;
                    // }
                    // position -= 2.f;
                    // return 0.5f * (position * position * position + 2.f);
                    // }

                    @Override
                    public float getInterpolation(float input) {

                        float position = input / 0.5f;
                        if (position < 1.f) {
                            return 0.5f * position * position * position;
                        }
                        position -= 2.f;
                        return 0.5f * (position * position * position + 2.f);
                    }
                };

        public static final EasingFunction EaseInQuart = new EasingFunction() {

            public float getInterpolation(float input) {
                return input * input * input * input;
            }
        };

        public static final EasingFunction EaseOutQuart = new EasingFunction() {

            public float getInterpolation(float input) {
                input--;
                return -(input * input * input * input - 1f);
            }
        };

        public static final EasingFunction EaseInOutQuart = new
                EasingFunction() {
                    @Override
                    public float getInterpolation(float input) {
                        float position = input / 0.5f;
                        if (position < 1.f) {
                            return 0.5f * position * position * position * position;
                        }
                        position -= 2.f;
                        return -0.5f * (position * position * position * position - 2.f);
                    }
                };

        public static final EasingFunction EaseInSine = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return -(float) Math.cos(position * (Math.PI / 2.f)) + 1.f;
            // }
            @Override
            public float getInterpolation(float input) {
                return -(float) Math.cos(input * (Math.PI / 2.f)) + 1.f;
            }
        };

        public static final EasingFunction EaseOutSine = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return (float) Math.sin(position * (Math.PI / 2.f));
            // }
            @Override
            public float getInterpolation(float input) {
                return (float) Math.sin(input * (Math.PI / 2.f));
            }
        };

        public static final EasingFunction EaseInOutSine = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return -0.5f * ((float) Math.cos(Math.PI * position) - 1.f);
            // }

            @Override
            public float getInterpolation(float input) {
                return -0.5f * ((float) Math.cos(Math.PI * input) - 1.f);
            }
        };

        public static final EasingFunction EaseInExpo = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // return (elapsed == 0) ? 0.f : (float) Math.pow(2.f, 10.f * (elapsed
            // / (float) duration - 1.f));
            // }
            @Override
            public float getInterpolation(float input) {
                return (input == 0) ? 0.f : (float) Math.pow(2.f, 10.f * (input - 1.f));
            }
        };

        public static final EasingFunction EaseOutExpo = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // return (elapsed == duration) ? 1.f : (-(float) Math.pow(2.f, -10.f *
            // elapsed
            // / (float) duration) + 1.f);
            // }

            @Override
            public float getInterpolation(float input) {
                return (input == 1f) ? 1.f : (-(float) Math.pow(2.f, -10.f * (input + 1.f)));
            }
        };

        public static final EasingFunction EaseInOutExpo = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // if (elapsed == 0)
                    // {
                    // return 0.f;
                    // }
                    // if (elapsed == duration)
                    // {
                    // return 1.f;
                    // }
                    //
                    // float position = elapsed / (duration / 2.f);
                    // if (position < 1.f)
                    // {
                    // return 0.5f * (float) Math.pow(2.f, 10.f * (position - 1.f));
                    // }
                    // return 0.5f * (-(float) Math.pow(2.f, -10.f * --position) +
                    // 2.f);
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        if (input == 0)
                        {
                            return 0.f;
                        }
                        if (input == 1f)
                        {
                            return 1.f;
                        }

                        float position = input / 0.5f;
                        if (position < 1.f)
                        {
                            return 0.5f * (float) Math.pow(2.f, 10.f * (position - 1.f));
                        }
                        return 0.5f * (-(float) Math.pow(2.f, -10.f * --position) + 2.f);
                    }
                };

        public static final EasingFunction EaseInCirc = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // return -((float) Math.sqrt(1.f - position * position) - 1.f);
            // }

            @Override
            public float getInterpolation(float input) {
                return -((float) Math.sqrt(1.f - input * input) - 1.f);
            }
        };

        public static final EasingFunction EaseOutCirc = new EasingFunction() {
            // @Override
            // public float ease(long elapsed, long duration) {
            // float position = elapsed / (float) duration;
            // position--;
            // return (float) Math.sqrt(1.f - position * position);
            // }
            @Override
            public float getInterpolation(float input) {
                input--;
                return (float) Math.sqrt(1.f - input * input);
            }
        };

        public static final EasingFunction EaseInOutCirc = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // float position = elapsed / (duration / 2.f);
                    // if (position < 1.f)
                    // {
                    // return -0.5f * ((float) Math.sqrt(1.f - position * position)
                    // - 1.f);
                    // }
                    // return 0.5f * ((float) Math.sqrt(1.f - (position -= 2.f) *
                    // position)
                    // + 1.f);
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        float position = input / 0.5f;
                        if (position < 1.f)
                        {
                            return -0.5f * ((float) Math.sqrt(1.f - position * position) - 1.f);
                        }
                        return 0.5f * ((float) Math.sqrt(1.f - (position -= 2.f) * position)
                        + 1.f);
                    }
                };

        public static final EasingFunction EaseInElastic = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // if (elapsed == 0)
                    // {
                    // return 0.f;
                    // }
                    //
                    // float position = elapsed / (float) duration;
                    // if (position == 1)
                    // {
                    // return 1.f;
                    // }
                    //
                    // float p = duration * .3f;
                    // float s = p / (2.f * (float) Math.PI) * (float)
                    // Math.asin(1.f);
                    // return -((float) Math.pow(2.f, 10.f * (position -= 1.f)) *
                    // (float)
                    // Math
                    // .sin((position * duration - s) * (2.f * Math.PI) / p));
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        if (input == 0)
                        {
                            return 0.f;
                        }

                        float position = input;
                        if (position == 1)
                        {
                            return 1.f;
                        }

                        float p = .3f;
                        float s = p / (2.f * (float) Math.PI) * (float) Math.asin(1.f);
                        return -((float) Math.pow(2.f, 10.f * (position -= 1.f)) * (float)
                        Math
                                .sin((position - s) * (2.f * Math.PI) / p));
                    }
                };

        public static final EasingFunction EaseOutElastic = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // if (elapsed == 0)
                    // {
                    // return 0.f;
                    // }
                    //
                    // float position = elapsed / (float) duration;
                    // if (position == 1)
                    // {
                    // return 1.f;
                    // }
                    //
                    // float p = duration * .3f;
                    // float s = p / (2 * (float) Math.PI) * (float) Math.asin(1.f);
                    // return (float) Math.pow(2, -10 * position)
                    // * (float) Math.sin((position * duration - s) * (2.f *
                    // Math.PI) / p) +
                    // 1.f;
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        if (input == 0)
                        {
                            return 0.f;
                        }

                        float position = input;
                        if (position == 1)
                        {
                            return 1.f;
                        }

                        float p = .3f;
                        float s = p / (2 * (float) Math.PI) * (float) Math.asin(1.f);
                        return (float) Math.pow(2, -10 * position)
                                * (float) Math.sin((position - s) * (2.f * Math.PI) / p) +
                                1.f;
                    }
                };

        public static final EasingFunction EaseInOutElastic = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // if (elapsed == 0)
                    // {
                    // return 0.f;
                    // }
                    //
                    // float position = elapsed / (duration / 2.f);
                    // if (position == 2)
                    // {
                    // return 1.f;
                    // }
                    //
                    // float p = duration * (.3f * 1.5f);
                    // float s = p / (2.f * (float) Math.PI) * (float)
                    // Math.asin(1.f);
                    // if (position < 1.f)
                    // {
                    // return -.5f
                    // * ((float) Math.pow(2.f, 10.f * (position -= 1.f)) * (float)
                    // Math
                    // .sin((position * duration - s) * (2.f * Math.PI) / p));
                    // }
                    // return (float) Math.pow(2.f, -10.f * (position -= 1.f))
                    // * (float) Math.sin((position * duration - s) * (2.f *
                    // Math.PI) / p) *
                    // .5f
                    // + 1.f;
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        if (input == 0)
                        {
                            return 0.f;
                        }

                        float position = input / 0.5f;
                        if (position == 2)
                        {
                            return 1.f;
                        }

                        float p = (.3f * 1.5f);
                        float s = p / (2.f * (float) Math.PI) * (float) Math.asin(1.f);
                        if (position < 1.f)
                        {
                            return -.5f
                                    * ((float) Math.pow(2.f, 10.f * (position -= 1.f)) * (float) Math
                                            .sin((position * 1f - s) * (2.f * Math.PI) / p));
                        }
                        return (float) Math.pow(2.f, -10.f * (position -= 1.f))
                                * (float) Math.sin((position * 1f - s) * (2.f * Math.PI) / p) *
                                .5f
                                + 1.f;
                    }
                };

        public static final EasingFunction EaseInBack = new EasingFunction()
        {
            // @Override
            // public float ease(long elapsed, long duration) {
            // final float s = 1.70158f;
            // float position = elapsed / (float) duration;
            // return position * position * ((s + 1.f) * position - s);
            // }

            @Override
            public float getInterpolation(float input) {
                final float s = 1.70158f;
                float position = input;
                return position * position * ((s + 1.f) * position - s);
            }
        };

        public static final EasingFunction EaseOutBack = new EasingFunction()
        {
            // @Override
            // public float ease(long elapsed, long duration) {
            // final float s = 1.70158f;
            // float position = elapsed / (float) duration;
            // position--;
            // return (position * position * ((s + 1.f) * position + s) + 1.f);
            // }

            @Override
            public float getInterpolation(float input) {
                final float s = 1.70158f;
                float position = input;
                position--;
                return (position * position * ((s + 1.f) * position + s) + 1.f);
            }
        };

        public static final EasingFunction EaseInOutBack = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // float s = 1.70158f;
                    // float position = elapsed / (duration / 2.f);
                    // if (position < 1.f)
                    // {
                    // return 0.5f * (position * position * (((s *= (1.525f)) + 1.f)
                    // *
                    // position - s));
                    // }
                    // return 0.5f * ((position -= 2.f) * position
                    // * (((s *= (1.525f)) + 1.f) * position + s) + 2.f);
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        float s = 1.70158f;
                        float position = input / 0.5f;
                        if (position < 1.f)
                        {
                            return 0.5f * (position * position * (((s *= (1.525f)) + 1.f) *
                                    position - s));
                        }
                        return 0.5f * ((position -= 2.f) * position
                                * (((s *= (1.525f)) + 1.f) * position + s) + 2.f);
                    }
                };

        public static final EasingFunction EaseInBounce = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // return 1.f - EaseOutBounce.ease(duration - elapsed,
                    // duration);
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        return 1.f - EaseOutBounce.getInterpolation(1f - input);
                    }
                };

        public static final EasingFunction EaseOutBounce = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // float position = elapsed / (float) duration;
                    // if (position < (1.f / 2.75f))
                    // {
                    // return (7.5625f * position * position);
                    // }
                    // else if (position < (2.f / 2.75f))
                    // {
                    // return (7.5625f * (position -= (1.5f / 2.75f)) * position +
                    // .75f);
                    // }
                    // else if (position < (2.5f / 2.75f))
                    // {
                    // return (7.5625f * (position -= (2.25f / 2.75f)) * position +
                    // .9375f);
                    // }
                    // else
                    // {
                    // return (7.5625f * (position -= (2.625f / 2.75f)) * position +
                    // .984375f);
                    // }
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        float position = input;
                        if (position < (1.f / 2.75f))
                        {
                            return (7.5625f * position * position);
                        }
                        else if (position < (2.f / 2.75f))
                        {
                            return (7.5625f * (position -= (1.5f / 2.75f)) * position + .75f);
                        }
                        else if (position < (2.5f / 2.75f))
                        {
                            return (7.5625f * (position -= (2.25f / 2.75f)) * position + .9375f);
                        }
                        else
                        {
                            return (7.5625f * (position -= (2.625f / 2.75f)) * position +
                            .984375f);
                        }
                    }
                };

        public static final EasingFunction EaseInOutBounce = new
                EasingFunction() {
                    // @Override
                    // public float ease(long elapsed, long duration) {
                    // if (elapsed < duration / 2.f)
                    // {
                    // return EaseInBounce.ease(elapsed * 2, duration) * .5f;
                    // }
                    // return EaseOutBounce.ease(elapsed * 2 - duration, duration) *
                    // .5f +
                    // .5f;
                    // }

                    @Override
                    public float getInterpolation(float input) {
                        if (input < 0.5f)
                        {
                            return EaseInBounce.getInterpolation(input * 2) * .5f;
                        }
                        return EaseOutBounce.getInterpolation(input * 2 - 1f) * .5f +
                        .5f;
                    }
                };

    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/EasingFunction.java
================================================
package com.github.mikephil.charting.animation;

import android.animation.TimeInterpolator;
import android.annotation.SuppressLint;

/**
 * Interface for creating custom made easing functions. Uses the
 * TimeInterpolator interface provided by Android.
 */
@SuppressLint("NewApi")
public interface EasingFunction extends TimeInterpolator {

    @Override
    float getInterpolation(float input);
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.java
================================================

package com.github.mikephil.charting.buffer;

import java.util.List;

/**
 * Buffer class to boost performance while drawing. Concept: Replace instead of
 * recreate.
 * 
 * @author Philipp Jahoda
 * @param <T> The data the buffer accepts to be fed with.
 */
public abstract class AbstractBuffer<T> {

    /** index in the buffer */
    protected int index = 0;

    /** float-buffer that holds the data points to draw, order: x,y,x,y,... */
    public final float[] buffer;

    /** animation phase x-axis */
    protected float phaseX = 1f;

    /** animation phase y-axis */
    protected float phaseY = 1f;

    /** indicates from which x-index the visible data begins */
    protected int mFrom = 0;

    /** indicates to which x-index the visible data ranges */
    protected int mTo = 0;

    /**
     * Initialization with buffer-size.
     * 
     * @param size
     */
    public AbstractBuffer(int size) {
        index = 0;
        buffer = new float[size];
    }

    /** limits the drawing on the x-axis */
    public void limitFrom(int from) {
        if (from < 0)
            from = 0;
        mFrom = from;
    }

    /** limits the drawing on the x-axis */
    public void limitTo(int to) {
        if (to < 0)
            to = 0;
        mTo = to;
    }

    /**
     * Resets the buffer index to 0 and makes the buffer reusable.
     */
    public void reset() {
        index = 0;
    }

    /**
     * Returns the size (length) of the buffer array.
     * 
     * @return
     */
    public int size() {
        return buffer.length;
    }

    /**
     * Set the phases used for animations.
     * 
     * @param phaseX
     * @param phaseY
     */
    public void setPhases(float phaseX, float phaseY) {
        this.phaseX = phaseX;
        this.phaseY = phaseY;
    }

    /**
     * Builds up the buffer with the provided data and resets the buffer-index
     * after feed-completion. This needs to run FAST.
     * 
     * @param data
     */
    public abstract void feed(T data);
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.java
================================================

package com.github.mikephil.charting.buffer;

import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;

public class BarBuffer extends AbstractBuffer<IBarDataSet> {

    protected int mDataSetIndex = 0;
    protected int mDataSetCount = 1;
    protected boolean mContainsStacks = false;
    protected boolean mInverted = false;

    /** width of the bar on the x-axis, in values (not pixels) */
    protected float mBarWidth = 1f;

    public BarBuffer(int size, int dataSetCount, boolean containsStacks) {
        super(size);
        this.mDataSetCount = dataSetCount;
        this.mContainsStacks = containsStacks;
    }

    public void setBarWidth(float barWidth) {
        this.mBarWidth = barWidth;
    }

    public void setDataSet(int index) {
        this.mDataSetIndex = index;
    }

    public void setInverted(boolean inverted) {
        this.mInverted = inverted;
    }

    protected void addBar(float left, float top, float right, float bottom) {

        buffer[index++] = left;
        buffer[index++] = top;
        buffer[index++] = right;
        buffer[index++] = bottom;
    }

    @Override
    public void feed(IBarDataSet data) {

        float size = data.getEntryCount() * phaseX;
        float barWidthHalf = mBarWidth / 2f;

        for (int i = 0; i < size; i++) {

            BarEntry e = data.getEntryForIndex(i);

            if(e == null)
                continue;

            float x = e.getX();
            float y = e.getY();
            float[] vals = e.getYVals();

            if (!mContainsStacks || vals == null) {

                float left = x - barWidthHalf;
                float right = x + barWidthHalf;
                float bottom, top;

                if (mInverted) {
                    bottom = y >= 0 ? y : 0;
                    top = y <= 0 ? y : 0;
                } else {
                    top = y >= 0 ? y : 0;
                    bottom = y <= 0 ? y : 0;
                }

                // multiply the height of the rect with the phase
                if (top > 0)
                    top *= phaseY;
                else
                    bottom *= phaseY;

                addBar(left, top, right, bottom);

            } else {

                float posY = 0f;
                float negY = -e.getNegativeSum();
                float yStart = 0f;

                // fill the stack
                for (int k = 0; k < vals.length; k++) {

                    float value = vals[k];

                    if (value == 0.0f && (posY == 0.0f || negY == 0.0f)) {
                        // Take care of the situation of a 0.0 value, which overlaps a non-zero bar
                        y = value;
                        yStart = y;
                    } else if (value >= 0.0f) {
                        y = posY;
                        yStart = posY + value;
                        posY = yStart;
                    } else {
                        y = negY;
                        yStart = negY + Math.abs(value);
                        negY += Math.abs(value);
                    }

                    float left = x - barWidthHalf;
                    float right = x + barWidthHalf;
                    float bottom, top;

                    if (mInverted) {
                        bottom = y >= yStart ? y : yStart;
                        top = y <= yStart ? y : yStart;
                    } else {
                        top = y >= yStart ? y : yStart;
                        bottom = y <= yStart ? y : yStart;
                    }

                    // multiply the height of the rect with the phase
                    top *= phaseY;
                    bottom *= phaseY;

                    addBar(left, top, right, bottom);
                }
            }
        }

        reset();
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.java
================================================

package com.github.mikephil.charting.buffer;

import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;

public class HorizontalBarBuffer extends BarBuffer {

    public HorizontalBarBuffer(int size, int dataSetCount, boolean containsStacks) {
        super(size, dataSetCount, containsStacks);
    }

    @Override
    public void feed(IBarDataSet data) {

        float size = data.getEntryCount() * phaseX;
        float barWidthHalf = mBarWidth / 2f;

        for (int i = 0; i < size; i++) {

            BarEntry e = data.getEntryForIndex(i);

            if(e == null)
                continue;

            float x = e.getX();
            float y = e.getY();
            float[] vals = e.getYVals();

            if (!mContainsStacks || vals == null) {

                float bottom = x - barWidthHalf;
                float top = x + barWidthHalf;
                float left, right;
                if (mInverted) {
                    left = y >= 0 ? y : 0;
                    right = y <= 0 ? y : 0;
                } else {
                    right = y >= 0 ? y : 0;
                    left = y <= 0 ? y : 0;
                }

                // multiply the height of the rect with the phase
                if (right > 0)
                    right *= phaseY;
                else
                    left *= phaseY;

                addBar(left, top, right, bottom);

            } else {

                float posY = 0f;
                float negY = -e.getNegativeSum();
                float yStart = 0f;

                // fill the stack
                for (int k = 0; k < vals.length; k++) {

                    float value = vals[k];

                    if (value >= 0f) {
                        y = posY;
                        yStart = posY + value;
                        posY = yStart;
                    } else {
                        y = negY;
                        yStart = negY + Math.abs(value);
                        negY += Math.abs(value);
                    }

                    float bottom = x - barWidthHalf;
                    float top = x + barWidthHalf;
                    float left, right;
                    if (mInverted) {
                        left = y >= yStart ? y : yStart;
                        right = y <= yStart ? y : yStart;
                    } else {
                        right = y >= yStart ? y : yStart;
                        left = y <= yStart ? y : yStart;
                    }

                    // multiply the height of the rect with the phase
                    right *= phaseY;
                    left *= phaseY;

                    addBar(left, top, right, bottom);
                }
            }
        }

        reset();
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarChart.java
================================================
package com.github.mikephil.charting.charts;

import android.content.Context;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;

import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.highlight.BarHighlighter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.renderer.BarChartRenderer;

/**
 * Chart that draws bars.
 *
 * @author Philipp Jahoda
 */
public class BarChart extends BarLineChartBase<BarData> implements BarDataProvider {

    /**
     * flag that indicates whether the highlight should be full-bar oriented, or single-value?
     */
    protected boolean mHighlightFullBarEnabled = false;

    /**
     * if set to true, all values are drawn above their bars, instead of below their top
     */
    private boolean mDrawValueAboveBar = true;

    /**
     * if set to true, a grey area is drawn behind each bar that indicates the maximum value
     */
    private boolean mDrawBarShadow = false;

    private boolean mFitBars = false;

    public BarChart(Context context) {
        super(context);
    }

    public BarChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BarChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new BarChartRenderer(this, mAnimator, mViewPortHandler);

        setHighlighter(new BarHighlighter(this));

        getXAxis().setSpaceMin(0.5f);
        getXAxis().setSpaceMax(0.5f);
    }

    @Override
    protected void calcMinMax() {

        if (mFitBars) {
            mXAxis.calculate(mData.getXMin() - mData.getBarWidth() / 2f, mData.getXMax() + mData.getBarWidth() / 2f);
        } else {
            mXAxis.calculate(mData.getXMin(), mData.getXMax());
        }

        // calculate axis range (min / max) according to provided data
        mAxisLeft.calculate(mData.getYMin(YAxis.AxisDependency.LEFT), mData.getYMax(YAxis.AxisDependency.LEFT));
        mAxisRight.calculate(mData.getYMin(YAxis.AxisDependency.RIGHT), mData.getYMax(YAxis.AxisDependency
                .RIGHT));
    }

    /**
     * Returns the Highlight object (contains x-index and DataSet index) of the selected value at the given touch
     * point
     * inside the BarChart.
     *
     * @param x
     * @param y
     * @return
     */
    @Override
    public Highlight getHighlightByTouchPoint(float x, float y) {

        if (mData == null) {
            Log.e(LOG_TAG, "Can't select by touch. No data set.");
            return null;
        } else {
            Highlight h = getHighlighter().getHighlight(x, y);
            if (h == null || !isHighlightFullBarEnabled()) return h;

            // For isHighlightFullBarEnabled, remove stackIndex
            return new Highlight(h.getX(), h.getY(),
                    h.getXPx(), h.getYPx(),
                    h.getDataSetIndex(), -1, h.getAxis());
        }
    }

    /**
     * Returns the bounding box of the specified Entry in the specified DataSet. Returns null if the Entry could not be
     * found in the charts data.  Performance-intensive code should use void getBarBounds(BarEntry, RectF) instead.
     *
     * @param e
     * @return
     */
    public RectF getBarBounds(BarEntry e) {

        RectF bounds = new RectF();
        getBarBounds(e, bounds);

        return bounds;
    }

    /**
     * The passed outputRect will be assigned the values of the bounding box of the specified Entry in the specified DataSet.
     * The rect will be assigned Float.MIN_VALUE in all locations if the Entry could not be found in the charts data.
     *
     * @param e
     * @return
     */
    public void getBarBounds(BarEntry e, RectF outputRect) {

        RectF bounds = outputRect;

        IBarDataSet set = mData.getDataSetForEntry(e);

        if (set == null) {
            bounds.set(Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE);
            return;
        }

        float y = e.getY();
        float x = e.getX();

        float barWidth = mData.getBarWidth();

        float left = x - barWidth / 2f;
        float right = x + barWidth / 2f;
        float top = y >= 0 ? y : 0;
        float bottom = y <= 0 ? y : 0;

        bounds.set(left, top, right, bottom);

        getTransformer(set.getAxisDependency()).rectValueToPixel(outputRect);
    }

    /**
     * If set to true, all values are drawn above their bars, instead of below their top.
     *
     * @param enabled
     */
    public void setDrawValueAboveBar(boolean enabled) {
        mDrawValueAboveBar = enabled;
    }

    /**
     * returns true if drawing values above bars is enabled, false if not
     *
     * @return
     */
    public boolean isDrawValueAboveBarEnabled() {
        return mDrawValueAboveBar;
    }

    /**
     * If set to true, a grey area is drawn behind each bar that indicates the maximum value. Enabling his will reduce
     * performance by about 50%.
     *
     * @param enabled
     */
    public void setDrawBarShadow(boolean enabled) {
        mDrawBarShadow = enabled;
    }

    /**
     * returns true if drawing shadows (maxvalue) for each bar is enabled, false if not
     *
     * @return
     */
    public boolean isDrawBarShadowEnabled() {
        return mDrawBarShadow;
    }

    /**
     * Set this to true to make the highlight operation full-bar oriented, false to make it highlight single values (relevant
     * only for stacked). If enabled, highlighting operations will highlight the whole bar, even if only a single stack entry
     * was tapped.
     * Default: false
     *
     * @param enabled
     */
    public void setHighlightFullBarEnabled(boolean enabled) {
        mHighlightFullBarEnabled = enabled;
    }

    /**
     * @return true the highlight operation is be full-bar oriented, false if single-value
     */
    @Override
    public boolean isHighlightFullBarEnabled() {
        return mHighlightFullBarEnabled;
    }

    /**
     * Highlights the value at the given x-value in the given DataSet. Provide
     * -1 as the dataSetIndex to undo all highlighting.
     *
     * @param x
     * @param dataSetIndex
     * @param stackIndex   the index inside the stack - only relevant for stacked entries
     */
    public void highlightValue(float x, int dataSetIndex, int stackIndex) {
        highlightValue(new Highlight(x, dataSetIndex, stackIndex), false);
    }

    @Override
    public BarData getBarData() {
        return mData;
    }

    /**
     * Adds half of the bar width to each side of the x-axis range in order to allow the bars of the barchart to be
     * fully displayed.
     * Default: false
     *
     * @param enabled
     */
    public void setFitBars(boolean enabled) {
        mFitBars = enabled;
    }

    /**
     * Groups all BarDataSet objects this data object holds together by modifying the x-value of their entries.
     * Previously set x-values of entries will be overwritten. Leaves space between bars and groups as specified
     * by the parameters.
     * Calls notifyDataSetChanged() afterwards.
     *
     * @param fromX      the starting point on the x-axis where the grouping should begin
     * @param groupSpace the space between groups of bars in values (not pixels) e.g. 0.8f for bar width 1f
     * @param barSpace   the space between individual bars in values (not pixels) e.g. 0.1f for bar width 1f
     */
    public void groupBars(float fromX, float groupSpace, float barSpace) {

        if (getBarData() == null) {
            throw new RuntimeException("You need to set data for the chart before grouping bars.");
        } else {
            getBarData().groupBars(fromX, groupSpace, barSpace);
            notifyDataSetChanged();
        }
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarLineChartBase.java
================================================

package com.github.mikephil.charting.charts;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

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.BarLineScatterCandleBubbleData;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.highlight.ChartHighlighter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.dataprovider.BarLineScatterCandleBubbleDataProvider;
import com.github.mikephil.charting.interfaces.datasets.IBarLineScatterCandleBubbleDataSet;
import com.github.mikephil.charting.jobs.AnimatedMoveViewJob;
import com.github.mikephil.charting.jobs.AnimatedZoomJob;
import com.github.mikephil.charting.jobs.MoveViewJob;
import com.github.mikephil.charting.jobs.ZoomJob;
import com.github.mikephil.charting.listener.BarLineChartTouchListener;
import com.github.mikephil.charting.listener.OnDrawListener;
import com.github.mikephil.charting.renderer.XAxisRenderer;
import com.github.mikephil.charting.renderer.YAxisRenderer;
import com.github.mikephil.charting.utils.MPPointD;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Transformer;
import com.github.mikephil.charting.utils.Utils;

/**
 * Base-class of LineChart, BarChart, ScatterChart and CandleStickChart.
 *
 * @author Philipp Jahoda
 */
@SuppressLint("RtlHardcoded")
public abstract class BarLineChartBase<T extends BarLineScatterCandleBubbleData<? extends
        IBarLineScatterCandleBubbleDataSet<? extends Entry>>>
        extends Chart<T> implements BarLineScatterCandleBubbleDataProvider {

    /**
     * the maximum number of entries to which values will be drawn
     * (entry numbers greater than this value will cause value-labels to disappear)
     */
    protected int mMaxVisibleCount = 100;

    /**
     * flag that indicates if auto scaling on the y axis is enabled
     */
    protected boolean mAutoScaleMinMaxEnabled = false;

    /**
     * flag that indicates if pinch-zoom is enabled. if true, both x and y axis
     * can be scaled with 2 fingers, if false, x and y axis can be scaled
     * separately
     */
    protected boolean mPinchZoomEnabled = false;

    /**
     * flag that indicates if double tap zoom is enabled or not
     */
    protected boolean mDoubleTapToZoomEnabled = true;

    /**
     * flag that indicates if highlighting per dragging over a fully zoomed out
     * chart is enabled
     */
    protected boolean mHighlightPerDragEnabled = true;

    /**
     * if true, dragging is enabled for the chart
     */
    private boolean mDragEnabled = true;

    private boolean mScaleXEnabled = true;
    private boolean mScaleYEnabled = true;

    /**
     * paint object for the (by default) lightgrey background of the grid
     */
    protected Paint mGridBackgroundPaint;

    protected Paint mBorderPaint;

    /**
     * flag indicating if the grid background should be drawn or not
     */
    protected boolean mDrawGridBackground = false;

    protected boolean mDrawBorders = false;

    protected boolean mClipValuesToContent = false;

    /**
     * Sets the minimum offset (padding) around the chart, defaults to 15
     */
    protected float mMinOffset = 15.f;

    /**
     * flag indicating if the chart should stay at the same position after a rotation. Default is false.
     */
    protected boolean mKeepPositionOnRotation = false;

    /**
     * the listener for user drawing on the chart
     */
    protected OnDrawListener mDrawListener;

    /**
     * the object representing the labels on the left y-axis
     */
    protected YAxis mAxisLeft;

    /**
     * the object representing the labels on the right y-axis
     */
    protected YAxis mAxisRight;

    protected YAxisRenderer mAxisRendererLeft;
    protected YAxisRenderer mAxisRendererRight;

    protected Transformer mLeftAxisTransformer;
    protected Transformer mRightAxisTransformer;

    protected XAxisRenderer mXAxisRenderer;

    // /** the approximator object used for data filtering */
    // private Approximator mApproximator;

    public BarLineChartBase(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public BarLineChartBase(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BarLineChartBase(Context context) {
        super(context);
    }

    @Override
    protected void init() {
        super.init();

        mAxisLeft = new YAxis(AxisDependency.LEFT);
        mAxisRight = new YAxis(AxisDependency.RIGHT);

        mLeftAxisTransformer = new Transformer(mViewPortHandler);
        mRightAxisTransformer = new Transformer(mViewPortHandler);

        mAxisRendererLeft = new YAxisRenderer(mViewPortHandler, mAxisLeft, mLeftAxisTransformer);
        mAxisRendererRight = new YAxisRenderer(mViewPortHandler, mAxisRight, mRightAxisTransformer);

        mXAxisRenderer = new XAxisRenderer(mViewPortHandler, mXAxis, mLeftAxisTransformer);

        setHighlighter(new ChartHighlighter(this));

        mChartTouchListener = new BarLineChartTouchListener(this, mViewPortHandler.getMatrixTouch(), 3f);

        mGridBackgroundPaint = new Paint();
        mGridBackgroundPaint.setStyle(Style.FILL);
        // mGridBackgroundPaint.setColor(Color.WHITE);
        mGridBackgroundPaint.setColor(Color.rgb(240, 240, 240)); // light
        // grey

        mBorderPaint = new Paint();
        mBorderPaint.setStyle(Style.STROKE);
        mBorderPaint.setColor(Color.BLACK);
        mBorderPaint.setStrokeWidth(Utils.convertDpToPixel(1f));
    }

    // for performance tracking
    private long totalTime = 0;
    private long drawCycles = 0;

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mData == null)
            return;

        long starttime = System.currentTimeMillis();

        // execute all drawing commands
        drawGridBackground(canvas);

        if (mAutoScaleMinMaxEnabled) {
            autoScale();
        }

        if (mAxisLeft.isEnabled())
            mAxisRendererLeft.computeAxis(mAxisLeft.mAxisMinimum, mAxisLeft.mAxisMaximum, mAxisLeft.isInverted());

        if (mAxisRight.isEnabled())
            mAxisRendererRight.computeAxis(mAxisRight.mAxisMinimum, mAxisRight.mAxisMaximum, mAxisRight.isInverted());

        if (mXAxis.isEnabled())
            mXAxisRenderer.computeAxis(mXAxis.mAxisMinimum, mXAxis.mAxisMaximum, false);

        mXAxisRenderer.renderAxisLine(canvas);
        mAxisRendererLeft.renderAxisLine(canvas);
        mAxisRendererRight.renderAxisLine(canvas);

        mXAxisRenderer.renderGridLines(canvas);
        mAxisRendererLeft.renderGridLines(canvas);
        mAxisRendererRight.renderGridLines(canvas);

        if (mXAxis.isEnabled() && mXAxis.isDrawLimitLinesBehindDataEnabled())
            mXAxisRenderer.renderLimitLines(canvas);

        if (mAxisLeft.isEnabled() && mAxisLeft.isDrawLimitLinesBehindDataEnabled())
            mAxisRendererLeft.renderLimitLines(canvas);

        if (mAxisRight.isEnabled() && mAxisRight.isDrawLimitLinesBehindDataEnabled())
            mAxisRendererRight.renderLimitLines(canvas);

        // make sure the data cannot be drawn outside the content-rect
        int clipRestoreCount = canvas.save();
        canvas.clipRect(mViewPortHandler.getContentRect());

        mRenderer.drawData(canvas);

        // if highlighting is enabled
        if (valuesToHighlight())
            mRenderer.drawHighlighted(canvas, mIndicesToHighlight);

        // Removes clipping rectangle
        canvas.restoreToCount(clipRestoreCount);

        mRenderer.drawExtras(canvas);

        if (mXAxis.isEnabled() && !mXAxis.isDrawLimitLinesBehindDataEnabled())
            mXAxisRenderer.renderLimitLines(canvas);

        //调整为在画Y轴之后
//        if (mAxisLeft.isEnabled() && !mAxisLeft.isDrawLimitLinesBehindDataEnabled())
//            mAxisRendererLeft.renderLimitLines(canvas);

        if (mAxisRight.isEnabled() && !mAxisRight.isDrawLimitLinesBehindDataEnabled())
            mAxisRendererRight.renderLimitLines(canvas);

        mXAxisRenderer.renderAxisLabels(canvas);
        mAxisRendererLeft.renderAxisLabels(canvas);
        mAxisRendererRight.renderAxisLabels(canvas);

        if (isClipValuesToContentEnabled()) {
            clipRestoreCount = canvas.save();
            canvas.clipRect(mViewPortHandler.getContentRect());

            mRenderer.drawValues(canvas);

            canvas.restoreToCount(clipRestoreCount);
        } else {
            mRenderer.drawValues(canvas);
        }

        mLegendRenderer.renderLegend(canvas);

        drawDescription(canvas);
        //调整画限制线到画MarkView之前
        if (mAxisLeft.isEnabled() && !mAxisLeft.isDrawLimitLinesBehindDataEnabled())
            mAxisRendererLeft.renderLimitLines(canvas);
        drawMarkers(canvas);

        if (mLogEnabled) {
            long drawtime = (System.currentTimeMillis() - starttime);
            totalTime += drawtime;
            drawCycles += 1;
            long average = totalTime / drawCycles;
            Log.i(LOG_TAG, "Drawtime: " + drawtime + " ms, average: " + average + " ms, cycles: "
                    + drawCycles);
        }
    }

    /**
     * RESET PERFORMANCE TRACKING FIELDS
     */
    public void resetTracking() {
        totalTime = 0;
        drawCycles = 0;
    }

    protected void prepareValuePxMatrix() {

        if (mLogEnabled)
            Log.i(LOG_TAG, "Preparing Value-Px Matrix, xmin: " + mXAxis.mAxisMinimum + ", xmax: "
                    + mXAxis.mAxisMaximum + ", xdelta: " + mXAxis.mAxisRange);

        mRightAxisTransformer.prepareMatrixValuePx(mXAxis.mAxisMinimum,
                mXAxis.mAxisRange,
                mAxisRight.mAxisRange,
                mAxisRight.mAxisMinimum);
        mLeftAxisTransformer.prepareMatrixValuePx(mXAxis.mAxisMinimum,
                mXAxis.mAxisRange,
                mAxisLeft.mAxisRange,
                mAxisLeft.mAxisMinimum);
    }

    protected void prepareOffsetMatrix() {

        mRightAxisTransformer.prepareMatrixOffset(mAxisRight.isInverted());
        mLeftAxisTransformer.prepareMatrixOffset(mAxisLeft.isInverted());
    }

    @Override
    public void notifyDataSetChanged() {

        if (mData == null) {
            if (mLogEnabled)
                Log.i(LOG_TAG, "Preparing... DATA NOT SET.");
            return;
        } else {
            if (mLogEnabled)
                Log.i(LOG_TAG, "Preparing...");
        }

        if (mRenderer != null)
            mRenderer.initBuffers();

        calcMinMax();

        mAxisRendererLeft.computeAxis(mAxisLeft.mAxisMinimum, mAxisLeft.mAxisMaximum, mAxisLeft.isInverted());
        mAxisRendererRight.computeAxis(mAxisRight.mAxisMinimum, mAxisRight.mAxisMaximum, mAxisRight.isInverted());
        mXAxisRenderer.computeAxis(mXAxis.mAxisMinimum, mXAxis.mAxisMaximum, false);

        if (mLegend != null)
            mLegendRenderer.computeLegend(mData);

        calculateOffsets();
    }

    /**
     * Performs auto scaling of the axis by recalculating the minimum and maximum y-values based on the entries currently in view.
     */
    protected void autoScale() {

        final float fromX = getLowestVisibleX();
        final float toX = getHighestVisibleX();

        mData.calcMinMaxY(fromX, toX);

        mXAxis.calculate(mData.getXMin(), mData.getXMax());

        // calculate axis range (min / max) according to provided data

        if (mAxisLeft.isEnabled())
            mAxisLeft.calculate(mData.getYMin(AxisDependency.LEFT),
                    mData.getYMax(AxisDependency.LEFT));

        if (mAxisRight.isEnabled())
            mAxisRight.calculate(mData.getYMin(AxisDependency.RIGHT),
                    mData.getYMax(AxisDependency.RIGHT));

        calculateOffsets();
    }

    @Override
    protected void calcMinMax() {

        mXAxis.calculate(mData.getXMin(), mData.getXMax());

        // calculate axis range (min / max) according to provided data
        mAxisLeft.calculate(mData.getYMin(AxisDependency.LEFT), mData.getYMax(AxisDependency.LEFT));
        mAxisRight.calculate(mData.getYMin(AxisDependency.RIGHT), mData.getYMax(AxisDependency
                .RIGHT));
    }

    protected void calculateLegendOffsets(RectF offsets) {

        offsets.left = 0.f;
        offsets.right = 0.f;
        offsets.top = 0.f;
        offsets.bottom = 0.f;

        // setup offsets for legend
        if (mLegend != null && mLegend.isEnabled() && !mLegend.isDrawInsideEnabled()) {
            switch (mLegend.getOrientation()) {
                case VERTICAL:

                    switch (mLegend.getHorizontalAlignment()) {
                        case LEFT:
                            offsets.left += Math.min(mLegend.mNeededWidth,
                                    mViewPortHandler.getChartWidth() * mLegend.getMaxSizePercent())
                                    + mLegend.getXOffset();
                            break;

                        case RIGHT:
                            offsets.right += Math.min(mLegend.mNeededWidth,
                                    mViewPortHandler.getChartWidth() * mLegend.getMaxSizePercent())
                                    + mLegend.getXOffset();
                            break;

                        case CENTER:

                            switch (mLegend.getVerticalAlignment()) {
                                case TOP:
                                    offsets.top += Math.min(mLegend.mNeededHeight,
                                            mViewPortHandler.getChartHeight() * mLegend.getMaxSizePercent())
                                            + mLegend.getYOffset();
                                    break;

                                case BOTTOM:
                                    offsets.bottom += Math.min(mLegend.mNeededHeight,
                                            mViewPortHandler.getChartHeight() * mLegend.getMaxSizePercent())
                                            + mLegend.getYOffset();
                                    break;

                                default:
                                    break;
                            }
                    }

                    break;

                case HORIZONTAL:

                    switch (mLegend.getVerticalAlignment()) {
                        case TOP:
                            offsets.top += Math.min(mLegend.mNeededHeight,
                                    mViewPortHandler.getChartHeight() * mLegend.getMaxSizePercent())
                                    + mLegend.getYOffset();

                            if (getXAxis().isEnabled() && getXAxis().isDrawLabelsEnabled())
                                offsets.top += getXAxis().mLabelRotatedHeight;
                            break;

                        case BOTTOM:
                            offsets.bottom += Math.min(mLegend.mNeededHeight,
                                    mViewPortHandler.getChartHeight() * mLegend.getMaxSizePercent())
                                    + mLegend.getYOffset();

                            if (getXAxis().isEnabled() && getXAxis().isDrawLabelsEnabled())
                                offsets.bottom += getXAxis().mLabelRotatedHeight;
                            break;

                        default:
                            break;
                    }
                    break;
            }
        }
    }

    private RectF mOffsetsBuffer = new RectF();

    @Override
    public void calculateOffsets() {

        if (!mCustomViewPortEnabled) {

            float offsetLeft = 0f, offsetRight = 0f, offsetTop = 0f, offsetBottom = 0f;

            calculateLegendOffsets(mOffsetsBuffer);

            offsetLeft += mOffsetsBuffer.left;
            offsetTop += mOffsetsBuffer.top;
            offsetRight += mOffsetsBuffer.right;
            offsetBottom += mOffsetsBuffer.bottom;

            // offsets for y-labels
            if (mAxisLeft.needsOffset()) {
                offsetLeft += mAxisLeft.getRequiredWidthSpace(mAxisRendererLeft
                        .getPaintAxisLabels());
            }

            if (mAxisRight.needsOffset()) {
                offsetRight += mAxisRight.getRequiredWidthSpace(mAxisRendererRight
                        .getPaintAxisLabels());
            }

            if (mXAxis.isEnabled() && mXAxis.isDrawLabelsEnabled()) {

                float xlabelheight = mXAxis.mLabelRotatedHeight + mXAxis.getYOffset();

                // offsets for x-labels
                if (mXAxis.getPosition() == XAxisPosition.BOTTOM) {

                    offsetBottom += xlabelheight;

                } else if (mXAxis.getPosition() == XAxisPosition.TOP) {

                    offsetTop += xlabelheight;

                } else if (mXAxis.getPosition() == XAxisPosition.BOTH_SIDED) {

                    offsetBottom += xlabelheight;
                    offsetTop += xlabelheight;
                }
            }

            offsetTop += getExtraTopOffset();
            offsetRight += getExtraRightOffset();
            offsetBottom += getExtraBottomOffset();
            offsetLeft += getExtraLeftOffset();

            float minOffset = Utils.convertDpToPixel(mMinOffset);

            mViewPortHandler.restrainViewPort(
                    Math.max(minOffset, offsetLeft),
                    Math.max(minOffset, offsetTop),
                    Math.max(minOffset, offsetRight),
                    Math.max(minOffset, offsetBottom));

            if (mLogEnabled) {
                Log.i(LOG_TAG, "offsetLeft: " + offsetLeft + ", offsetTop: " + offsetTop
                        + ", offsetRight: " + offsetRight + ", offsetBottom: " + offsetBottom);
                Log.i(LOG_TAG, "Content: " + mViewPortHandler.getContentRect().toString());
            }
        }

        prepareOffsetMatrix();
        prepareValuePxMatrix();
    }

    /**
     * draws the grid background
     */
    protected void drawGridBackground(Canvas c) {

        if (mDrawGridBackground) {

            // draw the grid background
            c.drawRect(mViewPortHandler.getContentRect(), mGridBackgroundPaint);
        }

        if (mDrawBorders) {
            c.drawRect(mViewPortHandler.getContentRect(), mBorderPaint);
        }
    }

    /**
     * Returns the Transformer class that contains all matrices and is
     * responsible for transforming values into pixels on the screen and
     * backwards.
     *
     * @return
     */
    public Transformer getTransformer(AxisDependency which) {
        if (which == AxisDependency.LEFT)
            return mLeftAxisTransformer;
        else
            return mRightAxisTransformer;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);

        if (mChartTouchListener == null || mData == null)
            return false;

        // check if touch gestures are enabled
        if (!mTouchEnabled)
            return false;
        else
            return mChartTouchListener.onTouch(this, event);
    }

    @Override
    public void computeScroll() {

        if (mChartTouchListener instanceof BarLineChartTouchListener)
            ((BarLineChartTouchListener) mChartTouchListener).computeScroll();
    }

    /**
     * ################ ################ ################ ################
     */
    /**
     * CODE BELOW THIS RELATED TO SCALING AND GESTURES AND MODIFICATION OF THE
     * VIEWPORT
     */

    protected Matrix mZoomMatrixBuffer = new Matrix();

    /**
     * Zooms in by 1.4f, into the charts center.
     */
    public void zoomIn() {

        MPPointF center = mViewPortHandler.getContentCenter();

        mViewPortHandler.zoomIn(center.x, -center.y, mZoomMatrixBuffer);
        mViewPortHandler.refresh(mZoomMatrixBuffer, this, false);

        MPPointF.recycleInstance(center);

        // Range might have changed, which means that Y-axis labels
        // could have changed in size, affecting Y-axis size.
        // So we need to recalculate offsets.
        calculateOffsets();
        postInvalidate();
    }

    /**
     * Zooms out by 0.7f, from the charts center.
     */
    public void zoomOut() {

        MPPointF center = mViewPortHandler.getContentCenter();

        mViewPortHandler.zoomOut(center.x, -center.y, mZoomMatrixBuffer);
        mViewPortHandler.refresh(mZoomMatrixBuffer, this, false);

        MPPointF.recycleInstance(center);

        // Range might have changed, which means that Y-axis labels
        // could have changed in size, affecting Y-axis size.
        // So we need to recalculate offsets.
        calculateOffsets();
        postInvalidate();
    }

    /**
     * Zooms out to original size.
     */
    public void resetZoom() {

        mViewPortHandler.resetZoom(mZoomMatrixBuffer);
        mViewPortHandler.refresh(mZoomMatrixBuffer, this, false);

        // Range might have changed, which means that Y-axis labels
        // could have changed in size, affecting Y-axis size.
        // So we need to recalculate offsets.
        calculateOffsets();
        postInvalidate();
    }

    /**
     * Zooms in or out by the given scale factor. x and y are the coordinates
     * (in pixels) of the zoom center.
     *
     * @param scaleX if < 1f --> zoom out, if > 1f --> zoom in
     * @param scaleY if < 1f --> zoom out, if > 1f --> zoom in
     * @param x
     * @param y
     */
    public void zoom(float scaleX, float scaleY, float x, float y) {

        mViewPortHandler.zoom(scaleX, scaleY, x, -y, mZoomMatrixBuffer);
        mViewPortHandler.refresh(mZoomMatrixBuffer, this, false);

        // Range might have changed, which means that Y-axis labels
        // could have changed in size, affecting Y-axis size.
        // So we need to recalculate offsets.
        calculateOffsets();
        postInvalidate();
    }

    /**
     * Zooms in or out by the given scale factor.
     * x and y are the values (NOT PIXELS) of the zoom center..
     *
     * @param scaleX
     * @param scaleY
     * @param xValue
     * @param yValue
     * @param axis   the axis relative to which the zoom should take place
     */
    public void zoom(float scaleX, float scaleY, float xValue, float yValue, AxisDependency axis) {

        Runnable job = ZoomJob.getInstance(mViewPortHandler, scaleX, scaleY, xValue, yValue, getTransformer(axis), axis, this);
        addViewportJob(job);
    }

    /**
     * Zooms to the center of the chart with the given scale factor.
     *
     * @param scaleX
     * @param scaleY
     */
    public void zoomToCenter(float scaleX, float scaleY) {

        MPPointF center = getCenterOffsets();

        Matrix save = mZoomMatrixBuffer;
        mViewPortHandler.zoom(scaleX, scaleY, center.x, -center.y, save);
        mViewPortHandler.refresh(save, this, false);
    }

    /**
     * Zooms by the specified scale factor to the specified values on the specified axis.
     *
     * @param scaleX
     * @param scaleY
     * @param xValue
     * @param yValue
     * @param axis
     * @param duration
     */
    @TargetApi(11)
    public void zoomAndCenterAnimated(float scaleX, float scaleY, float xValue, float yValue, AxisDependency axis,
                                      long duration) {

        if (android.os.Build.VERSION.SDK_INT >= 11) {

            MPPointD origin = getValuesByTouchPoint(mViewPortHandler.contentLeft(), mViewPortHandler.contentTop(), axis);

            Runnable job = AnimatedZoomJob.getInstance(mViewPortHandler, this, getTransformer(axis), getAxis(axis), mXAxis
                            .mAxisRange, scaleX, scaleY, mViewPortHandler.getScaleX(), mViewPortHandler.getScaleY(),
                    xValue, yValue, (float) origin.x, (float) origin.y, duration);
            addViewportJob(job);

            MPPointD.recycleInstance(origin);

        } else {
            Log.e(LOG_TAG, "Unable to execute zoomAndCenterAnimated(...) on API level < 11");
        }
    }

    protected Matrix mFitScreenMatrixBuffer = new Matrix();

    /**
     * Resets all zooming and dragging and makes the chart fit exactly it's
     * bounds.
     */
    public void fitScreen() {
        Matrix save = mFitScreenMatrixBuffer;
        mViewPortHandler.fitScreen(save);
        mViewPortHandler.refresh(save, this, false);

        calculateOffsets();
        postInvalidate();
    }

    /**
     * Sets the minimum scale factor value to which can be zoomed out. 1f =
     * fitScreen
     *
     * @param scaleX
     * @param scaleY
     */
    public void setScaleMinima(float scaleX, float scaleY) {
        mViewPortHandler.setMinimumScaleX(scaleX);
        mViewPortHandler.setMinimumScaleY(scaleY);
    }

    /**
     * Sets the size of the area (range on the x-axis) that should be maximum
     * visible at once (no further zooming out allowed). If this is e.g. set to
     * 10, no more than a range of 10 on the x-axis can be viewed at once without
     * scrolling.
     *
     * @param maxXRange The maximum visible range of x-values.
     */
    public void setVisibleXRangeMaximum(float maxXRange) {
        float xScale = mXAxis.mAxisRange / (maxXRange);
        mViewPortHandler.setMinimumScaleX(xScale);
    }

    /**
     * Sets the size of the area (range on the x-axis) that should be minimum
     * visible at once (no further zooming in allowed). If this is e.g. set to
     * 10, no less than a range of 10 on the x-axis can be viewed at once without
     * scrolling.
     *
     * @param minXRange The minimum visible range of x-values.
     */
    public void setVisibleXRangeMinimum(float minXRange) {
        float xScale = mXAxis.mAxisRange / (minXRange);
        mViewPortHandler.setMaximumScaleX(xScale);
    }

    /**
     * Limits the maximum and minimum x range that can be visible by pinching and zooming. e.g. minRange=10, maxRange=100 the
     * smallest range to be displayed at once is 10, and no more than a range of 100 values can be viewed at once without
     * scrolling
     *
     * @param minXRange
     * @param maxXRange
     */
    public void setVisibleXRange(float minXRange, float maxXRange) {
        float minScale = mXAxis.mAxisRange / minXRange;
        float maxScale = mXAxis.mAxisRange / maxXRange;
        mViewPortHandler.setMinMaxScaleX(minScale, maxScale);
    }

    /**
     * Sets the size of the area (range on the y-axis) that should be maximum
     * visible at once.
     *
     * @param maxYRange the maximum visible range on the y-axis
     * @param axis      the axis for which this limit should apply
     */
    public void setVisibleYRangeMaximum(float maxYRange, AxisDependency axis) {
        float yScale = getAxisRange(axis) / maxYRange;
        mViewPortHandler.setMinimumScaleY(yScale);
    }

    /**
     * Sets the size of the area (range on the y-axis) that should be minimum visible at once, no further zooming in possible.
     *
     * @param minYRange
     * @param axis      the axis for which this limit should apply
     */
    public void setVisibleYRangeMinimum(float minYRange, AxisDependency axis) {
        float yScale = getAxisRange(axis) / minYRange;
        mViewPortHandler.setMaximumScaleY(yScale);
    }

    /**
     * Limits the maximum and minimum y range that can be visible by pinching and zooming.
     *
     * @param minYRange
     * @param maxYRange
     * @param axis
     */
    public void setVisibleYRange(float minYRange, float maxYRange, AxisDependency axis) {
        float minScale = getAxisRange(axis) / minYRange;
        float maxScale = getAxisRange(axis) / maxYRange;
        mViewPortHandler.setMinMaxScaleY(minScale, maxScale);
    }


    /**
     * Moves the left side of the current viewport to the specified x-position.
     * This also refreshes the chart by calling invalidate().
     *
     * @param xValue
     */
    public void moveViewToX(float xValue) {

        Runnable job = MoveViewJob.getInstance(mViewPortHandler, xValue, 0f,
                getTransformer(AxisDependency.LEFT), this);

        addViewportJob(job);
    }

    /**
     * This will move the left side of the current viewport to the specified
     * x-value on the x-axis, and center the viewport to the specified y value on the y-axis.
     * This also refreshes the chart by calling invalidate().
     *
     * @param xValue
     * @param yValue
     * @param axis   - which axis should be used as a reference for the y-axis
     */
    public void moveViewTo(float xValue, float yValue, AxisDependency axis) {

        float yInView = getAxisRange(axis) / mViewPortHandler.getScaleY();

        Runnable job = MoveViewJob.getInstance(mViewPortHandler, xValue, yValue + yInView / 2f,
                getTransformer(axis), this);

        addViewportJob(job);
    }

    /**
     * This will move the left side of the current viewport to the specified x-value
     * and center the viewport to the y value animated.
     * This also refreshes the chart by calling invalidate().
     *
     * @param xValue
     * @param yValue
     * @param axis
     * @param duration the duration of the animation in milliseconds
     */
    @TargetApi(11)
    public void moveViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration) {

        if (android.os.Build.VERSION.SDK_INT >= 11) {

            MPPointD bounds = getValuesByTouchPoint(mViewPortHandler.contentLeft(), mViewPortHandler.contentTop(), axis);

            float yInView = getAxisRange(axis) / mViewPortHandler.getScaleY();

            Runnable job = AnimatedMoveViewJob.getInstance(mViewPortHandler, xValue, yValue + yInView / 2f,
                    getTransformer(axis), this, (float) bounds.x, (float) bounds.y, duration);

            addViewportJob(job);

            MPPointD.recycleInstance(bounds);
        } else {
            Log.e(LOG_TAG, "Unable to execute moveViewToAnimated(...) on API level < 11");
        }
    }

    /**
     * Centers the viewport to the specified y value on the y-axis.
     * This also refreshes the chart by calling invalidate().
     *
     * @param yValue
     * @param axis   - which axis should be used as a reference for the y-axis
     */
    public void centerViewToY(float yValue, AxisDependency axis) {

        float valsInView = getAxisRange(axis) / mViewPortHandler.getScaleY();

        Runnable job = MoveViewJob.getInstance(mViewPortHandler, 0f, yValue + valsInView / 2f,
                getTransformer(axis), this);

        addViewportJob(job);
    }

    /**
     * This will move the center of the current viewport to the specified
     * x and y value.
     * This also refreshes the chart by calling invalidate().
     *
     * @param xValue
     * @param yValue
     * @param axis   - which axis should be used as a reference for the y axis
     */
    public void centerViewTo(float xValue, float yValue, AxisDependency axis) {

        float yInView = getAxisRange(axis) / mViewPortHandler.getScaleY();
        float xInView = getXAxis().mAxisRange / mViewPortHandler.getScaleX();

        Runnable job = MoveViewJob.getInstance(mViewPortHandler,
                xValue - xInView / 2f, yValue + yInView / 2f,
                getTransformer(axis), this);

        addViewportJob(job);
    }

    /**
     * This will move the center of the current viewport to the specified
     * x and y value animated.
     *
     * @param xValue
     * @param yValue
     * @param axis
     * @param duration the duration of the animation in milliseconds
     */
    @TargetApi(11)
    public void centerViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration) {

        if (android.os.Build.VERSION.SDK_INT >= 11) {

            MPPointD bounds = getValuesByTouchPoint(mViewPortHandler.contentLeft(), mViewPortHandler.contentTop(), axis);

            float yInView = getAxisRange(axis) / mViewPortHandler.getScaleY();
            float xInView = getXAxis().mAxisRange / mViewPortHandler.getScaleX();

            Runnable job = AnimatedMoveViewJob.getInstance(mViewPortHandler,
                    xValue - xInView / 2f, yValue + yInView / 2f,
                    getTransformer(axis), this, (float) bounds.x, (float) bounds.y, duration);

            addViewportJob(job);

            MPPointD.recycleInstance(bounds);
        } else {
            Log.e(LOG_TAG, "Unable to execute centerViewToAnimated(...) on API level < 11");
        }
    }

    /**
     * flag that indicates if a custom viewport offset has been set
     */
    private boolean mCustomViewPortEnabled = false;

    /**
     * Sets custom offsets for the current ViewPort (the offsets on the sides of
     * the actual chart window). Setting this will prevent the chart from
     * automatically calculating it's offsets. Use resetViewPortOffsets() to
     * undo this. ONLY USE THIS WHEN YOU KNOW WHAT YOU ARE DOING, else use
     * setExtraOffsets(...).
     *
     * @param left
     * @param top
     * @param right
     * @param bottom
     */
    public void setViewPortOffsets(final float left, final float top,
                                   final float right, final float bottom) {

        mCustomViewPortEnabled = true;
        post(new Runnable() {

            @Override
            public void run() {

                mViewPortHandler.restrainViewPort(left, top, right, bottom);
                prepareOffsetMatrix();
                prepareValuePxMatrix();
            }
        });
    }

    /**
     * Resets all custom offsets set via setViewPortOffsets(...) method. Allows
     * the chart to again calculate all offsets automatically.
     */
    public void resetViewPortOffsets() {
        mCustomViewPortEnabled = false;
        calculateOffsets();
    }

    /**
     * ################ ################ ################ ################
     */
    /** CODE BELOW IS GETTERS AND SETTERS */

    /**
     * Returns the range of the specified axis.
     *
     * @param axis
     * @return
     */
    protected float getAxisRange(AxisDependency axis) {
        if (axis == AxisDependency.LEFT)
            return mAxisLeft.mAxisRange;
        else
            return mAxisRight.mAxisRange;
    }

    /**
     * Sets the OnDrawListener
     *
     * @param drawListener
     */
    public void setOnDrawListener(OnDrawListener drawListener) {
        this.mDrawListener = drawListener;
    }

    /**
     * Gets the OnDrawListener. May be null.
     *
     * @return
     */
    public OnDrawListener getDrawListener() {
        return mDrawListener;
    }

    protected float[] mGetPositionBuffer = new float[2];

    /**
     * Returns a recyclable MPPointF instance.
     * Returns the position (in pixels) the provided Entry has inside the chart
     * view or null, if the provided Entry is null.
     *
     * @param e
     * @return
     */
    public MPPointF getPosition(Entry e, AxisDependency axis) {

        if (e == null)
            return null;

        mGetPositionBuffer[0] = e.getX();
        mGetPositionBuffer[1] = e.getY();

        getTransformer(axis).pointValuesToPixel(mGetPositionBuffer);

        return MPPointF.getInstance(mGetPositionBuffer[0], mGetPositionBuffer[1]);
    }

    /**
     * sets the number of maximum visible drawn values on the chart only active
     * when setDrawValues() is enabled
     *
     * @param count
     */
    public void setMaxVisibleValueCount(int count) {
        this.mMaxVisibleCount = count;
    }

    public int getMaxVisibleCount() {
        return mMaxVisibleCount;
    }

    /**
     * Set this to true to allow highlighting per dragging over the chart
     * surface when it is fully zoomed out. Default: true
     *
     * @param enabled
     */
    public void setHighlightPerDragEnabled(boolean enabled) {
        mHighlightPerDragEnabled = enabled;
    }

    public boolean isHighlightPerDragEnabled() {
        return mHighlightPerDragEnabled;
    }

    /**
     * Sets the color for the background of the chart-drawing area (everything
     * behind the grid lines).
     *
     * @param color
     */
    public void setGridBackgroundColor(int color) {
        mGridBackgroundPaint.setColor(color);
    }

    /**
     * Set this to true to enable dragging (moving the chart with the finger)
     * for the chart (this does not effect scaling).
     *
     * @param enabled
     */
    public void setDragEnabled(boolean enabled) {
        this.mDragEnabled = enabled;
    }

    /**
     * Returns true if dragging is enabled for the chart, false if not.
     *
     * @return
     */
    public boolean isDragEnabled() {
        return mDragEnabled;
    }

    /**
     * Set this to true to enable scaling (zooming in and out by gesture) for
     * the chart (this does not effect dragging) on both X- and Y-Axis.
     *
     * @param enabled
     */
    public void setScaleEnabled(boolean enabled) {
        this.mScaleXEnabled = enabled;
        this.mScaleYEnabled = enabled;
    }

    public void setScaleXEnabled(boolean enabled) {
        mScaleXEnabled = enabled;
    }

    public void setScaleYEnabled(boolean enabled) {
        mScaleYEnabled = enabled;
    }

    public boolean isScaleXEnabled() {
        return mScaleXEnabled;
    }

    public boolean isScaleYEnabled() {
        return mScaleYEnabled;
    }

    /**
     * Set this to true to enable zooming in by double-tap on the chart.
     * Default: enabled
     *
     * @param enabled
     */
    public void setDoubleTapToZoomEnabled(boolean enabled) {
        mDoubleTapToZoomEnabled = enabled;
    }

    /**
     * Returns true if zooming via double-tap is enabled false if not.
     *
     * @return
     */
    public boolean isDoubleTapToZoomEnabled() {
        return mDoubleTapToZoomEnabled;
    }

    /**
     * set this to true to draw the grid background, false if not
     *
     * @param enabled
     */
    public void setDrawGridBackground(boolean enabled) {
        mDrawGridBackground = enabled;
    }

    /**
     * When enabled, the borders rectangle will be rendered.
     * If this is enabled, there is no point drawing the axis-lines of x- and y-axis.
     *
     * @param enabled
     */
    public void setDrawBorders(boolean enabled) {
        mDrawBorders = enabled;
    }

    /**
     * When enabled, the borders rectangle will be rendered.
     * If this is enabled, there is no point drawing the axis-lines of x- and y-axis.
     *
     * @return
     */
    public boolean isDrawBordersEnabled() {
        return mDrawBorders;
    }

    /**
     * When enabled, the values will be clipped to contentRect,
     *   otherwise they can bleed outside the content rect.
     *
     * @param enabled
     */
    public void setClipValuesToContent(boolean enabled) {
        mClipValuesToContent = enabled;
    }

    /**
     * When enabled, the values will be clipped to contentRect,
     *   otherwise they can bleed outside the content rect.
     *
     * @return
     */
    public boolean isClipValuesToContentEnabled() {
        return mClipValuesToContent;
    }

    /**
     * Sets the width of the border lines in dp.
     *
     * @param width
     */
    public void setBorderWidth(float width) {
        mBorderPaint.setStrokeWidth(Utils.convertDpToPixel(width));
    }

    /**
     * Sets the color of the chart border lines.
     *
     * @param color
     */
    public void setBorderColor(int color) {
        mBorderPaint.setColor(color);
    }

    /**
     * Gets the minimum offset (padding) around the chart, defaults to 15.f
     */
    public float getMinOffset() {
        return mMinOffset;
    }

    /**
     * Sets the minimum offset (padding) around the chart, defaults to 15.f
     */
    public void setMinOffset(float minOffset) {
        mMinOffset = minOffset;
    }

    /**
     * Returns true if keeping the position on rotation is enabled and false if not.
     */
    public boolean isKeepPositionOnRotation() {
        return mKeepPositionOnRotation;
    }

    /**
     * Sets whether the chart should keep its position (zoom / scroll) after a rotation (orientation change)
     */
    public void setKeepPositionOnRotation(boolean keepPositionOnRotation) {
        mKeepPositionOnRotation = keepPositionOnRotation;
    }

    /**
     * Returns a recyclable MPPointD instance
     * Returns the x and y values in the chart at the given touch point
     * (encapsulated in a MPPointD). This method transforms pixel coordinates to
     * coordinates / values in the chart. This is the opposite method to
     * getPixelForValues(...).
     *
     * @param x
     * @param y
     * @return
     */
    public MPPointD getValuesByTouchPoint(float x, float y, AxisDependency axis) {
        MPPointD result = MPPointD.getInstance(0, 0);
        getValuesByTouchPoint(x, y, axis, result);
        return result;
    }

    public void getValuesByTouchPoint(float x, float y, AxisDependency axis, MPPointD outputPoint) {
        getTransformer(axis).getValuesByTouchPoint(x, y, outputPoint);
    }

    /**
     * Returns a recyclable MPPointD instance
     * Transforms the given chart values into pixels. This is the opposite
     * method to getValuesByTouchPoint(...).
     *
     * @param x
     * @param y
     * @return
     */
    public MPPointD getPixelForValues(float x, float y, AxisDependency axis) {
        return getTransformer(axis).getPixelForValues(x, y);
    }

    /**
     * returns the Entry object displayed at the touched position of the chart
     *
     * @param x
     * @param y
     * @return
     */
    public Entry getEntryByTouchPoint(float x, float y) {
        Highlight h = getHighlightByTouchPoint(x, y);
        if (h != null) {
            return mData.getEntryForHighlight(h);
        }
        return null;
    }

    /**
     * returns the DataSet object displayed at the touched position of the chart
     *
     * @param x
     * @param y
     * @return
     */
    public IBarLineScatterCandleBubbleDataSet getDataSetByTouchPoint(float x, float y) {
        Highlight h = getHighlightByTouchPoint(x, y);
        if (h != null) {
            return mData.getDataSetByIndex(h.getDataSetIndex());
        }
        return null;
    }

    /**
     * buffer for storing lowest visible x point
     */
    protected MPPointD posForGetLowestVisibleX = MPPointD.getInstance(0, 0);

    /**
     * Returns the lowest x-index (value on the x-axis) that is still visible on
     * the chart.
     *
     * @return
     */
    @Override
    public float getLowestVisibleX() {
        getTransformer(AxisDependency.LEFT).getValuesByTouchPoint(mViewPortHandler.contentLeft(),
                mViewPortHandler.contentBottom(), posForGetLowestVisibleX);
        float result = (float) Math.max(mXAxis.mAxisMinimum, posForGetLowestVisibleX.x);
        return result;
    }

    /**
     * buffer for storing highest visible x point
     */
    protected MPPointD posForGetHighestVisibleX = MPPointD.getInstance(0, 0);

    /**
     * Returns the highest x-index (value on the x-axis) that is still visible
     * on the chart.
     *
     * @return
     */
    @Override
    public float getHighestVisibleX() {
        getTransformer(AxisDependency.LEFT).getValuesByTouchPoint(mViewPortHandler.contentRight(),
                mViewPortHandler.contentBottom(), posForGetHighestVisibleX);
        float result = (float) Math.min(mXAxis.mAxisMaximum, posForGetHighestVisibleX.x);
        return result;
    }

    /**
     * Returns the range visible on the x-axis.
     *
     * @return
     */
    public float getVisibleXRange() {
        return Math.abs(getHighestVisibleX() - getLowestVisibleX());
    }

    /**
     * returns the current x-scale factor
     */
    public float getScaleX() {
        if (mViewPortHandler == null)
            return 1f;
        else
            return mViewPortHandler.getScaleX();
    }

    /**
     * returns the current y-scale factor
     */
    public float getScaleY() {
        if (mViewPortHandler == null)
            return 1f;
        else
            return mViewPortHandler.getScaleY();
    }

    /**
     * if the chart is fully zoomed out, return true
     *
     * @return
     */
    public boolean isFullyZoomedOut() {
        return mViewPortHandler.isFullyZoomedOut();
    }

    /**
     * Returns the left y-axis object. In the horizontal bar-chart, this is the
     * top axis.
     *
     * @return
     */
    public YAxis getAxisLeft() {
        return mAxisLeft;
    }

    /**
     * Returns the right y-axis object. In the horizontal bar-chart, this is the
     * bottom axis.
     *
     * @return
     */
    public YAxis getAxisRight() {
        return mAxisRight;
    }

    /**
     * Returns the y-axis object to the corresponding AxisDependency. In the
     * horizontal bar-chart, LEFT == top, RIGHT == BOTTOM
     *
     * @param axis
     * @return
     */
    public YAxis getAxis(AxisDependency axis) {
        if (axis == AxisDependency.LEFT)
            return mAxisLeft;
        else
            return mAxisRight;
    }

    @Override
    public boolean isInverted(AxisDependency axis) {
        return getAxis(axis).isInverted();
    }

    /**
     * If set to true, both x and y axis can be scaled simultaneously with 2 fingers, if false,
     * x and y axis can be scaled separately. default: false
     *
     * @param enabled
     */
    public void setPinchZoom(boolean enabled) {
        mPinchZoomEnabled = enabled;
    }

    /**
     * returns true if pinch-zoom is enabled, false if not
     *
     * @return
     */
    public boolean isPinchZoomEnabled() {
        return mPinchZoomEnabled;
    }

    /**
     * Set an offset in dp that allows the user to drag the chart over it's
     * bounds on the x-axis.
     *
     * @param offset
     */
    public void setDragOffsetX(float offset) {
        mViewPortHandler.setDragOffsetX(offset);
    }

    /**
     * Set an offset in dp that allows the user to drag the chart over it's
     * bounds on the y-axis.
     *
     * @param offset
     */
    public void setDragOffsetY(float offset) {
        mViewPortHandler.setDragOffsetY(offset);
    }

    /**
     * Returns true if both drag offsets (x and y) are zero or smaller.
     *
     * @return
     */
    public boolean hasNoDragOffset() {
        return mViewPortHandler.hasNoDragOffset();
    }

    public XAxisRenderer getRendererXAxis() {
        return mXAxisRenderer;
    }

    /**
     * Sets a custom XAxisRenderer and overrides the existing (default) one.
     *
     * @param xAxisRenderer
     */
    public void setXAxisRenderer(XAxisRenderer xAxisRenderer) {
        mXAxisRenderer = xAxisRenderer;
    }

    public YAxisRenderer getRendererLeftYAxis() {
        return mAxisRendererLeft;
    }

    /**
     * Sets a custom axis renderer for the left axis and overwrites the existing one.
     *
     * @param rendererLeftYAxis
     */
    public void setRendererLeftYAxis(YAxisRenderer rendererLeftYAxis) {
        mAxisRendererLeft = rendererLeftYAxis;
    }

    public YAxisRenderer getRendererRightYAxis() {
        return mAxisRendererRight;
    }

    /**
     * Sets a custom axis renderer for the right acis and overwrites the existing one.
     *
     * @param rendererRightYAxis
     */
    public void setRendererRightYAxis(YAxisRenderer rendererRightYAxis) {
        mAxisRendererRight = rendererRightYAxis;
    }

    @Override
    public float getYChartMax() {
        return Math.max(mAxisLeft.mAxisMaximum, mAxisRight.mAxisMaximum);
    }

    @Override
    public float getYChartMin() {
        return Math.min(mAxisLeft.mAxisMinimum, mAxisRight.mAxisMinimum);
    }

    /**
     * Returns true if either the left or the right or both axes are inverted.
     *
     * @return
     */
    public boolean isAnyAxisInverted() {
        if (mAxisLeft.isInverted())
            return true;
        if (mAxisRight.isInverted())
            return true;
        return false;
    }

    /**
     * Flag that indicates if auto scaling on the y axis is enabled. This is
     * especially interesting for charts displaying financial data.
     *
     * @param enabled the y axis automatically adjusts to the min and max y
     *                values of the current x axis range whenever the viewport
     *                changes
     */
    public void setAutoScaleMinMaxEnabled(boolean enabled) {
        mAutoScaleMinMaxEnabled = enabled;
    }

    /**
     * @return true if auto scaling on the y axis is enabled.
     * @default false
     */
    public boolean isAutoScaleMinMaxEnabled() {
        return mAutoScaleMinMaxEnabled;
    }

    @Override
    public void setPaint(Paint p, int which) {
        super.setPaint(p, which);

        switch (which) {
            case PAINT_GRID_BACKGROUND:
                mGridBackgroundPaint = p;
                break;
        }
    }

    @Override
    public Paint getPaint(int which) {
        Paint p = super.getPaint(which);
        if (p != null)
            return p;

        switch (which) {
            case PAINT_GRID_BACKGROUND:
                return mGridBackgroundPaint;
        }

        return null;
    }

    protected float[] mOnSizeChangedBuffer = new float[2];

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

        // Saving current position of chart.
        mOnSizeChangedBuffer[0] = mOnSizeChangedBuffer[1] = 0;

        if (mKeepPositionOnRotation) {
            mOnSizeChangedBuffer[0] = mViewPortHandler.contentLeft();
            mOnSizeChangedBuffer[1] = mViewPortHandler.contentTop();
            getTransformer(AxisDependency.LEFT).pixelsToValue(mOnSizeChangedBuffer);
        }

        //Superclass transforms chart.
        super.onSizeChanged(w, h, oldw, oldh);

        if (mKeepPositionOnRotation) {

            //Restoring old position of chart.
            getTransformer(AxisDependency.LEFT).pointValuesToPixel(mOnSizeChangedBuffer);
            mViewPortHandler.centerViewPort(mOnSizeChangedBuffer, this);
        } else {
            mViewPortHandler.refresh(mViewPortHandler.getMatrixTouch(), this, true);
        }
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BubbleChart.java
================================================

package com.github.mikephil.charting.charts;

import android.content.Context;
import android.util.AttributeSet;

import com.github.mikephil.charting.data.BubbleData;
import com.github.mikephil.charting.interfaces.dataprovider.BubbleDataProvider;
import com.github.mikephil.charting.renderer.BubbleChartRenderer;

/**
 * The BubbleChart. Draws bubbles. Bubble chart implementation: Copyright 2015
 * Pierre-Marc Airoldi Licensed under Apache License 2.0. In the BubbleChart, it
 * is the area of the bubble, not the radius or diameter of the bubble that
 * conveys the data.
 *
 * @author Philipp Jahoda
 */
public class BubbleChart extends BarLineChartBase<BubbleData> implements BubbleDataProvider {

    public BubbleChart(Context context) {
        super(context);
    }

    public BubbleChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BubbleChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new BubbleChartRenderer(this, mAnimator, mViewPortHandler);
    }

    public BubbleData getBubbleData() {
        return mData;
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/CandleStickChart.java
================================================

package com.github.mikephil.charting.charts;

import android.content.Context;
import android.util.AttributeSet;

import com.github.mikephil.charting.data.CandleData;
import com.github.mikephil.charting.interfaces.dataprovider.CandleDataProvider;
import com.github.mikephil.charting.renderer.CandleStickChartRenderer;

/**
 * Financial chart type that draws candle-sticks (OHCL chart).
 *
 * @author Philipp Jahoda
 */
public class CandleStickChart extends BarLineChartBase<CandleData> implements CandleDataProvider {

    public CandleStickChart(Context context) {
        super(context);
    }

    public CandleStickChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CandleStickChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new CandleStickChartRenderer(this, mAnimator, mViewPortHandler);

        getXAxis().setSpaceMin(0.5f);
        getXAxis().setSpaceMax(0.5f);
    }

    @Override
    public CandleData getCandleData() {
        return mData;
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java
================================================

package com.github.mikephil.charting.charts;

import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.provider.MediaStore.Images;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;

import com.github.mikephil.charting.animation.ChartAnimator;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.animation.EasingFunction;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.IMarker;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.ChartData;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.DefaultValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.highlight.ChartHighlighter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.highlight.IHighlighter;
import com.github.mikephil.charting.interfaces.dataprovider.ChartInterface;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.listener.ChartTouchListener;
import com.github.mikephil.charting.listener.OnChartGestureListener;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.github.mikephil.charting.renderer.DataRenderer;
import com.github.mikephil.charting.renderer.LegendRenderer;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

/**
 * Baseclass of all Chart-Views.
 *
 * @author Philipp Jahoda
 */
@SuppressLint("NewApi")
public abstract class Chart<T extends ChartData<? extends IDataSet<? extends Entry>>> extends
        ViewGroup
        implements ChartInterface {

    public static final String LOG_TAG = "MPAndroidChart";

    /**
     * flag that indicates if logging is enabled or not
     */
    protected boolean mLogEnabled = false;

    /**
     * object that holds all data that was originally set for the chart, before
     * it was modified or any filtering algorithms had been applied
     */
    protected T mData = null;

    /**
     * Flag that indicates if highlighting per tap (touch) is enabled
     */
    protected boolean mHighLightPerTapEnabled = true;

    /**
     * If set to true, chart continues to scroll after touch up
     */
    private boolean mDragDecelerationEnabled = true;

    /**
     * Deceleration friction coefficient in [0 ; 1] interval, higher values
     * indicate that speed will decrease slowly, for example if it set to 0, it
     * will stop immediately. 1 is an invalid value, and will be converted to
     * 0.999f automatically.
     */
    private float mDragDecelerationFrictionCoef = 0.9f;

    /**
     * default value-formatter, number of digits depends on provided chart-data
     */
    protected DefaultValueFormatter mDefaultValueFormatter = new DefaultValueFormatter(0);

    /**
     * paint object used for drawing the description text in the bottom right
     * corner of the chart
     */
    protected Paint mDescPaint;

    /**
     * paint object for drawing the information text when there are no values in
     * the chart
     */
    protected Paint mInfoPaint;

    /**
     * the object representing the labels on the x-axis
     */
    protected XAxis mXAxis;

    /**
     * if true, touch gestures are enabled on the chart
     */
    protected boolean mTouchEnabled = true;

    /**
     * the object responsible for representing the description text
     */
    protected Description mDescription;

    /**
     * the legend object containing all data associated with the legend
     */
    protected Legend mLegend;

    /**
     * listener that is called when a value on the chart is selected
     */
    protected OnChartValueSelectedListener mSelectionListener;

    protected ChartTouchListener mChartTouchListener;

    /**
     * text that is displayed when the chart is empty
     */
    private String mNoDataText = "No chart data available.";

    /**
     * Gesture listener for custom callbacks when making gestures on the chart.
     */
    private OnChartGestureListener mGestureListener;

    protected LegendRenderer mLegendRenderer;

    /**
     * object responsible for rendering the data
     */
    protected DataRenderer mRenderer;

    protected IHighlighter mHighlighter;

    /**
     * object that manages the bounds and drawing constraints of the chart
     */
    protected ViewPortHandler mViewPortHandler = new ViewPortHandler();

    /**
     * object responsible for animations
     */
    protected ChartAnimator mAnimator;

    /**
     * Extra offsets to be appended to the viewport
     */
    private float mExtraTopOffset = 0.f,
            mExtraRightOffset = 0.f,
            mExtraBottomOffset = 0.f,
            mExtraLeftOffset = 0.f;

    /**
     * default constructor for initialization in code
     */
    public Chart(Context context) {
        super(context);
        init();
    }

    /**
     * constructor for initialization in xml
     */
    public Chart(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    /**
     * even more awesome constructor
     */
    public Chart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    /**
     * initialize all paints and stuff
     */
    protected void init() {

        setWillNotDraw(false);
        // setLayerType(View.LAYER_TYPE_HARDWARE, null);

        if (android.os.Build.VERSION.SDK_INT < 11)
            mAnimator = new ChartAnimator();
        else
            mAnimator = new ChartAnimator(new AnimatorUpdateListener() {

                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    // ViewCompat.postInvalidateOnAnimation(Chart.this);
                    postInvalidate();
                }
            });

        // initialize the utils
        Utils.init(getContext());
        mMaxHighlightDistance = Utils.convertDpToPixel(500f);

        mDescription = new Description();
        mLegend = new Legend();

        mLegendRenderer = new LegendRenderer(mViewPortHandler, mLegend);

        mXAxis = new XAxis();

        mDescPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

        mInfoPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mInfoPaint.setColor(Color.rgb(247, 189, 51)); // orange
        mInfoPaint.setTextAlign(Align.CENTER);
        mInfoPaint.setTextSize(Utils.convertDpToPixel(12f));

        if (mLogEnabled)
            Log.i("", "Chart.init()");
    }

    // public void initWithDummyData() {
    // ColorTemplate template = new ColorTemplate();
    // template.addColorsForDataSets(ColorTemplate.COLORFUL_COLORS,
    // getContext());
    //
    // setColorTemplate(template);
    // setDrawYValues(false);
    //
    // ArrayList<String> xVals = new ArrayList<String>();
    // Calendar calendar = Calendar.getInstance();
    // for (int i = 0; i < 12; i++) {
    // xVals.add(calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT,
    // Locale.getDefault()));
    // }
    //
    // ArrayList<DataSet> dataSets = new ArrayList<DataSet>();
    // for (int i = 0; i < 3; i++) {
    //
    // ArrayList<Entry> yVals = new ArrayList<Entry>();
    //
    // for (int j = 0; j < 12; j++) {
    // float val = (float) (Math.random() * 100);
    // yVals.add(new Entry(val, j));
    // }
    //
    // DataSet set = new DataSet(yVals, "DataSet " + i);
    // dataSets.add(set); // add the datasets
    // }
    // // create a data object with the datasets
    // ChartData data = new ChartData(xVals, dataSets);
    // setData(data);
    // invalidate();
    // }

    /**
     * Sets a new data object for the chart. The data object contains all values
     * and information needed for displaying.
     *
     * @param data
     */
    public void setData(T data) {

        mData = data;
        mOffsetsCalculated = false;

        if (data == null) {
            return;
        }

        // calculate how many digits are needed
        setupDefaultFormatter(data.getYMin(), data.getYMax());

        for (IDataSet set : mData.getDataSets()) {
            if (set.needsFormatter() || set.getValueFormatter() == mDefaultValueFormatter)
                set.setValueFormatter(mDefaultValueFormatter);
        }

        // let the chart know there is new data
        notifyDataSetChanged();

        if (mLogEnabled)
            Log.i(LOG_TAG, "Data is set.");
    }

    /**
     * Clears the chart from all data (sets it to null) and refreshes it (by
     * calling invalidate()).
     */
    public void clear() {
        mData = null;
        mOffsetsCalculated = false;
        mIndicesToHighlight = null;
        mChartTouchListener.setLastHighlighted(null);
        invalidate();
    }

    /**
     * Removes all DataSets (and thereby Entries) from the chart. Does not set the data object to null. Also refreshes the
     * chart by calling invalidate().
     */
    public void clearValues() {
        mData.clearValues();
        invalidate();
    }

    /**
     * Returns true if the chart is empty (meaning it's data object is either
     * null or contains no entries).
     *
     * @return
     */
    public boolean isEmpty() {

        if (mData == null)
            return true;
        else {

            if (mData.getEntryCount() <= 0)
                return true;
            else
                return false;
        }
    }

    /**
     * Lets the chart know its underlying data has changed and performs all
     * necessary recalculations. It is crucial that this method is called
     * everytime data is changed dynamically. Not calling this method can lead
     * to crashes or unexpected behaviour.
     */
    public abstract void notifyDataSetChanged();

    /**
     * Calculates the offsets of the chart to the border depending on the
     * position of an eventual legend or depending on the length of the y-axis
     * and x-axis labels and their position
     */
    protected abstract void calculateOffsets();

    /**
     * Calculates the y-min and y-max value and the y-delta and x-delta value
     */
    protected abstract void calcMinMax();

    /**
     * Calculates the required number of digits for the values that might be
     * drawn in the chart (if enabled), and creates the default-value-formatter
     */
    protected void setupDefaultFormatter(float min, float max) {

        float reference = 0f;

        if (mData == null || mData.getEntryCount() < 2) {

            reference = Math.max(Math.abs(min), Math.abs(max));
        } else {
            reference = Math.abs(max - min);
        }

        int digits = Utils.getDecimals(reference);

        // setup the formatter with a new number of digits
        mDefaultValueFormatter.setup(digits);
    }

    /**
     * flag that indicates if offsets calculation has already been done or not
     */
    private boolean mOffsetsCalculated = false;

    @Override
    protected void onDraw(Canvas canvas) {
        // super.onDraw(canvas);

        if (mData == null) {

            boolean hasText = !TextUtils.isEmpty(mNoDataText);

            if (hasText) {
                MPPointF c = getCenter();
                canvas.drawText(mNoDataText, c.x, c.y, mInfoPaint);
            }

            return;
        }

        if (!mOffsetsCalculated) {

            calculateOffsets();
            mOffsetsCalculated = true;
        }
    }

    /**
     * Draws the description text in the bottom right corner of the chart (per default)
     */
    protected void drawDescription(Canvas c) {

        // check if description should be drawn
        if (mDescription != null && mDescription.isEnabled()) {

            MPPointF position = mDescription.getPosition();

            mDescPaint.setTypeface(mDescription.getTypeface());
            mDescPaint.setTextSize(mDescription.getTextSize());
            mDescPaint.setColor(mDescription.getTextColor());
            mDescPaint.setTextAlign(mDescription.getTextAlign());

            float x, y;

            // if no position specified, draw on default position
            if (position == null) {
                x = getWidth() - mViewPortHandler.offsetRight() - mDescription.getXOffset();
                y = getHeight() - mViewPortHandler.offsetBottom() - mDescription.getYOffset();
            } else {
                x = position.x;
                y = position.y;
            }

            c.drawText(mDescription.getText(), x, y, mDescPaint);
        }
    }

    /**
     * ################ ################ ################ ################
     */
    /** BELOW THIS CODE FOR HIGHLIGHTING */

    /**
     * array of Highlight objects that reference the highlighted slices in the
     * chart
     */
    protected Highlight[] mIndicesToHighlight;

    /**
     * The maximum distance in dp away from an entry causing it to highlight.
     */
    protected float mMaxHighlightDistance = 0f;

    @Override
    public float getMaxHighlightDistance() {
        return mMaxHighlightDistance;
    }

    /**
     * Sets the maximum distance in screen dp a touch can be away from an entry to cause it to get highlighted.
     * Default: 500dp
     *
     * @param distDp
     */
    public void setMaxHighlightDistance(float distDp) {
        mMaxHighlightDistance = Utils.convertDpToPixel(distDp);
    }

    /**
     * Returns the array of currently highlighted values. This might a null or
     * empty array if nothing is highlighted.
     *
     * @return
     */
    public Highlight[] getHighlighted() {
        return mIndicesToHighlight;
    }

    /**
     * Returns true if values can be highlighted via tap gesture, false if not.
     *
     * @return
     */
    public boolean isHighlightPerTapEnabled() {
        return mHighLightPerTapEnabled;
    }

    /**
     * Set this to false to prevent values from being highlighted by tap gesture.
     * Values can still be highlighted via drag or programmatically. Default: true
     *
     * @param enabled
     */
    public void setHighlightPerTapEnabled(boolean enabled) {
        mHighLightPerTapEnabled = enabled;
    }

    /**
     * Returns true if there are values to highlight, false if there are no
     * values to highlight. Checks if the highlight array is null, has a length
     * of zero or if the first object is null.
     *
     * @return
     */
    public boolean valuesToHighlight() {
        return mIndicesToHighlight == null || mIndicesToHighlight.length <= 0
                || mIndicesToHighlight[0] == null ? false
                : true;
    }

    /**
     * Sets the last highlighted value for the touchlistener.
     *
     * @param highs
     */
    protected void setLastHighlighted(Highlight[] highs) {

        if (highs == null || highs.length <= 0 || highs[0] == null) {
            mChartTouchListener.setLastHighlighted(null);
        } else {
            mChartTouchListener.setLastHighlighted(highs[0]);
        }
    }

    /**
     * Highlights the values at the given indices in the given DataSets. Provide
     * null or an empty array to undo all highlighting. This should be used to
     * programmatically highlight values.
     * This method *will not* call the listener.
     *
     * @param highs
     */
    public void highlightValues(Highlight[] highs) {

        // set the indices to highlight
        mIndicesToHighlight = highs;

        setLastHighlighted(highs);

        // redraw the chart
        invalidate();
    }

    /**
     * Highlights any y-value at the given x-value in the given DataSet.
     * Provide -1 as the dataSetIndex to undo all highlighting.
     * This method will call the listener.
     * @param x The x-value to highlight
     * @param dataSetIndex The dataset index to search in
     */
    public void highlightValue(float x, int dataSetIndex) {
        highlightValue(x, dataSetIndex, true);
    }

    /**
     * Highlights the value at the given x-value and y-value in the given DataSet.
     * Provide -1 as the dataSetIndex to undo all highlighting.
     * This method will call the listener.
     * @param x The x-value to highlight
     * @param y The y-value to highlight. Supply `NaN` for "any"
     * @param dataSetIndex The dataset index to search in
     */
    public void highlightValue(float x, float y, int dataSetIndex) {
        highlightValue(x, y, dataSetIndex, true);
    }

    /**
     * Highlights any y-value at the given x-value in the given DataSet.
     * Provide -1 as the dataSetIndex to undo all highlighting.
     * @param x The x-value to highlight
     * @param dataSetIndex The dataset index to search in
     * @param callListener Should the listener be called for this change
     */
    public void highlightValue(float x, int dataSetIndex, boolean callListener) {
        highlightValue(x, Float.NaN, dataSetIndex, callListener);
    }

    /**
     * Highlights any y-value at the given x-value in the given DataSet.
     * Provide -1 as the dataSetIndex to undo all highlighting.
     * @param x The x-value to highlight
     * @param y The y-value to highlight. Supply `NaN` for "any"
     * @param dataSetIndex The dataset index to search in
     * @param callListener Should the listener be called for this change
     */
    public void highlightValue(float x, float y, int dataSetIndex, boolean callListener) {

        if (dataSetIndex < 0 || dataSetIndex >= mData.getDataSetCount()) {
            highlightValue(null, callListener);
        } else {
            highlightValue(new Highlight(x, y, dataSetIndex), callListener);
        }
    }

    /**
     * Highlights the values represented by the provided Highlight object
     * This method *will not* call the listener.
     *
     * @param highlight contains information about which entry should be highlighted
     */
    public void highlightValue(Highlight highlight) {
        highlightValue(highlight, false);
    }

    /**
     * Highlights the value selected by touch gesture. Unlike
     * highlightValues(...), this generates a callback to the
     * OnChartValueSelectedListener.
     *
     * @param high         - the highlight object
     * @param callListener - call the listener
     */
    public void highlightValue(Highlight high, boolean callListener) {

        Entry e = null;

        if (high == null)
            mIndicesToHighlight = null;
        else {

            if (mLogEnabled)
                Log.i(LOG_TAG, "Highlighted: " + high.toString());

            e = mData.getEntryForHighlight(high);
            if (e == null) {
                mIndicesToHighlight = null;
                high = null;
            } else {

                // set the indices to highlight
                mIndicesToHighlight = new Highlight[]{
                        high
                };
            }
        }

        setLastHighlighted(mIndicesToHighlight);

        if (callListener && mSelectionListener != null) {

            if (!valuesToHighlight())
                mSelectionListener.onNothingSelected();
            else {
                // notify the listener
                mSelectionListener.onValueSelected(e, high);
            }
        }

        // redraw the chart
        invalidate();
    }

    /**
     * Returns the Highlight object (contains x-index and DataSet index) of the
     * selected value at the given touch point inside the Line-, Scatter-, or
     * CandleStick-Chart.
     *
     * @param x
     * @param y
     * @return
     */
    public Highlight getHighlightByTouchPoint(float x, float y) {

        if (mData == null) {
            Log.e(LOG_TAG, "Can't select by touch. No data set.");
            return null;
        } else
            return getHighlighter().getHighlight(x, y);
    }

    /**
     * Set a new (e.g. custom) ChartTouchListener NOTE: make sure to
     * setTouchEnabled(true); if you need touch gestures on the chart
     *
     * @param l
     */
    public void setOnTouchListener(ChartTouchListener l) {
        this.mChartTouchListener = l;
    }

    /**
     * Returns an instance of the currently active touch listener.
     *
     * @return
     */
    public ChartTouchListener getOnTouchListener() {
        return mChartTouchListener;
    }

    /**
     * ################ ################ ################ ################
     */
    /** BELOW CODE IS FOR THE MARKER VIEW */

    /**
     * if set to true, the marker view is drawn when a value is clicked
     */
    protected boolean mDrawMarkers = true;

    /**
     * the view that represents the marker
     */
    protected IMarker mMarker;

    /**
     * draws all MarkerViews on the highlighted positions
     */
    protected void drawMarkers(Canvas canvas) {

        // if there is no marker view or drawing marker is disabled
        if (mMarker == null || !isDrawMarkersEnabled() || !valuesToHighlight())
            return;

        for (int i = 0; i < mIndicesToHighlight.length; i++) {

            Highlight highlight = mIndicesToHighlight[i];

            IDataSet set = mData.getDataSetByIndex(highlight.getDataSetIndex());

            Entry e = mData.getEntryForHighlight(mIndicesToHighlight[i]);
            int entryIndex = set.getEntryIndex(e);

            // make sure entry not null
            if (e == null || entryIndex > set.getEntryCount() * mAnimator.getPhaseX())
                continue;

            float[] pos = getMarkerPosition(highlight);

            // check bounds
            if (!mViewPortHandler.isInBounds(pos[0], pos[1]))
                continue;

            // callbacks to update the content
            mMarker.refreshContent(e, highlight);

            // draw the marker
            mMarker.draw(canvas, pos[0], pos[1]);
        }
    }

    /**
     * Returns the actual position in pixels of the MarkerView for the given
     * Highlight object.
     *
     * @param high
     * @return
     */
    protected float[] getMarkerPosition(Highlight high) {
        return new float[]{high.getDrawX(), high.getDrawY()};
    }

    /**
     * ################ ################ ################ ################
     * ANIMATIONS ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     */
    /** CODE BELOW THIS RELATED TO ANIMATION */

    /**
     * Returns the animator responsible for animating chart values.
     *
     * @return
     */
    public ChartAnimator getAnimator() {
        return mAnimator;
    }

    /**
     * If set to true, chart continues to scroll after touch up default: true
     */
    public boolean isDragDecelerationEnabled() {
        return mDragDecelerationEnabled;
    }

    /**
     * If set to true, chart continues to scroll after touch up. Default: true.
     *
     * @param enabled
     */
    public void setDragDecelerationEnabled(boolean enabled) {
        mDragDecelerationEnabled = enabled;
    }

    /**
     * Returns drag deceleration friction coefficient
     *
     * @return
     */
    public float getDragDecelerationFrictionCoef() {
        return mDragDecelerationFrictionCoef;
    }

    /**
     * Deceleration friction coefficient in [0 ; 1] interval, higher values
     * indicate that speed will decrease slowly, for example if it set to 0, it
     * will stop immediately. 1 is an invalid value, and will be converted to
     * 0.999f automatically.
     *
     * @param newValue
     */
    public void setDragDecelerationFrictionCoef(float newValue) {

        if (newValue < 0.f)
            newValue = 0.f;

        if (newValue >= 1f)
            newValue = 0.999f;

        mDragDecelerationFrictionCoef = newValue;
    }

    /**
     * ################ ################ ################ ################
     * ANIMATIONS ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     */
    /** CODE BELOW FOR PROVIDING EASING FUNCTIONS */

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart. ANIMATIONS
     * ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillisX
     * @param durationMillisY
     * @param easingX         a custom easing function to be used on the animation phase
     * @param easingY         a custom easing function to be used on the animation phase
     */
    public void animateXY(int durationMillisX, int durationMillisY, EasingFunction easingX,
                          EasingFunction easingY) {
        mAnimator.animateXY(durationMillisX, durationMillisY, easingX, easingY);
    }

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     * @param easing         a custom easing function to be used on the animation phase
     */
    public void animateX(int durationMillis, EasingFunction easing) {
        mAnimator.animateX(durationMillis, easing);
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     * @param easing         a custom easing function to be used on the animation phase
     */
    public void animateY(int durationMillis, EasingFunction easing) {
        mAnimator.animateY(durationMillis, easing);
    }

    /**
     * ################ ################ ################ ################
     * ANIMATIONS ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     */
    /** CODE BELOW FOR PREDEFINED EASING OPTIONS */

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart. ANIMATIONS
     * ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillisX
     * @param durationMillisY
     * @param easingX         a predefined easing option
     * @param easingY         a predefined easing option
     */
    public void animateXY(int durationMillisX, int durationMillisY, Easing.EasingOption easingX,
                          Easing.EasingOption easingY) {
        mAnimator.animateXY(durationMillisX, durationMillisY, easingX, easingY);
    }

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     * @param easing         a predefined easing option
     */
    public void animateX(int durationMillis, Easing.EasingOption easing) {
        mAnimator.animateX(durationMillis, easing);
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     * @param easing         a predefined easing option
     */
    public void animateY(int durationMillis, Easing.EasingOption easing) {
        mAnimator.animateY(durationMillis, easing);
    }

    /**
     * ################ ################ ################ ################
     * ANIMATIONS ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     */
    /** CODE BELOW FOR ANIMATIONS WITHOUT EASING */

    /**
     * Animates the rendering of the chart on the x-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     */
    public void animateX(int durationMillis) {
        mAnimator.animateX(durationMillis);
    }

    /**
     * Animates the rendering of the chart on the y-axis with the specified
     * animation time. If animate(...) is called, no further calling of
     * invalidate() is necessary to refresh the chart. ANIMATIONS ONLY WORK FOR
     * API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillis
     */
    public void animateY(int durationMillis) {
        mAnimator.animateY(durationMillis);
    }

    /**
     * Animates the drawing / rendering of the chart on both x- and y-axis with
     * the specified animation time. If animate(...) is called, no further
     * calling of invalidate() is necessary to refresh the chart. ANIMATIONS
     * ONLY WORK FOR API LEVEL 11 (Android 3.0.x) AND HIGHER.
     *
     * @param durationMillisX
     * @param durationMillisY
     */
    public void animateXY(int durationMillisX, int durationMillisY) {
        mAnimator.animateXY(durationMillisX, durationMillisY);
    }

    /**
     * ################ ################ ################ ################
     */
    /** BELOW THIS ONLY GETTERS AND SETTERS */


    /**
     * Returns the object representing all x-labels, this method can be used to
     * acquire the XAxis object and modify it (e.g. change the position of the
     * labels, styling, etc.)
     *
     * @return
     */
    public XAxis getXAxis() {
        return mXAxis;
    }

    /**
     * Returns the default IValueFormatter that has been determined by the chart
     * considering the provided minimum and maximum values.
     *
     * @return
     */
    public IValueFormatter getDefaultValueFormatter() {
        return mDefaultValueFormatter;
    }

    /**
     * set a selection listener for the chart
     *
     * @param l
     */
    public void setOnChartValueSelectedListener(OnChartValueSelectedListener l) {
        this.mSelectionListener = l;
    }

    /**
     * Sets a gesture-listener for the chart for custom callbacks when executing
     * gestures on the chart surface.
     *
     * @param l
     */
    public void setOnChartGestureListener(OnChartGestureListener l) {
        this.mGestureListener = l;
    }

    /**
     * Returns the custom gesture listener.
     *
     * @return
     */
    public OnChartGestureListener getOnChartGestureListener() {
        return mGestureListener;
    }

    /**
     * returns the current y-max value across all DataSets
     *
     * @return
     */
    public float getYMax() {
        return mData.getYMax();
    }

    /**
     * returns the current y-min value across all DataSets
     *
     * @return
     */
    public float getYMin() {
        return mData.getYMin();
    }

    @Override
    public float getXChartMax() {
        return mXAxis.mAxisMaximum;
    }

    @Override
    public float getXChartMin() {
        return mXAxis.mAxisMinimum;
    }

    @Override
    public float getXRange() {
        return mXAxis.mAxisRange;
    }

    /**
     * Returns a recyclable MPPointF instance.
     * Returns the center point of the chart (the whole View) in pixels.
     *
     * @return
     */
    public MPPointF getCenter() {
        return MPPointF.getInstance(getWidth() / 2f, getHeight() / 2f);
    }

    /**
     * Returns a recyclable MPPointF instance.
     * Returns the center of the chart taking offsets under consideration.
     * (returns the center of the content rectangle)
     *
     * @return
     */
    @Override
    public MPPointF getCenterOffsets() {
        return mViewPortHandler.getContentCenter();
    }

    /**
     * Sets extra offsets (around the chart view) to be appended to the
     * auto-calculated offsets.
     *
     * @param left
     * @param top
     * @param right
     * @param bottom
     */
    public void setExtraOffsets(float left, float top, float right, float bottom) {
        setExtraLeftOffset(left);
        setExtraTopOffset(top);
        setExtraRightOffset(right);
        setExtraBottomOffset(bottom);
    }

    /**
     * Set an extra offset to be appended to the viewport's top
     */
    public void setExtraTopOffset(float offset) {
        mExtraTopOffset = Utils.convertDpToPixel(offset);
    }

    /**
     * @return the extra offset to be appended to the viewport's top
     */
    public float getExtraTopOffset() {
        return mExtraTopOffset;
    }

    /**
     * Set an extra offset to be appended to the viewport's right
     */
    public void setExtraRightOffset(float offset) {
        mExtraRightOffset = Utils.convertDpToPixel(offset);
    }

    /**
     * @return the extra offset to be appended to the viewport's right
     */
    public float getExtraRightOffset() {
        return mExtraRightOffset;
    }

    /**
     * Set an extra offset to be appended to the viewport's bottom
     */
    public void setExtraBottomOffset(float offset) {
        mExtraBottomOffset = Utils.convertDpToPixel(offset);
    }

    /**
     * @return the extra offset to be appended to the viewport's bottom
     */
    public float getExtraBottomOffset() {
        return mExtraBottomOffset;
    }

    /**
     * Set an extra offset to be appended to the viewport's left
     */
    public void setExtraLeftOffset(float offset) {
        mExtraLeftOffset = Utils.convertDpToPixel(offset);
    }

    /**
     * @return the extra offset to be appended to the viewport's left
     */
    public float getExtraLeftOffset() {
        return mExtraLeftOffset;
    }

    /**
     * Set this to true to enable logcat outputs for the chart. Beware that
     * logcat output decreases rendering performance. Default: disabled.
     *
     * @param enabled
     */
    public void setLogEnabled(boolean enabled) {
        mLogEnabled = enabled;
    }

    /**
     * Returns true if log-output is enabled for the chart, fals if not.
     *
     * @return
     */
    public boolean isLogEnabled() {
        return mLogEnabled;
    }

    /**
     * Sets the text that informs the user that there is no data available with
     * which to draw the chart.
     *
     * @param text
     */
    public void setNoDataText(String text) {
        mNoDataText = text;
    }

    /**
     * Sets the color of the no data text.
     *
     * @param color
     */
    public void setNoDataTextColor(int color) {
        mInfoPaint.setColor(color);
    }

    /**
     * Sets the typeface to be used for the no data text.
     *
     * @param tf
     */
    public void setNoDataTextTypeface(Typeface tf) {
        mInfoPaint.setTypeface(tf);
    }

    /**
     * Set this to false to disable all gestures and touches on the chart,
     * default: true
     *
     * @param enabled
     */
    public void setTouchEnabled(boolean enabled) {
        this.mTouchEnabled = enabled;
    }

    /**
     * sets the marker that is displayed when a value is clicked on the chart
     *
     * @param marker
     */
    public void setMarker(IMarker marker) {
        mMarker = marker;
    }

    /**
     * returns the marker that is set as a marker view for the chart
     *
     * @return
     */
    public IMarker getMarker() {
        return mMarker;
    }

    @Deprecated
    public void setMarkerView(IMarker v) {
        setMarker(v);
    }

    @Deprecated
    public IMarker getMarkerView() {
        return getMarker();
    }

    /**
     * Sets a new Description object for the chart.
     *
     * @param desc
     */
    public void setDescription(Description desc) {
        this.mDescription = desc;
    }

    /**
     * Returns the Description object of the chart that is responsible for holding all information related
     * to the description text that is displayed in the bottom right corner of the chart (by default).
     *
     * @return
     */
    public Description getDescription() {
        return mDescription;
    }

    /**
     * Returns the Legend object of the chart. This method can be used to get an
     * instance of the legend in order to customize the automatically generated
     * Legend.
     *
     * @return
     */
    public Legend getLegend() {
        return mLegend;
    }

    /**
     * Returns the renderer object responsible for rendering / drawing the
     * Legend.
     *
     * @return
     */
    public LegendRenderer getLegendRenderer() {
        return mLegendRenderer;
    }

    /**
     * Returns the rectangle that defines the borders of the chart-value surface
     * (into which the actual values are drawn).
     *
     * @return
     */
    @Override
    public RectF getContentRect() {
        return mViewPortHandler.getContentRect();
    }

    /**
     * disables intercept touchevents
     */
    public void disableScroll() {
        ViewParent parent = getParent();
        if (parent != null)
            parent.requestDisallowInterceptTouchEvent(true);
    }

    /**
     * enables intercept touchevents
     */
    public void enableScroll() {
        ViewParent parent = getParent();
        if (parent != null)
            parent.requestDisallowInterceptTouchEvent(false);
    }

    /**
     * paint for the grid background (only line and barchart)
     */
    public static final int PAINT_GRID_BACKGROUND = 4;

    /**
     * paint for the info text that is displayed when there are no values in the
     * chart
     */
    public static final int PAINT_INFO = 7;

    /**
     * paint for the description text in the bottom right corner
     */
    public static final int PAINT_DESCRIPTION = 11;

    /**
     * paint for the hole in the middle of the pie chart
     */
    public static final int PAINT_HOLE = 13;

    /**
     * paint for the text in the middle of the pie chart
     */
    public static final int PAINT_CENTER_TEXT = 14;

    /**
     * paint used for the legend
     */
    public static final int PAINT_LEGEND_LABEL = 18;

    /**
     * set a new paint object for the specified parameter in the chart e.g.
     * Chart.PAINT_VALUES
     *
     * @param p     the new paint object
     * @param which Chart.PAINT_VALUES, Chart.PAINT_GRID, Chart.PAINT_VALUES,
     *              ...
     */
    public void setPaint(Paint p, int which) {

        switch (which) {
            case PAINT_INFO:
                mInfoPaint = p;
                break;
            case PAINT_DESCRIPTION:
                mDescPaint = p;
                break;
        }
    }

    /**
     * Returns the paint object associated with the provided constant.
     *
     * @param which e.g. Chart.PAINT_LEGEND_LABEL
     * @return
     */
    public Paint getPaint(int which) {
        switch (which) {
            case PAINT_INFO:
                return mInfoPaint;
            case PAINT_DESCRIPTION:
                return mDescPaint;
        }

        return null;
    }

    @Deprecated
    public boolean isDrawMarkerViewsEnabled() {
        return isDrawMarkersEnabled();
    }

    @Deprecated
    public void setDrawMarkerViews(boolean enabled) {
        setDrawMarkers(enabled);
    }

    /**
     * returns true if drawing the marker is enabled when tapping on values
     * (use the setMarker(IMarker marker) method to specify a marker)
     *
     * @return
     */
    public boolean isDrawMarkersEnabled() {
        return mDrawMarkers;
    }

    /**
     * Set this to true to draw a user specified marker when tapping on
     * chart values (use the setMarker(IMarker marker) method to specify a
     * marker). Default: true
     *
     * @param enabled
     */
    public void setDrawMarkers(boolean enabled) {
        mDrawMarkers = enabled;
    }

    /**
     * Returns the ChartData object that has been set for the chart.
     *
     * @return
     */
    public T getData() {
        return mData;
    }

    /**
     * Returns the ViewPortHandler of the chart that is responsible for the
     * content area of the chart and its offsets and dimensions.
     *
     * @return
     */
    public ViewPortHandler getViewPortHandler() {
        return mViewPortHandler;
    }

    /**
     * Returns the Renderer object the chart uses for drawing data.
     *
     * @return
     */
    public DataRenderer getRenderer() {
        return mRenderer;
    }

    /**
     * Sets a new DataRenderer object for the chart.
     *
     * @param renderer
     */
    public void setRenderer(DataRenderer renderer) {

        if (renderer != null)
            mRenderer = renderer;
    }

    public IHighlighter getHighlighter() {
        return mHighlighter;
    }

    /**
     * Sets a custom highligher object for the chart that handles / processes
     * all highlight touch events performed on the chart-view.
     *
     * @param highlighter
     */
    public void setHighlighter(ChartHighlighter highlighter) {
        mHighlighter = highlighter;
    }

    /**
     * Returns a recyclable MPPointF instance.
     *
     * @return
     */
    @Override
    public MPPointF getCenterOfView() {
        return getCenter();
    }

    /**
     * Returns the bitmap that represents the chart.
     *
     * @return
     */
    public Bitmap getChartBitmap() {
        // Define a bitmap with the same size as the view
        Bitmap returnedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);
        // Bind a canvas to it
        Canvas canvas = new Canvas(returnedBitmap);
        // Get the view's background
        Drawable bgDrawable = getBackground();
        if (bgDrawable != null)
            // has background drawable, then draw it on the canvas
            bgDrawable.draw(canvas);
        else
            // does not have background drawable, then draw white background on
            // the canvas
            canvas.drawColor(Color.WHITE);
        // draw the view on the canvas
        draw(canvas);
        // return the bitmap
        return returnedBitmap;
    }

    /**
     * Saves the current chart state with the given name to the given path on
     * the sdcard leaving the path empty "" will put the saved file directly on
     * the SD card chart is saved as a PNG image, example:
     * saveToPath("myfilename", "foldername1/foldername2");
     *
     * @param title
     * @param pathOnSD e.g. "folder1/folder2/folder3"
     * @return returns true on success, false on error
     */
    public boolean saveToPath(String title, String pathOnSD) {

        Bitmap b = getChartBitmap();

        OutputStream stream = null;
        try {
            stream = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()
                    + pathOnSD + "/" + title
                    + ".png");

            /*
             * Write bitmap to file using JPEG or PNG and 40% quality hint for
             * JPEG.
             */
            b.compress(CompressFormat.PNG, 40, stream);

            stream.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    /**
     * Saves the current state of the chart to the gallery as an image type. The
     * compression must be set for JPEG only. 0 == maximum compression, 100 = low
     * compression (high quality). NOTE: Needs permission WRITE_EXTERNAL_STORAGE
     *
     * @param fileName        e.g. "my_image"
     * @param subFolderPath   e.g. "ChartPics"
     * @param fileDescription e.g. "Chart details"
     * @param format          e.g. Bitmap.CompressFormat.PNG
     * @param quality         e.g. 50, min = 0, max = 100
     * @return returns true if saving was successful, false if not
     */
    public boolean saveToGallery(String fileName, String subFolderPath, String fileDescription, Bitmap.CompressFormat
            format, int quality) {
        // restrain quality
        if (quality < 0 || quality > 100)
            quality = 50;

        long currentTime = System.currentTimeMillis();

        File extBaseDir = Environment.getExternalStorageDirectory();
        File file = new File(extBaseDir.getAbsolutePath() + "/DCIM/" + subFolderPath);
        if (!file.exists()) {
            if (!file.mkdirs()) {
                return false;
            }
        }

        String mimeType = "";
        switch (format) {
            case PNG:
                mimeType = "image/png";
                if (!fileName.endsWith(".png"))
                    fileName += ".png";
                break;
            case WEBP:
                mimeType = "image/webp";
                if (!fileName.endsWith(".webp"))
                    fileName += ".webp";
                break;
            case JPEG:
            default:
                mimeType = "image/jpeg";
                if (!(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")))
                    fileName += ".jpg";
                break;
        }

        String filePath = file.getAbsolutePath() + "/" + fileName;
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(filePath);

            Bitmap b = getChartBitmap();
            b.compress(format, quality, out);

            out.flush();
            out.close();

        } catch (IOException e) {
            e.printStackTrace();

            return false;
        }

        long size = new File(filePath).length();

        ContentValues values = new ContentValues(8);

        // store the details
        values.put(Images.Media.TITLE, fileName);
        values.put(Images.Media.DISPLAY_NAME, fileName);
        values.put(Images.Media.DATE_ADDED, currentTime);
        values.put(Images.Media.MIME_TYPE, mimeType);
        values.put(Images.Media.DESCRIPTION, fileDescription);
        values.put(Images.Media.ORIENTATION, 0);
        values.put(Images.Media.DATA, filePath);
        values.put(Images.Media.SIZE, size);

        return getContext().getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values) != null;
    }

    /**
     * Saves the current state of the chart to the gallery as a JPEG image. The
     * filename and compression can be set. 0 == maximum compression, 100 = low
     * compression (high quality). NOTE: Needs permission WRITE_EXTERNAL_STORAGE
     *
     * @param fileName e.g. "my_image"
     * @param quality  e.g. 50, min = 0, max = 100
     * @return returns true if saving was successful, false if not
     */
    public boolean saveToGallery(String fileName, int quality) {
        return saveToGallery(fileName, "", "MPAndroidChart-Library Save", Bitmap.CompressFormat.JPEG, quality);
    }

    /**
     * tasks to be done after the view is setup
     */
    protected ArrayList<Runnable> mJobs = new ArrayList<Runnable>();

    public void removeViewportJob(Runnable job) {
        mJobs.remove(job);
    }

    public void clearAllViewportJobs() {
        mJobs.clear();
    }

    /**
     * Either posts a job immediately if the chart has already setup it's
     * dimensions or adds the job to the execution queue.
     *
     * @param job
     */
    public void addViewportJob(Runnable job) {

        if (mViewPortHandler.hasChartDimens()) {
            post(job);
        } else {
            mJobs.add(job);
        }
    }

    /**
     * Returns all jobs that are scheduled to be executed after
     * onSizeChanged(...).
     *
     * @return
     */
    public ArrayList<Runnable> getJobs() {
        return mJobs;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

        for (int i = 0; i < getChildCount(); i++) {
            getChildAt(i).layout(left, top, right, bottom);
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int size = (int) Utils.convertDpToPixel(50f);
        setMeasuredDimension(
                Math.max(getSuggestedMinimumWidth(),
                        resolveSize(size,
                                widthMeasureSpec)),
                Math.max(getSuggestedMinimumHeight(),
                        resolveSize(size,
                                heightMeasureSpec)));
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (mLogEnabled)
            Log.i(LOG_TAG, "OnSizeChanged()");

        if (w > 0 && h > 0 && w < 10000 && h < 10000) {

            mViewPortHandler.setChartDimens(w, h);

            if (mLogEnabled)
                Log.i(LOG_TAG, "Setting chart dimens, width: " + w + ", height: " + h);

            for (Runnable r : mJobs) {
                post(r);
            }

            mJobs.clear();
        }

        notifyDataSetChanged();

        super.onSizeChanged(w, h, oldw, oldh);
    }

    /**
     * Setting this to true will set the layer-type HARDWARE for the view, false
     * will set layer-type SOFTWARE.
     *
     * @param enabled
     */
    public void setHardwareAccelerationEnabled(boolean enabled) {

        if (android.os.Build.VERSION.SDK_INT >= 11) {

            if (enabled)
                setLayerType(View.LAYER_TYPE_HARDWARE, null);
            else
                setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        } else {
            Log.e(LOG_TAG,
                    "Cannot enable/disable hardware acceleration for devices below API level 11.");
        }
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();

        //Log.i(LOG_TAG, "Detaching...");

        if (mUnbind)
            unbindDrawables(this);
    }

    /**
     * unbind flag
     */
    private boolean mUnbind = false;

    /**
     * Unbind all drawables to avoid memory leaks.
     * Link: http://stackoverflow.com/a/6779164/1590502
     *
     * @param view
     */
    private void unbindDrawables(View view) {

        if (view.getBackground() != null) {
            view.getBackground().setCallback(null);
        }
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
            }
            ((ViewGroup) view).removeAllViews();
        }
    }

    /**
     * Set this to true to enable "unbinding" of drawables. When a View is detached
     * from a window. This helps avoid memory leaks.
     * Default: false
     * Link: http://stackoverflow.com/a/6779164/1590502
     *
     * @param enabled
     */
    public void setUnbindEnabled(boolean enabled) {
        this.mUnbind = enabled;
    }

    private int mRealCount = -1;

    public int getRealCount() {
        return mRealCount;
    }

    public void setRealCount(int realCount) {
        mRealCount = realCount;
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/CombinedChart.java
================================================

package com.github.mikephil.charting.charts;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;

import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BubbleData;
import com.github.mikephil.charting.data.CandleData;
import com.github.mikephil.charting.data.CombinedData;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.ScatterData;
import com.github.mikephil.charting.highlight.CombinedHighlighter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.dataprovider.CombinedDataProvider;
import com.github.mikephil.charting.renderer.CombinedChartRenderer;

/**
 * This chart class allows the combination of lines, bars, scatter and candle
 * data all displayed in one chart area.
 *
 * @author Philipp Jahoda
 */
public class CombinedChart extends BarLineChartBase<CombinedData> implements CombinedDataProvider {

    /**
     * if set to true, all values are drawn above their bars, instead of below
     * their top
     */
    private boolean mDrawValueAboveBar = true;


    /**
     * flag that indicates whether the highlight should be full-bar oriented, or single-value?
     */
    protected boolean mHighlightFullBarEnabled = false;

    /**
     * if set to true, a grey area is drawn behind each bar that indicates the
     * maximum value
     */
    private boolean mDrawBarShadow = false;

    protected DrawOrder[] mDrawOrder;

    /**
     * enum that allows to specify the order in which the different data objects
     * for the combined-chart are drawn
     */
    public enum DrawOrder {
        BAR, BUBBLE, LINE, CANDLE, SCATTER
    }

    public CombinedChart(Context context) {
        super(context);
    }

    public CombinedChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CombinedChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        // Default values are not ready here yet
        mDrawOrder = new DrawOrder[]{
                DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.LINE, DrawOrder.CANDLE, DrawOrder.SCATTER
        };

        setHighlighter(new CombinedHighlighter(this, this));

        // Old default behaviour
        setHighlightFullBarEnabled(true);

        mRenderer = new CombinedChartRenderer(this, mAnimator, mViewPortHandler);
    }

    @Override
    public CombinedData getCombinedData() {
        return mData;
    }

    @Override
    public void setData(CombinedData data) {
        super.setData(data);
        setHighlighter(new CombinedHighlighter(this, this));
        ((CombinedChartRenderer)mRenderer).createRenderers();
        mRenderer.initBuffers();
    }

    /**
     * Returns the Highlight object (contains x-index and DataSet index) of the selected value at the given touch
     * point
     * inside the CombinedChart.
     *
     * @param x
     * @param y
     * @return
     */
    @Override
    public Highlight getHighlightByTouchPoint(float x, float y) {

        if (mData == null) {
            Log.e(LOG_TAG, "Can't select by touch. No data set.");
            return null;
        } else {
            Highlight h = getHighlighter().getHighlight(x, y);
            if (h == null || !isHighlightFullBarEnabled()) return h;

            // For isHighlightFullBarEnabled, remove stackIndex
            return new Highlight(h.getX(), h.getY(),
                    h.getXPx(), h.getYPx(),
                    h.getDataSetIndex(), -1, h.getAxis());
        }
    }

    @Override
    public LineData getLineData() {
        if (mData == null)
            return null;
        return mData.getLineData();
    }

    @Override
    public BarData getBarData() {
        if (mData == null)
            return null;
        return mData.getBarData();
    }

    @Override
    public ScatterData getScatterData() {
        if (mData == null)
            return null;
        return mData.getScatterData();
    }

    @Override
    public CandleData getCandleData() {
        if (mData == null)
            return null;
        return mData.getCandleData();
    }

    @Override
    public BubbleData getBubbleData() {
        if (mData == null)
            return null;
        return mData.getBubbleData();
    }

    @Override
    public boolean isDrawBarShadowEnabled() {
        return mDrawBarShadow;
    }

    @Override
    public boolean isDrawValueAboveBarEnabled() {
        return mDrawValueAboveBar;
    }

    /**
     * If set to true, all values are drawn above their bars, instead of below
     * their top.
     *
     * @param enabled
     */
    public void setDrawValueAboveBar(boolean enabled) {
        mDrawValueAboveBar = enabled;
    }


    /**
     * If set to true, a grey area is drawn behind each bar that indicates the
     * maximum value. Enabling his will reduce performance by about 50%.
     *
     * @param enabled
     */
    public void setDrawBarShadow(boolean enabled) {
        mDrawBarShadow = enabled;
    }

    /**
     * Set this to true to make the highlight operation full-bar oriented,
     * false to make it highlight single values (relevant only for stacked).
     *
     * @param enabled
     */
    public void setHighlightFullBarEnabled(boolean enabled) {
        mHighlightFullBarEnabled = enabled;
    }

    /**
     * @return true the highlight operation is be full-bar oriented, false if single-value
     */
    @Override
    public boolean isHighlightFullBarEnabled() {
        return mHighlightFullBarEnabled;
    }

    /**
     * Returns the currently set draw order.
     *
     * @return
     */
    public DrawOrder[] getDrawOrder() {
        return mDrawOrder;
    }

    /**
     * Sets the order in which the provided data objects should be drawn. The
     * earlier you place them in the provided array, the further they will be in
     * the background. e.g. if you provide new DrawOrer[] { DrawOrder.BAR,
     * DrawOrder.LINE }, the bars will be drawn behind the lines.
     *
     * @param order
     */
    public void setDrawOrder(DrawOrder[] order) {
        if (order == null || order.length <= 0)
            return;
        mDrawOrder = order;
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/HorizontalBarChart.java
================================================
package com.github.mikephil.charting.charts;

import android.content.Context;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;

import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.components.YAxis.AxisDependency;
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.highlight.HorizontalBarHighlighter;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.renderer.HorizontalBarChartRenderer;
import com.github.mikephil.charting.renderer.XAxisRendererHorizontalBarChart;
import com.github.mikephil.charting.renderer.YAxisRendererHorizontalBarChart;
import com.github.mikephil.charting.utils.HorizontalViewPortHandler;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.TransformerHorizontalBarChart;
import com.github.mikephil.charting.utils.Utils;

/**
 * BarChart with horizontal bar orientation. In this implementation, x- and y-axis are switched, meaning the YAxis class
 * represents the horizontal values and the XAxis class represents the vertical values.
 *
 * @author Philipp Jahoda
 */
public class HorizontalBarChart extends BarChart {

    public HorizontalBarChart(Context context) {
        super(context);
    }

    public HorizontalBarChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HorizontalBarChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {

        mViewPortHandler = new HorizontalViewPortHandler();

        super.init();

        mLeftAxisTransformer = new TransformerHorizontalBarChart(mViewPortHandler);
        mRightAxisTransformer = new TransformerHorizontalBarChart(mViewPortHandler);

        mRenderer = new HorizontalBarChartRenderer(this, mAnimator, mViewPortHandler);
        setHighlighter(new HorizontalBarHighlighter(this));

        mAxisRendererLeft = new YAxisRendererHorizontalBarChart(mViewPortHandler, mAxisLeft, mLeftAxisTransformer);
        mAxisRendererRight = new YAxisRendererHorizontalBarChart(mViewPortHandler, mAxisRight, mRightAxisTransformer);
        mXAxisRenderer = new XAxisRendererHorizontalBarChart(mViewPortHandler, mXAxis, mLeftAxisTransformer, this);
    }

    private RectF mOffsetsBuffer = new RectF();

    @Override
    public void calculateOffsets() {

        float offsetLeft = 0f, offsetRight = 0f, offsetTop = 0f, offsetBottom = 0f;

        calculateLegendOffsets(mOffsetsBuffer);

        offsetLeft += mOffsetsBuffer.left;
        offsetTop += mOffsetsBuffer.top;
        offsetRight += mOffsetsBuffer.right;
        offsetBottom += mOffsetsBuffer.bottom;

        // offsets for y-labels
        if (mAxisLeft.needsOffset()) {
            offsetTop += mAxisLeft.getRequiredHeightSpace(mAxisRendererLeft.getPaintAxisLabels());
        }

        if (mAxisRight.needsOffset()) {
            offsetBottom += mAxisRight.getRequiredHeightSpace(mAxisRendererRight.getPaintAxisLabels());
        }

        float xlabelwidth = mXAxis.mLabelRotatedWidth;

        if (mXAxis.isEnabled()) {

            // offsets for x-labels
            if (mXAxis.getPosition() == XAxisPosition.BOTTOM) {

                offsetLeft += xlabelwidth;

            } else if (mXAxis.getPosition() == XAxisPosition.TOP) {

                offsetRight += xlabelwidth;

            } else if (mXAxis.getPosition() == XAxisPosition.BOTH_SIDED) {

                offsetLeft += xlabelwidth;
                offsetRight += xlabelwidth;
            }
        }

        offsetTop += getExtraTopOffset();
        offsetRight += getExtraRightOffset();
        offsetBottom += getExtraBottomOffset();
        offsetLeft += getExtraLeftOffset();

        float minOffset = Utils.convertDpToPixel(mMinOffset);

        mViewPortHandler.restrainViewPort(
                Math.max(minOffset, offsetLeft),
                Math.max(minOffset, offsetTop),
                Math.max(minOffset, offsetRight),
                Math.max(minOffset, offsetBottom));

        if (mLogEnabled) {
            Log.i(LOG_TAG, "offsetLeft: " + offsetLeft + ", offsetTop: " + offsetTop + ", offsetRight: " +
                    offsetRight + ", offsetBottom: "
                    + offsetBottom);
            Log.i(LOG_TAG, "Content: " + mViewPortHandler.getContentRect().toString());
        }

        prepareOffsetMatrix();
        prepareValuePxMatrix();
    }

    @Override
    protected void prepareValuePxMatrix() {
        mRightAxisTransformer.prepareMatrixValuePx(mAxisRight.mAxisMinimum, mAxisRight.mAxisRange, mXAxis.mAxisRange,
                mXAxis.mAxisMinimum);
        mLeftAxisTransformer.prepareMatrixValuePx(mAxisLeft.mAxisMinimum, mAxisLeft.mAxisRange, mXAxis.mAxisRange,
                mXAxis.mAxisMinimum);
    }

    @Override
    protected float[] getMarkerPosition(Highlight high) {
        return new float[]{high.getDrawY(), high.getDrawX()};
    }

    @Override
    public void getBarBounds(BarEntry e, RectF outputRect) {

        RectF bounds = outputRect;
        IBarDataSet set = mData.getDataSetForEntry(e);

        if (set == null) {
            outputRect.set(Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE);
            return;
        }

        float y = e.getY();
        float x = e.getX();

        float barWidth = mData.getBarWidth();

        float top = x - barWidth / 2f;
        float bottom = x + barWidth / 2f;
        float left = y >= 0 ? y : 0;
        float right = y <= 0 ? y : 0;

        bounds.set(left, top, right, bottom);

        getTransformer(set.getAxisDependency()).rectValueToPixel(bounds);

    }

    protected float[] mGetPositionBuffer = new float[2];

    /**
     * Returns a recyclable MPPointF instance.
     *
     * @param e
     * @param axis
     * @return
     */
    @Override
    public MPPointF getPosition(Entry e, AxisDependency axis) {

        if (e == null)
            return null;

        float[] vals = mGetPositionBuffer;
        vals[0] = e.getY();
        vals[1] = e.getX();

        getTransformer(axis).pointValuesToPixel(vals);

        return MPPointF.getInstance(vals[0], vals[1]);
    }

    /**
     * Returns the Highlight object (contains x-index and DataSet index) of the selected value at the given touch point
     * inside the BarChart.
     *
     * @param x
     * @param y
     * @return
     */
    @Override
    public Highlight getHighlightByTouchPoint(float x, float y) {

        if (mData == null) {
            if (mLogEnabled)
                Log.e(LOG_TAG, "Can't select by touch. No data set.");
            return null;
        } else
            return getHighlighter().getHighlight(y, x); // switch x and y
    }

    @Override
    public float getLowestVisibleX() {
        getTransformer(AxisDependency.LEFT).getValuesByTouchPoint(mViewPortHandler.contentLeft(),
                mViewPortHandler.contentBottom(), posForGetLowestVisibleX);
        float result = (float) Math.max(mXAxis.mAxisMinimum, posForGetLowestVisibleX.y);
        return result;
    }

    @Override
    public float getHighestVisibleX() {
        getTransformer(AxisDependency.LEFT).getValuesByTouchPoint(mViewPortHandler.contentLeft(),
                mViewPortHandler.contentTop(), posForGetHighestVisibleX);
        float result = (float) Math.min(mXAxis.mAxisMaximum, posForGetHighestVisibleX.y);
        return result;
    }

    /**
     * ###### VIEWPORT METHODS BELOW THIS ######
     */

    @Override
    public void setVisibleXRangeMaximum(float maxXRange) {
        float xScale = mXAxis.mAxisRange / (maxXRange);
        mViewPortHandler.setMinimumScaleY(xScale);
    }

    @Override
    public void setVisibleXRangeMinimum(float minXRange) {
        float xScale = mXAxis.mAxisRange / (minXRange);
        mViewPortHandler.setMaximumScaleY(xScale);
    }

    @Override
    public void setVisibleXRange(float minXRange, float maxXRange) {
        float minScale = mXAxis.mAxisRange / minXRange;
        float maxScale = mXAxis.mAxisRange / maxXRange;
        mViewPortHandler.setMinMaxScaleY(minScale, maxScale);
    }

    @Override
    public void setVisibleYRangeMaximum(float maxYRange, AxisDependency axis) {
        float yScale = getAxisRange(axis) / maxYRange;
        mViewPortHandler.setMinimumScaleX(yScale);
    }

    @Override
    public void setVisibleYRangeMinimum(float minYRange, AxisDependency axis) {
        float yScale = getAxisRange(axis) / minYRange;
        mViewPortHandler.setMaximumScaleX(yScale);
    }

    @Override
    public void setVisibleYRange(float minYRange, float maxYRange, AxisDependency axis) {
        float minScale = getAxisRange(axis) / minYRange;
        float maxScale = getAxisRange(axis) / maxYRange;
        mViewPortHandler.setMinMaxScaleX(minScale, maxScale);
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java
================================================

package com.github.mikephil.charting.charts;

import android.content.Context;
import android.util.AttributeSet;

import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
import com.github.mikephil.charting.renderer.LineChartRenderer;

/**
 * Chart that draws lines, surfaces, circles, ...
 *
 * @author Philipp Jahoda
 */
public class LineChart extends BarLineChartBase<LineData> implements LineDataProvider {

    public LineChart(Context context) {
        super(context);
    }

    public LineChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LineChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new LineChartRenderer(this, mAnimator, mViewPortHandler);
    }

    @Override
    public LineData getLineData() {
        return mData;
    }

    @Override
    protected void onDetachedFromWindow() {
        // releases the bitmap in the renderer to avoid oom error
        if (mRenderer != null && mRenderer instanceof LineChartRenderer) {
            ((LineChartRenderer) mRenderer).releaseBitmap();
        }
        super.onDetachedFromWindow();
    }
}


================================================
FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieChart.java
================================================

package com.github.mikephil.charting.charts;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet;

import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.highlight.PieHighlighter;
import com.github.mikephil.charting.interfaces.datasets.IPieDataSet;
import com.github.mikephil.charting.renderer.PieChartRenderer;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Utils;

import java.util.List;

/**
 * View that represents a pie chart. Draws cake like slices.
 *
 * @author Philipp Jahoda
 */
public class PieChart extends PieRadarChartBase<PieData> {

    /**
     * rect object that represents the bounds of the piechart, needed for
     * drawing the circle
     */
    private RectF mCircleBox = new RectF();

    /**
     * flag indicating if entry labels should be drawn or not
     */
    private boolean mDrawEntryLabels = true;

    /**
     * array that holds the width of each pie-slice in degrees
     */
    private float[] mDrawAngles = new float[1];

    /**
     * array that holds the absolute angle in degrees of each slice
     */
    private float[] mAbsoluteAngles = new float[1];

    /**
     * if true, the white hole inside the chart will be drawn
     */
    private boolean mDrawHole = true;

    /**
     * if true, the hole will see-through to the inner tips of the slices
     */
    private boolean mDrawSlicesUnderHole = false;

    /**
     * if true, the values inside the piechart are drawn as percent values
     */
    private boolean mUsePercentValues = false;

    /**
     * if true, the slices of the piechart are rounded
     */
    private boolean mDrawRoundedSlices = false;

    /**
     * variable for the text that is drawn in the center of the pie-chart
     */
    private CharSequence mCenterText = "";

    private MPPointF mCenterTextOffset = MPPointF.getInstance(0, 0);

    /**
     * indicates the size of the hole in the center of the piechart, default:
     * radius / 2
     */
    private float mHoleRadiusPercent = 50f;

    /**
     * the radius of the transparent circle next to the chart-hole in the center
     */
    protected float mTransparentCircleRadiusPercent = 55f;

    /**
     * if enabled, centertext is drawn
     */
    private boolean mDrawCenterText = true;

    private float mCenterTextRadiusPercent = 100.f;

    protected float mMaxAngle = 360f;

    public PieChart(Context context) {
        super(context);
    }

    public PieChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PieChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new PieChartRenderer(this, mAnimator, mViewPortHandler);
        mXAxis = null;

        mHighlighter = new PieHighlighter(this);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mData == null)
            return;

        mRenderer.drawData(canvas);

        if (valuesToHighlight())
            mRenderer.drawHighlighted(canvas, mIndicesToHighlight);

        mRenderer.drawExtras(canvas);

        mRenderer.drawValues(canvas);

        mLegendRenderer.renderLegend(canvas);

        drawDescription(canvas);

        drawMarkers(canvas);
    }

    @Override
    public void calculateOffsets() {
        super.calculateOffsets();

        // prevent nullpointer when no data set
        if (mData == null)
            return;

        float diameter = getDiameter();
        float radius = diameter / 2f;

        MPPointF c = getCenterOffsets();

        float shift = mData.getDataSet().getSelectionShift();

        // create the circle box that will contain the pie-chart (the bounds of
        // the pie-chart)
        mCircleBox.set(c.x - radius + shift,
                c.y - radius + shift,
                c.x + radius - shi
Download .txt
gitextract_9o6qzmer/

├── .gitignore
├── .idea/
│   ├── gradle.xml
│   ├── markdown-navigator/
│   │   └── profiles_settings.xml
│   ├── markdown-navigator.xml
│   ├── misc.xml
│   ├── modules.xml
│   ├── runConfigurations.xml
│   └── vcs.xml
├── MPChartLib/
│   ├── .gitignore
│   ├── .settings/
│   │   └── gradle/
│   │       └── org.springsource.ide.eclipse.gradle.core.prefs
│   ├── build.gradle
│   ├── pom.xml
│   ├── proguard-project.txt
│   ├── project.properties
│   ├── src/
│   │   ├── main/
│   │   │   ├── AndroidManifest.xml
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── github/
│   │   │               └── mikephil/
│   │   │                   └── charting/
│   │   │                       ├── animation/
│   │   │                       │   ├── ChartAnimator.java
│   │   │                       │   ├── Easing.java
│   │   │                       │   └── EasingFunction.java
│   │   │                       ├── buffer/
│   │   │                       │   ├── AbstractBuffer.java
│   │   │                       │   ├── BarBuffer.java
│   │   │                       │   └── HorizontalBarBuffer.java
│   │   │                       ├── charts/
│   │   │                       │   ├── BarChart.java
│   │   │                       │   ├── BarLineChartBase.java
│   │   │                       │   ├── BubbleChart.java
│   │   │                       │   ├── CandleStickChart.java
│   │   │                       │   ├── Chart.java
│   │   │                       │   ├── CombinedChart.java
│   │   │                       │   ├── HorizontalBarChart.java
│   │   │                       │   ├── LineChart.java
│   │   │                       │   ├── PieChart.java
│   │   │                       │   ├── PieRadarChartBase.java
│   │   │                       │   ├── RadarChart.java
│   │   │                       │   └── ScatterChart.java
│   │   │                       ├── components/
│   │   │                       │   ├── AxisBase.java
│   │   │                       │   ├── ComponentBase.java
│   │   │                       │   ├── Description.java
│   │   │                       │   ├── IMarker.java
│   │   │                       │   ├── Legend.java
│   │   │                       │   ├── LegendEntry.java
│   │   │                       │   ├── LimitLine.java
│   │   │                       │   ├── MarkerImage.java
│   │   │                       │   ├── MarkerView.java
│   │   │                       │   ├── XAxis.java
│   │   │                       │   └── YAxis.java
│   │   │                       ├── data/
│   │   │                       │   ├── BarData.java
│   │   │                       │   ├── BarDataSet.java
│   │   │                       │   ├── BarEntry.java
│   │   │                       │   ├── BarLineScatterCandleBubbleData.java
│   │   │                       │   ├── BarLineScatterCandleBubbleDataSet.java
│   │   │                       │   ├── BaseDataSet.java
│   │   │                       │   ├── BaseEntry.java
│   │   │                       │   ├── BubbleData.java
│   │   │                       │   ├── BubbleDataSet.java
│   │   │                       │   ├── BubbleEntry.java
│   │   │                       │   ├── CandleData.java
│   │   │                       │   ├── CandleDataSet.java
│   │   │                       │   ├── CandleEntry.java
│   │   │                       │   ├── ChartData.java
│   │   │                       │   ├── CombinedData.java
│   │   │                       │   ├── DataSet.java
│   │   │                       │   ├── Entry.java
│   │   │                       │   ├── LineData.java
│   │   │                       │   ├── LineDataSet.java
│   │   │                       │   ├── LineRadarDataSet.java
│   │   │                       │   ├── LineScatterCandleRadarDataSet.java
│   │   │                       │   ├── PieData.java
│   │   │                       │   ├── PieDataSet.java
│   │   │                       │   ├── PieEntry.java
│   │   │                       │   ├── RadarData.java
│   │   │                       │   ├── RadarDataSet.java
│   │   │                       │   ├── RadarEntry.java
│   │   │                       │   ├── ScatterData.java
│   │   │                       │   ├── ScatterDataSet.java
│   │   │                       │   └── filter/
│   │   │                       │       └── Approximator.java
│   │   │                       ├── exception/
│   │   │                       │   └── DrawingDataSetNotCreatedException.java
│   │   │                       ├── formatter/
│   │   │                       │   ├── ColorFormatter.java
│   │   │                       │   ├── DefaultAxisValueFormatter.java
│   │   │                       │   ├── DefaultFillFormatter.java
│   │   │                       │   ├── DefaultValueFormatter.java
│   │   │                       │   ├── IAxisValueFormatter.java
│   │   │                       │   ├── IFillFormatter.java
│   │   │                       │   ├── IValueFormatter.java
│   │   │                       │   ├── IndexAxisValueFormatter.java
│   │   │                       │   ├── LargeValueFormatter.java
│   │   │                       │   ├── PercentFormatter.java
│   │   │                       │   └── StackedValueFormatter.java
│   │   │                       ├── highlight/
│   │   │                       │   ├── BarHighlighter.java
│   │   │                       │   ├── ChartHighlighter.java
│   │   │                       │   ├── CombinedHighlighter.java
│   │   │                       │   ├── Highlight.java
│   │   │                       │   ├── HorizontalBarHighlighter.java
│   │   │                       │   ├── IHighlighter.java
│   │   │                       │   ├── PieHighlighter.java
│   │   │                       │   ├── PieRadarHighlighter.java
│   │   │                       │   ├── RadarHighlighter.java
│   │   │                       │   └── Range.java
│   │   │                       ├── interfaces/
│   │   │                       │   ├── dataprovider/
│   │   │                       │   │   ├── BarDataProvider.java
│   │   │                       │   │   ├── BarLineScatterCandleBubbleDataProvider.java
│   │   │                       │   │   ├── BubbleDataProvider.java
│   │   │                       │   │   ├── CandleDataProvider.java
│   │   │                       │   │   ├── ChartInterface.java
│   │   │                       │   │   ├── CombinedDataProvider.java
│   │   │                       │   │   ├── LineDataProvider.java
│   │   │                       │   │   └── ScatterDataProvider.java
│   │   │                       │   └── datasets/
│   │   │                       │       ├── IBarDataSet.java
│   │   │                       │       ├── IBarLineScatterCandleBubbleDataSet.java
│   │   │                       │       ├── IBubbleDataSet.java
│   │   │                       │       ├── ICandleDataSet.java
│   │   │                       │       ├── IDataSet.java
│   │   │                       │       ├── ILineDataSet.java
│   │   │                       │       ├── ILineRadarDataSet.java
│   │   │                       │       ├── ILineScatterCandleRadarDataSet.java
│   │   │                       │       ├── IPieDataSet.java
│   │   │                       │       ├── IRadarDataSet.java
│   │   │                       │       └── IScatterDataSet.java
│   │   │                       ├── jobs/
│   │   │                       │   ├── AnimatedMoveViewJob.java
│   │   │                       │   ├── AnimatedViewPortJob.java
│   │   │                       │   ├── AnimatedZoomJob.java
│   │   │                       │   ├── MoveViewJob.java
│   │   │                       │   ├── ViewPortJob.java
│   │   │                       │   └── ZoomJob.java
│   │   │                       ├── listener/
│   │   │                       │   ├── BarLineChartTouchListener.java
│   │   │                       │   ├── ChartTouchListener.java
│   │   │                       │   ├── OnChartGestureListener.java
│   │   │                       │   ├── OnChartValueSelectedListener.java
│   │   │                       │   ├── OnDrawLineChartTouchListener.java
│   │   │                       │   ├── OnDrawListener.java
│   │   │                       │   └── PieRadarChartTouchListener.java
│   │   │                       ├── matrix/
│   │   │                       │   └── Vector3.java
│   │   │                       ├── renderer/
│   │   │                       │   ├── AxisRenderer.java
│   │   │                       │   ├── BarChartRenderer.java
│   │   │                       │   ├── BarLineScatterCandleBubbleRenderer.java
│   │   │                       │   ├── BubbleChartRenderer.java
│   │   │                       │   ├── CandleStickChartRenderer.java
│   │   │                       │   ├── CombinedChartRenderer.java
│   │   │                       │   ├── DataRenderer.java
│   │   │                       │   ├── HorizontalBarChartRenderer.java
│   │   │                       │   ├── LegendRenderer.java
│   │   │                       │   ├── LineChartRenderer.java
│   │   │                       │   ├── LineRadarRenderer.java
│   │   │                       │   ├── LineScatterCandleRadarRenderer.java
│   │   │                       │   ├── PieChartRenderer.java
│   │   │                       │   ├── RadarChartRenderer.java
│   │   │                       │   ├── Renderer.java
│   │   │                       │   ├── ScatterChartRenderer.java
│   │   │                       │   ├── XAxisRenderer.java
│   │   │                       │   ├── XAxisRendererHorizontalBarChart.java
│   │   │                       │   ├── XAxisRendererRadarChart.java
│   │   │                       │   ├── YAxisRenderer.java
│   │   │                       │   ├── YAxisRendererHorizontalBarChart.java
│   │   │                       │   ├── YAxisRendererRadarChart.java
│   │   │                       │   └── scatter/
│   │   │                       │       ├── ChevronDownShapeRenderer.java
│   │   │                       │       ├── ChevronUpShapeRenderer.java
│   │   │                       │       ├── CircleShapeRenderer.java
│   │   │                       │       ├── CrossShapeRenderer.java
│   │   │                       │       ├── IShapeRenderer.java
│   │   │                       │       ├── SquareShapeRenderer.java
│   │   │                       │       ├── TriangleShapeRenderer.java
│   │   │                       │       └── XShapeRenderer.java
│   │   │                       └── utils/
│   │   │                           ├── ColorTemplate.java
│   │   │                           ├── EntryXComparator.java
│   │   │                           ├── FSize.java
│   │   │                           ├── FileUtils.java
│   │   │                           ├── HorizontalViewPortHandler.java
│   │   │                           ├── MPPointD.java
│   │   │                           ├── MPPointF.java
│   │   │                           ├── ObjectPool.java
│   │   │                           ├── Transformer.java
│   │   │                           ├── TransformerHorizontalBarChart.java
│   │   │                           ├── Utils.java
│   │   │                           └── ViewPortHandler.java
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── github/
│   │                   └── mikephil/
│   │                       └── charting/
│   │                           └── test/
│   │                               ├── ApproximatorTest.java
│   │                               ├── AxisRendererTest.java
│   │                               ├── BarDataTest.java
│   │                               ├── ChartDataTest.java
│   │                               ├── DataSetTest.java
│   │                               ├── LargeValueFormatterTest.java
│   │                               └── ObjectPoolTest.java
│   └── 说明.txt
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── cn/
│       │           └── laplacetech/
│       │               └── android/
│       │                   └── laplacekline/
│       │                       └── ExampleInstrumentedTest.kt
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── laplacetech/
│       │   │           └── android/
│       │   │               └── laplacekline/
│       │   │                   └── MainActivity.kt
│       │   └── res/
│       │       ├── drawable/
│       │       │   └── ic_launcher_background.xml
│       │       ├── drawable-v24/
│       │       │   └── ic_launcher_foreground.xml
│       │       ├── layout/
│       │       │   └── activity_main.xml
│       │       ├── mipmap-anydpi-v26/
│       │       │   ├── ic_launcher.xml
│       │       │   └── ic_launcher_round.xml
│       │       ├── raw/
│       │       │   ├── fifteen_minutes.json
│       │       │   ├── five_minutes.json
│       │       │   ├── four_hours.json
│       │       │   ├── one_hour.json
│       │       │   ├── one_minute.json
│       │       │   ├── oneday.json
│       │       │   └── twelve_hours.json
│       │       └── values/
│       │           ├── colors.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── laplacetech/
│                       └── android/
│                           └── laplacekline/
│                               └── ExampleUnitTest.kt
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── klinelib/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── cn/
│       │           └── laplacetech/
│       │               └── klinelib/
│       │                   └── ExampleInstrumentedTest.kt
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── laplacetech/
│       │   │           └── klinelib/
│       │   │               ├── chart/
│       │   │               │   ├── BarChartRenderer.kt
│       │   │               │   ├── BaseView.kt
│       │   │               │   ├── BubbleChartRenderer.kt
│       │   │               │   ├── CandleStickChartRenderer.kt
│       │   │               │   ├── ChartInfoView.kt
│       │   │               │   ├── ChartInfoViewHandler.kt
│       │   │               │   ├── ColorContentYAxisRenderer.kt
│       │   │               │   ├── CoupleChartGestureListener.kt
│       │   │               │   ├── CustomCombinedChart.kt
│       │   │               │   ├── CustomCombinedChartRenderer.kt
│       │   │               │   ├── CustomLineChart.kt
│       │   │               │   ├── CustomLineChartRenderer.kt
│       │   │               │   ├── InfoViewListener.kt
│       │   │               │   ├── KLineChartInfoView.kt
│       │   │               │   ├── KLineView.kt
│       │   │               │   ├── LineChartInfoView.kt
│       │   │               │   ├── LineChartRenderer.kt
│       │   │               │   ├── LineChartXMarkerView.kt
│       │   │               │   ├── LineChartYMarkerView.kt
│       │   │               │   ├── OnLoadMoreListener.kt
│       │   │               │   ├── ScatterChartRenderer.kt
│       │   │               │   ├── TickChart.kt
│       │   │               │   └── TimeLineView.kt
│       │   │               ├── model/
│       │   │               │   ├── HisData.kt
│       │   │               │   ├── KDJ.kt
│       │   │               │   ├── MACD.kt
│       │   │               │   └── RSV.kt
│       │   │               ├── util/
│       │   │               │   ├── DataUtils.kt
│       │   │               │   ├── DateUtils.kt
│       │   │               │   ├── DisplayUtils.kt
│       │   │               │   ├── DoubleUtil.kt
│       │   │               │   └── Extension.kt
│       │   │               └── view/
│       │   │                   ├── KLineMarkView.kt
│       │   │                   └── VolumeMarkView.kt
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── markview_volume.xml
│       │       │   ├── view_kline.xml
│       │       │   ├── view_kline_chart_info.xml
│       │       │   ├── view_line_chart_info.xml
│       │       │   ├── view_mp_line_chart.xml
│       │       │   ├── view_mp_real_price_marker.xml
│       │       │   └── view_timeline.xml
│       │       └── values/
│       │           ├── attr.xml
│       │           ├── colors.xml
│       │           ├── dimens.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── laplacetech/
│                       └── klinelib/
│                           └── ExampleUnitTest.kt
└── settings.gradle
Download .txt
SYMBOL INDEX (2092 symbols across 163 files)

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/ChartAnimator.java
  class ChartAnimator (line 14) | public class ChartAnimator {
    method ChartAnimator (line 19) | public ChartAnimator() {
    method ChartAnimator (line 23) | public ChartAnimator(AnimatorUpdateListener listener) {
    method animateXY (line 53) | public void animateXY(int durationMillisX, int durationMillisY, Easing...
    method animateX (line 88) | public void animateX(int durationMillis, EasingFunction easing) {
    method animateY (line 108) | public void animateY(int durationMillis, EasingFunction easing) {
    method animateXY (line 135) | public void animateXY(int durationMillisX, int durationMillisY, Easing...
    method animateX (line 170) | public void animateX(int durationMillis, Easing.EasingOption easing) {
    method animateY (line 190) | public void animateY(int durationMillis, Easing.EasingOption easing) {
    method animateXY (line 215) | public void animateXY(int durationMillisX, int durationMillisY) {
    method animateX (line 246) | public void animateX(int durationMillis) {
    method animateY (line 264) | public void animateY(int durationMillis) {
    method getPhaseY (line 280) | public float getPhaseY() {
    method setPhaseY (line 289) | public void setPhaseY(float phase) {
    method getPhaseX (line 298) | public float getPhaseX() {
    method setPhaseX (line 307) | public void setPhaseX(float phase) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/Easing.java
  class Easing (line 9) | public class Easing {
    type EasingOption (line 15) | public enum EasingOption {
    method getEasingFunctionFromOption (line 46) | public static EasingFunction getEasingFunctionFromOption(EasingOption ...
    class EasingFunctions (line 108) | private static class EasingFunctions {
      method getInterpolation (line 121) | @Override
      method getInterpolation (line 134) | @Override
      method getInterpolation (line 147) | @Override
      method getInterpolation (line 164) | @Override
      method getInterpolation (line 184) | @Override
      method getInterpolation (line 199) | @Override
      method getInterpolation (line 219) | @Override
      method getInterpolation (line 233) | public float getInterpolation(float input) {
      method getInterpolation (line 240) | public float getInterpolation(float input) {
      method getInterpolation (line 248) | @Override
      method getInterpolation (line 265) | @Override
      method getInterpolation (line 277) | @Override
      method getInterpolation (line 290) | @Override
      method getInterpolation (line 302) | @Override
      method getInterpolation (line 316) | @Override
      method getInterpolation (line 344) | @Override
      method getInterpolation (line 371) | @Override
      method getInterpolation (line 384) | @Override
      method getInterpolation (line 406) | @Override
      method getInterpolation (line 442) | @Override
      method getInterpolation (line 486) | @Override
      method getInterpolation (line 539) | @Override
      method getInterpolation (line 576) | @Override
      method getInterpolation (line 594) | @Override
      method getInterpolation (line 619) | @Override
      method getInterpolation (line 641) | @Override
      method getInterpolation (line 673) | @Override
      method getInterpolation (line 709) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/animation/EasingFunction.java
  type EasingFunction (line 10) | @SuppressLint("NewApi")
    method getInterpolation (line 13) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.java
  class AbstractBuffer (line 13) | public abstract class AbstractBuffer<T> {
    method AbstractBuffer (line 38) | public AbstractBuffer(int size) {
    method limitFrom (line 44) | public void limitFrom(int from) {
    method limitTo (line 51) | public void limitTo(int to) {
    method reset (line 60) | public void reset() {
    method size (line 69) | public int size() {
    method setPhases (line 79) | public void setPhases(float phaseX, float phaseY) {
    method feed (line 90) | public abstract void feed(T data);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.java
  class BarBuffer (line 7) | public class BarBuffer extends AbstractBuffer<IBarDataSet> {
    method BarBuffer (line 17) | public BarBuffer(int size, int dataSetCount, boolean containsStacks) {
    method setBarWidth (line 23) | public void setBarWidth(float barWidth) {
    method setDataSet (line 27) | public void setDataSet(int index) {
    method setInverted (line 31) | public void setInverted(boolean inverted) {
    method addBar (line 35) | protected void addBar(float left, float top, float right, float bottom) {
    method feed (line 43) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.java
  class HorizontalBarBuffer (line 7) | public class HorizontalBarBuffer extends BarBuffer {
    method HorizontalBarBuffer (line 9) | public HorizontalBarBuffer(int size, int dataSetCount, boolean contain...
    method feed (line 13) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarChart.java
  class BarChart (line 22) | public class BarChart extends BarLineChartBase<BarData> implements BarDa...
    method BarChart (line 41) | public BarChart(Context context) {
    method BarChart (line 45) | public BarChart(Context context, AttributeSet attrs) {
    method BarChart (line 49) | public BarChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 53) | @Override
    method calcMinMax (line 65) | @Override
    method getHighlightByTouchPoint (line 89) | @Override
    method getBarBounds (line 113) | public RectF getBarBounds(BarEntry e) {
    method getBarBounds (line 128) | public void getBarBounds(BarEntry e, RectF outputRect) {
    method setDrawValueAboveBar (line 159) | public void setDrawValueAboveBar(boolean enabled) {
    method isDrawValueAboveBarEnabled (line 168) | public boolean isDrawValueAboveBarEnabled() {
    method setDrawBarShadow (line 178) | public void setDrawBarShadow(boolean enabled) {
    method isDrawBarShadowEnabled (line 187) | public boolean isDrawBarShadowEnabled() {
    method setHighlightFullBarEnabled (line 199) | public void setHighlightFullBarEnabled(boolean enabled) {
    method isHighlightFullBarEnabled (line 206) | @Override
    method highlightValue (line 219) | public void highlightValue(float x, int dataSetIndex, int stackIndex) {
    method getBarData (line 223) | @Override
    method setFitBars (line 235) | public void setFitBars(boolean enabled) {
    method groupBars (line 249) | public void groupBars(float fromX, float groupSpace, float barSpace) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarLineChartBase.java
  class BarLineChartBase (line 44) | @SuppressLint("RtlHardcoded")
    method BarLineChartBase (line 138) | public BarLineChartBase(Context context, AttributeSet attrs, int defSt...
    method BarLineChartBase (line 142) | public BarLineChartBase(Context context, AttributeSet attrs) {
    method BarLineChartBase (line 146) | public BarLineChartBase(Context context) {
    method init (line 150) | @Override
    method onDraw (line 185) | @Override
    method resetTracking (line 288) | public void resetTracking() {
    method prepareValuePxMatrix (line 293) | protected void prepareValuePxMatrix() {
    method prepareOffsetMatrix (line 309) | protected void prepareOffsetMatrix() {
    method notifyDataSetChanged (line 315) | @Override
    method autoScale (line 345) | protected void autoScale() {
    method calcMinMax (line 367) | @Override
    method calculateLegendOffsets (line 378) | protected void calculateLegendOffsets(RectF offsets) {
    method calculateOffsets (line 456) | @Override
    method drawGridBackground (line 528) | protected void drawGridBackground(Canvas c) {
    method getTransformer (line 548) | public Transformer getTransformer(AxisDependency which) {
    method onTouchEvent (line 555) | @Override
    method computeScroll (line 569) | @Override
    method zoomIn (line 589) | public void zoomIn() {
    method zoomOut (line 608) | public void zoomOut() {
    method resetZoom (line 627) | public void resetZoom() {
    method zoom (line 648) | public void zoom(float scaleX, float scaleY, float x, float y) {
    method zoom (line 670) | public void zoom(float scaleX, float scaleY, float xValue, float yValu...
    method zoomToCenter (line 682) | public void zoomToCenter(float scaleX, float scaleY) {
    method zoomAndCenterAnimated (line 701) | @TargetApi(11)
    method fitScreen (line 727) | public void fitScreen() {
    method setScaleMinima (line 743) | public void setScaleMinima(float scaleX, float scaleY) {
    method setVisibleXRangeMaximum (line 756) | public void setVisibleXRangeMaximum(float maxXRange) {
    method setVisibleXRangeMinimum (line 769) | public void setVisibleXRangeMinimum(float minXRange) {
    method setVisibleXRange (line 782) | public void setVisibleXRange(float minXRange, float maxXRange) {
    method setVisibleYRangeMaximum (line 795) | public void setVisibleYRangeMaximum(float maxYRange, AxisDependency ax...
    method setVisibleYRangeMinimum (line 806) | public void setVisibleYRangeMinimum(float minYRange, AxisDependency ax...
    method setVisibleYRange (line 818) | public void setVisibleYRange(float minYRange, float maxYRange, AxisDep...
    method moveViewToX (line 831) | public void moveViewToX(float xValue) {
    method moveViewTo (line 848) | public void moveViewTo(float xValue, float yValue, AxisDependency axis) {
    method moveViewToAnimated (line 868) | @TargetApi(11)
    method centerViewToY (line 895) | public void centerViewToY(float yValue, AxisDependency axis) {
    method centerViewTo (line 914) | public void centerViewTo(float xValue, float yValue, AxisDependency ax...
    method centerViewToAnimated (line 935) | @TargetApi(11)
    method setViewPortOffsets (line 974) | public void setViewPortOffsets(final float left, final float top,
    method resetViewPortOffsets (line 994) | public void resetViewPortOffsets() {
    method getAxisRange (line 1010) | protected float getAxisRange(AxisDependency axis) {
    method setOnDrawListener (line 1022) | public void setOnDrawListener(OnDrawListener drawListener) {
    method getDrawListener (line 1031) | public OnDrawListener getDrawListener() {
    method getPosition (line 1045) | public MPPointF getPosition(Entry e, AxisDependency axis) {
    method setMaxVisibleValueCount (line 1064) | public void setMaxVisibleValueCount(int count) {
    method getMaxVisibleCount (line 1068) | public int getMaxVisibleCount() {
    method setHighlightPerDragEnabled (line 1078) | public void setHighlightPerDragEnabled(boolean enabled) {
    method isHighlightPerDragEnabled (line 1082) | public boolean isHighlightPerDragEnabled() {
    method setGridBackgroundColor (line 1092) | public void setGridBackgroundColor(int color) {
    method setDragEnabled (line 1102) | public void setDragEnabled(boolean enabled) {
    method isDragEnabled (line 1111) | public boolean isDragEnabled() {
    method setScaleEnabled (line 1121) | public void setScaleEnabled(boolean enabled) {
    method setScaleXEnabled (line 1126) | public void setScaleXEnabled(boolean enabled) {
    method setScaleYEnabled (line 1130) | public void setScaleYEnabled(boolean enabled) {
    method isScaleXEnabled (line 1134) | public boolean isScaleXEnabled() {
    method isScaleYEnabled (line 1138) | public boolean isScaleYEnabled() {
    method setDoubleTapToZoomEnabled (line 1148) | public void setDoubleTapToZoomEnabled(boolean enabled) {
    method isDoubleTapToZoomEnabled (line 1157) | public boolean isDoubleTapToZoomEnabled() {
    method setDrawGridBackground (line 1166) | public void setDrawGridBackground(boolean enabled) {
    method setDrawBorders (line 1176) | public void setDrawBorders(boolean enabled) {
    method isDrawBordersEnabled (line 1186) | public boolean isDrawBordersEnabled() {
    method setClipValuesToContent (line 1196) | public void setClipValuesToContent(boolean enabled) {
    method isClipValuesToContentEnabled (line 1206) | public boolean isClipValuesToContentEnabled() {
    method setBorderWidth (line 1215) | public void setBorderWidth(float width) {
    method setBorderColor (line 1224) | public void setBorderColor(int color) {
    method getMinOffset (line 1231) | public float getMinOffset() {
    method setMinOffset (line 1238) | public void setMinOffset(float minOffset) {
    method isKeepPositionOnRotation (line 1245) | public boolean isKeepPositionOnRotation() {
    method setKeepPositionOnRotation (line 1252) | public void setKeepPositionOnRotation(boolean keepPositionOnRotation) {
    method getValuesByTouchPoint (line 1267) | public MPPointD getValuesByTouchPoint(float x, float y, AxisDependency...
    method getValuesByTouchPoint (line 1273) | public void getValuesByTouchPoint(float x, float y, AxisDependency axi...
    method getPixelForValues (line 1286) | public MPPointD getPixelForValues(float x, float y, AxisDependency axi...
    method getEntryByTouchPoint (line 1297) | public Entry getEntryByTouchPoint(float x, float y) {
    method getDataSetByTouchPoint (line 1312) | public IBarLineScatterCandleBubbleDataSet getDataSetByTouchPoint(float...
    method getLowestVisibleX (line 1331) | @Override
    method getHighestVisibleX (line 1350) | @Override
    method getVisibleXRange (line 1363) | public float getVisibleXRange() {
    method getScaleX (line 1370) | public float getScaleX() {
    method getScaleY (line 1380) | public float getScaleY() {
    method isFullyZoomedOut (line 1392) | public boolean isFullyZoomedOut() {
    method getAxisLeft (line 1402) | public YAxis getAxisLeft() {
    method getAxisRight (line 1412) | public YAxis getAxisRight() {
    method getAxis (line 1423) | public YAxis getAxis(AxisDependency axis) {
    method isInverted (line 1430) | @Override
    method setPinchZoom (line 1441) | public void setPinchZoom(boolean enabled) {
    method isPinchZoomEnabled (line 1450) | public boolean isPinchZoomEnabled() {
    method setDragOffsetX (line 1460) | public void setDragOffsetX(float offset) {
    method setDragOffsetY (line 1470) | public void setDragOffsetY(float offset) {
    method hasNoDragOffset (line 1479) | public boolean hasNoDragOffset() {
    method getRendererXAxis (line 1483) | public XAxisRenderer getRendererXAxis() {
    method setXAxisRenderer (line 1492) | public void setXAxisRenderer(XAxisRenderer xAxisRenderer) {
    method getRendererLeftYAxis (line 1496) | public YAxisRenderer getRendererLeftYAxis() {
    method setRendererLeftYAxis (line 1505) | public void setRendererLeftYAxis(YAxisRenderer rendererLeftYAxis) {
    method getRendererRightYAxis (line 1509) | public YAxisRenderer getRendererRightYAxis() {
    method setRendererRightYAxis (line 1518) | public void setRendererRightYAxis(YAxisRenderer rendererRightYAxis) {
    method getYChartMax (line 1522) | @Override
    method getYChartMin (line 1527) | @Override
    method isAnyAxisInverted (line 1537) | public boolean isAnyAxisInverted() {
    method setAutoScaleMinMaxEnabled (line 1553) | public void setAutoScaleMinMaxEnabled(boolean enabled) {
    method isAutoScaleMinMaxEnabled (line 1561) | public boolean isAutoScaleMinMaxEnabled() {
    method setPaint (line 1565) | @Override
    method getPaint (line 1576) | @Override
    method onSizeChanged (line 1592) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/BubbleChart.java
  class BubbleChart (line 19) | public class BubbleChart extends BarLineChartBase<BubbleData> implements...
    method BubbleChart (line 21) | public BubbleChart(Context context) {
    method BubbleChart (line 25) | public BubbleChart(Context context, AttributeSet attrs) {
    method BubbleChart (line 29) | public BubbleChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 33) | @Override
    method getBubbleData (line 40) | public BubbleData getBubbleData() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/CandleStickChart.java
  class CandleStickChart (line 16) | public class CandleStickChart extends BarLineChartBase<CandleData> imple...
    method CandleStickChart (line 18) | public CandleStickChart(Context context) {
    method CandleStickChart (line 22) | public CandleStickChart(Context context, AttributeSet attrs) {
    method CandleStickChart (line 26) | public CandleStickChart(Context context, AttributeSet attrs, int defSt...
    method init (line 30) | @Override
    method getCandleData (line 40) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java
  class Chart (line 63) | @SuppressLint("NewApi")
    method Chart (line 183) | public Chart(Context context) {
    method Chart (line 191) | public Chart(Context context, AttributeSet attrs) {
    method Chart (line 199) | public Chart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 207) | protected void init() {
    method setData (line 286) | public void setData(T data) {
    method clear (line 314) | public void clear() {
    method clearValues (line 326) | public void clearValues() {
    method isEmpty (line 337) | public boolean isEmpty() {
    method notifyDataSetChanged (line 356) | public abstract void notifyDataSetChanged();
    method calculateOffsets (line 363) | protected abstract void calculateOffsets();
    method calcMinMax (line 368) | protected abstract void calcMinMax();
    method setupDefaultFormatter (line 374) | protected void setupDefaultFormatter(float min, float max) {
    method onDraw (line 396) | @Override
    method drawDescription (line 422) | protected void drawDescription(Canvas c) {
    method getMaxHighlightDistance (line 465) | @Override
    method setMaxHighlightDistance (line 476) | public void setMaxHighlightDistance(float distDp) {
    method getHighlighted (line 486) | public Highlight[] getHighlighted() {
    method isHighlightPerTapEnabled (line 495) | public boolean isHighlightPerTapEnabled() {
    method setHighlightPerTapEnabled (line 505) | public void setHighlightPerTapEnabled(boolean enabled) {
    method valuesToHighlight (line 516) | public boolean valuesToHighlight() {
    method setLastHighlighted (line 527) | protected void setLastHighlighted(Highlight[] highs) {
    method highlightValues (line 544) | public void highlightValues(Highlight[] highs) {
    method highlightValue (line 562) | public void highlightValue(float x, int dataSetIndex) {
    method highlightValue (line 574) | public void highlightValue(float x, float y, int dataSetIndex) {
    method highlightValue (line 585) | public void highlightValue(float x, int dataSetIndex, boolean callList...
    method highlightValue (line 597) | public void highlightValue(float x, float y, int dataSetIndex, boolean...
    method highlightValue (line 612) | public void highlightValue(Highlight highlight) {
    method highlightValue (line 624) | public void highlightValue(Highlight high, boolean callListener) {
    method getHighlightByTouchPoint (line 673) | public Highlight getHighlightByTouchPoint(float x, float y) {
    method setOnTouchListener (line 688) | public void setOnTouchListener(ChartTouchListener l) {
    method getOnTouchListener (line 697) | public ChartTouchListener getOnTouchListener() {
    method drawMarkers (line 719) | protected void drawMarkers(Canvas canvas) {
    method getMarkerPosition (line 759) | protected float[] getMarkerPosition(Highlight high) {
    method getAnimator (line 774) | public ChartAnimator getAnimator() {
    method isDragDecelerationEnabled (line 781) | public boolean isDragDecelerationEnabled() {
    method setDragDecelerationEnabled (line 790) | public void setDragDecelerationEnabled(boolean enabled) {
    method getDragDecelerationFrictionCoef (line 799) | public float getDragDecelerationFrictionCoef() {
    method setDragDecelerationFrictionCoef (line 811) | public void setDragDecelerationFrictionCoef(float newValue) {
    method animateXY (line 839) | public void animateXY(int durationMillisX, int durationMillisY, Easing...
    method animateX (line 853) | public void animateX(int durationMillis, EasingFunction easing) {
    method animateY (line 866) | public void animateY(int durationMillis, EasingFunction easing) {
    method animateXY (line 887) | public void animateXY(int durationMillisX, int durationMillisY, Easing...
    method animateX (line 901) | public void animateX(int durationMillis, Easing.EasingOption easing) {
    method animateY (line 914) | public void animateY(int durationMillis, Easing.EasingOption easing) {
    method animateX (line 932) | public void animateX(int durationMillis) {
    method animateY (line 944) | public void animateY(int durationMillis) {
    method animateXY (line 957) | public void animateXY(int durationMillisX, int durationMillisY) {
    method getXAxis (line 974) | public XAxis getXAxis() {
    method getDefaultValueFormatter (line 984) | public IValueFormatter getDefaultValueFormatter() {
    method setOnChartValueSelectedListener (line 993) | public void setOnChartValueSelectedListener(OnChartValueSelectedListen...
    method setOnChartGestureListener (line 1003) | public void setOnChartGestureListener(OnChartGestureListener l) {
    method getOnChartGestureListener (line 1012) | public OnChartGestureListener getOnChartGestureListener() {
    method getYMax (line 1021) | public float getYMax() {
    method getYMin (line 1030) | public float getYMin() {
    method getXChartMax (line 1034) | @Override
    method getXChartMin (line 1039) | @Override
    method getXRange (line 1044) | @Override
    method getCenter (line 1055) | public MPPointF getCenter() {
    method getCenterOffsets (line 1066) | @Override
    method setExtraOffsets (line 1080) | public void setExtraOffsets(float left, float top, float right, float ...
    method setExtraTopOffset (line 1090) | public void setExtraTopOffset(float offset) {
    method getExtraTopOffset (line 1097) | public float getExtraTopOffset() {
    method setExtraRightOffset (line 1104) | public void setExtraRightOffset(float offset) {
    method getExtraRightOffset (line 1111) | public float getExtraRightOffset() {
    method setExtraBottomOffset (line 1118) | public void setExtraBottomOffset(float offset) {
    method getExtraBottomOffset (line 1125) | public float getExtraBottomOffset() {
    method setExtraLeftOffset (line 1132) | public void setExtraLeftOffset(float offset) {
    method getExtraLeftOffset (line 1139) | public float getExtraLeftOffset() {
    method setLogEnabled (line 1149) | public void setLogEnabled(boolean enabled) {
    method isLogEnabled (line 1158) | public boolean isLogEnabled() {
    method setNoDataText (line 1168) | public void setNoDataText(String text) {
    method setNoDataTextColor (line 1177) | public void setNoDataTextColor(int color) {
    method setNoDataTextTypeface (line 1186) | public void setNoDataTextTypeface(Typeface tf) {
    method setTouchEnabled (line 1196) | public void setTouchEnabled(boolean enabled) {
    method setMarker (line 1205) | public void setMarker(IMarker marker) {
    method getMarker (line 1214) | public IMarker getMarker() {
    method setMarkerView (line 1218) | @Deprecated
    method getMarkerView (line 1223) | @Deprecated
    method setDescription (line 1233) | public void setDescription(Description desc) {
    method getDescription (line 1243) | public Description getDescription() {
    method getLegend (line 1254) | public Legend getLegend() {
    method getLegendRenderer (line 1264) | public LegendRenderer getLegendRenderer() {
    method getContentRect (line 1274) | @Override
    method disableScroll (line 1282) | public void disableScroll() {
    method enableScroll (line 1291) | public void enableScroll() {
    method setPaint (line 1336) | public void setPaint(Paint p, int which) {
    method getPaint (line 1354) | public Paint getPaint(int which) {
    method isDrawMarkerViewsEnabled (line 1365) | @Deprecated
    method setDrawMarkerViews (line 1370) | @Deprecated
    method isDrawMarkersEnabled (line 1381) | public boolean isDrawMarkersEnabled() {
    method setDrawMarkers (line 1392) | public void setDrawMarkers(boolean enabled) {
    method getData (line 1401) | public T getData() {
    method getViewPortHandler (line 1411) | public ViewPortHandler getViewPortHandler() {
    method getRenderer (line 1420) | public DataRenderer getRenderer() {
    method setRenderer (line 1429) | public void setRenderer(DataRenderer renderer) {
    method getHighlighter (line 1435) | public IHighlighter getHighlighter() {
    method setHighlighter (line 1445) | public void setHighlighter(ChartHighlighter highlighter) {
    method getCenterOfView (line 1454) | @Override
    method getChartBitmap (line 1464) | public Bitmap getChartBitmap() {
    method saveToPath (line 1494) | public boolean saveToPath(String title, String pathOnSD) {
    method saveToGallery (line 1531) | public boolean saveToGallery(String fileName, String subFolderPath, St...
    method saveToGallery (line 1610) | public boolean saveToGallery(String fileName, int quality) {
    method removeViewportJob (line 1619) | public void removeViewportJob(Runnable job) {
    method clearAllViewportJobs (line 1623) | public void clearAllViewportJobs() {
    method addViewportJob (line 1633) | public void addViewportJob(Runnable job) {
    method getJobs (line 1648) | public ArrayList<Runnable> getJobs() {
    method onLayout (line 1652) | @Override
    method onMeasure (line 1660) | @Override
    method onSizeChanged (line 1673) | @Override
    method setHardwareAccelerationEnabled (line 1703) | public void setHardwareAccelerationEnabled(boolean enabled) {
    method onDetachedFromWindow (line 1717) | @Override
    method unbindDrawables (line 1738) | private void unbindDrawables(View view) {
    method setUnbindEnabled (line 1759) | public void setUnbindEnabled(boolean enabled) {
    method getRealCount (line 1765) | public int getRealCount() {
    method setRealCount (line 1769) | public void setRealCount(int realCount) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/CombinedChart.java
  class CombinedChart (line 25) | public class CombinedChart extends BarLineChartBase<CombinedData> implem...
    type DrawOrder (line 51) | public enum DrawOrder {
    method CombinedChart (line 55) | public CombinedChart(Context context) {
    method CombinedChart (line 59) | public CombinedChart(Context context, AttributeSet attrs) {
    method CombinedChart (line 63) | public CombinedChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 67) | @Override
    method getCombinedData (line 84) | @Override
    method setData (line 89) | @Override
    method getHighlightByTouchPoint (line 106) | @Override
    method getLineData (line 123) | @Override
    method getBarData (line 130) | @Override
    method getScatterData (line 137) | @Override
    method getCandleData (line 144) | @Override
    method getBubbleData (line 151) | @Override
    method isDrawBarShadowEnabled (line 158) | @Override
    method isDrawValueAboveBarEnabled (line 163) | @Override
    method setDrawValueAboveBar (line 174) | public void setDrawValueAboveBar(boolean enabled) {
    method setDrawBarShadow (line 185) | public void setDrawBarShadow(boolean enabled) {
    method setHighlightFullBarEnabled (line 195) | public void setHighlightFullBarEnabled(boolean enabled) {
    method isHighlightFullBarEnabled (line 202) | @Override
    method getDrawOrder (line 212) | public DrawOrder[] getDrawOrder() {
    method setDrawOrder (line 224) | public void setDrawOrder(DrawOrder[] order) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/HorizontalBarChart.java
  class HorizontalBarChart (line 29) | public class HorizontalBarChart extends BarChart {
    method HorizontalBarChart (line 31) | public HorizontalBarChart(Context context) {
    method HorizontalBarChart (line 35) | public HorizontalBarChart(Context context, AttributeSet attrs) {
    method HorizontalBarChart (line 39) | public HorizontalBarChart(Context context, AttributeSet attrs, int def...
    method init (line 43) | @Override
    method calculateOffsets (line 63) | @Override
    method prepareValuePxMatrix (line 128) | @Override
    method getMarkerPosition (line 136) | @Override
    method getBarBounds (line 141) | @Override
    method getPosition (line 177) | @Override
    method getHighlightByTouchPoint (line 200) | @Override
    method getLowestVisibleX (line 211) | @Override
    method getHighestVisibleX (line 219) | @Override
    method setVisibleXRangeMaximum (line 231) | @Override
    method setVisibleXRangeMinimum (line 237) | @Override
    method setVisibleXRange (line 243) | @Override
    method setVisibleYRangeMaximum (line 250) | @Override
    method setVisibleYRangeMinimum (line 256) | @Override
    method setVisibleYRange (line 262) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java
  class LineChart (line 16) | public class LineChart extends BarLineChartBase<LineData> implements Lin...
    method LineChart (line 18) | public LineChart(Context context) {
    method LineChart (line 22) | public LineChart(Context context, AttributeSet attrs) {
    method LineChart (line 26) | public LineChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 30) | @Override
    method getLineData (line 37) | @Override
    method onDetachedFromWindow (line 42) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieChart.java
  class PieChart (line 27) | public class PieChart extends PieRadarChartBase<PieData> {
    method PieChart (line 97) | public PieChart(Context context) {
    method PieChart (line 101) | public PieChart(Context context, AttributeSet attrs) {
    method PieChart (line 105) | public PieChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 109) | @Override
    method onDraw (line 119) | @Override
    method calculateOffsets (line 142) | @Override
    method calcMinMax (line 167) | @Override
    method getMarkerPosition (line 172) | @Override
    method calcAngles (line 208) | private void calcAngles() {
    method needsHighlight (line 259) | public boolean needsHighlight(int index) {
    method calcAngle (line 280) | private float calcAngle(float value) {
    method calcAngle (line 291) | private float calcAngle(float value, float yValueSum) {
    method getXAxis (line 300) | @Deprecated
    method getIndexForAngle (line 306) | @Override
    method getDataSetIndexForIndex (line 326) | public int getDataSetIndexForIndex(int xIndex) {
    method getDrawAngles (line 345) | public float[] getDrawAngles() {
    method getAbsoluteAngles (line 355) | public float[] getAbsoluteAngles() {
    method setHoleColor (line 365) | public void setHoleColor(int color) {
    method setDrawSlicesUnderHole (line 372) | public void setDrawSlicesUnderHole(boolean enable) {
    method isDrawSlicesUnderHoleEnabled (line 382) | public boolean isDrawSlicesUnderHoleEnabled() {
    method setDrawHoleEnabled (line 391) | public void setDrawHoleEnabled(boolean enabled) {
    method isDrawHoleEnabled (line 401) | public boolean isDrawHoleEnabled() {
    method setCenterText (line 410) | public void setCenterText(CharSequence text) {
    method getCenterText (line 422) | public CharSequence getCenterText() {
    method setDrawCenterText (line 432) | public void setDrawCenterText(boolean enabled) {
    method isDrawCenterTextEnabled (line 441) | public boolean isDrawCenterTextEnabled() {
    method getRequiredLegendOffset (line 445) | @Override
    method getRequiredBaseOffset (line 450) | @Override
    method getRadius (line 455) | @Override
    method getCircleBox (line 468) | public RectF getCircleBox() {
    method getCenterCircleBox (line 477) | public MPPointF getCenterCircleBox() {
    method setCenterTextTypeface (line 486) | public void setCenterTextTypeface(Typeface t) {
    method setCenterTextSize (line 495) | public void setCenterTextSize(float sizeDp) {
    method setCenterTextSizePixels (line 505) | public void setCenterTextSizePixels(float sizePixels) {
    method setCenterTextOffset (line 515) | public void setCenterTextOffset(float x, float y) {
    method getCenterTextOffset (line 525) | public MPPointF getCenterTextOffset() {
    method setCenterTextColor (line 534) | public void setCenterTextColor(int color) {
    method setHoleRadius (line 544) | public void setHoleRadius(final float percent) {
    method getHoleRadius (line 553) | public float getHoleRadius() {
    method setTransparentCircleColor (line 562) | public void setTransparentCircleColor(int color) {
    method setTransparentCircleRadius (line 578) | public void setTransparentCircleRadius(final float percent) {
    method getTransparentCircleRadius (line 582) | public float getTransparentCircleRadius() {
    method setTransparentCircleAlpha (line 593) | public void setTransparentCircleAlpha(int alpha) {
    method setDrawSliceText (line 603) | @Deprecated
    method setDrawEntryLabels (line 613) | public void setDrawEntryLabels(boolean enabled) {
    method isDrawEntryLabelsEnabled (line 622) | public boolean isDrawEntryLabelsEnabled() {
    method setEntryLabelColor (line 631) | public void setEntryLabelColor(int color) {
    method setEntryLabelTypeface (line 640) | public void setEntryLabelTypeface(Typeface tf) {
    method setEntryLabelTextSize (line 649) | public void setEntryLabelTextSize(float size) {
    method isDrawRoundedSlicesEnabled (line 659) | public boolean isDrawRoundedSlicesEnabled() {
    method setUsePercentValues (line 670) | public void setUsePercentValues(boolean enabled) {
    method isUsePercentValuesEnabled (line 679) | public boolean isUsePercentValuesEnabled() {
    method setCenterTextRadiusPercent (line 688) | public void setCenterTextRadiusPercent(float percent) {
    method getCenterTextRadiusPercent (line 697) | public float getCenterTextRadiusPercent() {
    method getMaxAngle (line 701) | public float getMaxAngle() {
    method setMaxAngle (line 711) | public void setMaxAngle(float maxangle) {
    method onDetachedFromWindow (line 722) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieRadarChartBase.java
  class PieRadarChartBase (line 29) | public abstract class PieRadarChartBase<T extends ChartData<? extends ID...
    method PieRadarChartBase (line 52) | public PieRadarChartBase(Context context) {
    method PieRadarChartBase (line 56) | public PieRadarChartBase(Context context, AttributeSet attrs) {
    method PieRadarChartBase (line 60) | public PieRadarChartBase(Context context, AttributeSet attrs, int defS...
    method init (line 64) | @Override
    method calcMinMax (line 71) | @Override
    method getMaxVisibleCount (line 76) | @Override
    method onTouchEvent (line 81) | @Override
    method computeScroll (line 90) | @Override
    method notifyDataSetChanged (line 97) | @Override
    method calculateOffsets (line 110) | @Override
    method getAngleForPoint (line 260) | public float getAngleForPoint(float x, float y) {
    method getPosition (line 295) | public MPPointF getPosition(MPPointF center, float dist, float angle) {
    method getPosition (line 302) | public void getPosition(MPPointF center, float dist, float angle, MPPo...
    method distanceToCenter (line 315) | public float distanceToCenter(float x, float y) {
    method getIndexForAngle (line 351) | public abstract int getIndexForAngle(float angle);
    method setRotationAngle (line 359) | public void setRotationAngle(float angle) {
    method getRawRotationAngle (line 372) | public float getRawRotationAngle() {
    method getRotationAngle (line 382) | public float getRotationAngle() {
    method setRotationEnabled (line 392) | public void setRotationEnabled(boolean enabled) {
    method isRotationEnabled (line 401) | public boolean isRotationEnabled() {
    method getMinOffset (line 408) | public float getMinOffset() {
    method setMinOffset (line 415) | public void setMinOffset(float minOffset) {
    method getDiameter (line 424) | public float getDiameter() {
    method getRadius (line 438) | public abstract float getRadius();
    method getRequiredLegendOffset (line 445) | protected abstract float getRequiredLegendOffset();
    method getRequiredBaseOffset (line 453) | protected abstract float getRequiredBaseOffset();
    method getYChartMax (line 455) | @Override
    method getYChartMin (line 461) | @Override
    method spin (line 479) | @SuppressLint("NewApi")

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/RadarChart.java
  class RadarChart (line 25) | public class RadarChart extends PieRadarChartBase<RadarData> {
    method RadarChart (line 70) | public RadarChart(Context context) {
    method RadarChart (line 74) | public RadarChart(Context context, AttributeSet attrs) {
    method RadarChart (line 78) | public RadarChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 82) | @Override
    method calcMinMax (line 98) | @Override
    method notifyDataSetChanged (line 106) | @Override
    method onDraw (line 122) | @Override
    method getFactor (line 167) | public float getFactor() {
    method getSliceAngle (line 177) | public float getSliceAngle() {
    method getIndexForAngle (line 181) | @Override
    method getYAxis (line 211) | public YAxis getYAxis() {
    method setWebLineWidth (line 220) | public void setWebLineWidth(float width) {
    method getWebLineWidth (line 224) | public float getWebLineWidth() {
    method setWebLineWidthInner (line 234) | public void setWebLineWidthInner(float width) {
    method getWebLineWidthInner (line 238) | public float getWebLineWidthInner() {
    method setWebAlpha (line 248) | public void setWebAlpha(int alpha) {
    method getWebAlpha (line 257) | public int getWebAlpha() {
    method setWebColor (line 268) | public void setWebColor(int color) {
    method getWebColor (line 272) | public int getWebColor() {
    method setWebColorInner (line 283) | public void setWebColorInner(int color) {
    method getWebColorInner (line 287) | public int getWebColorInner() {
    method setDrawWeb (line 297) | public void setDrawWeb(boolean enabled) {
    method setSkipWebLineCount (line 307) | public void setSkipWebLineCount(int count) {
    method getSkipWebLineCount (line 317) | public int getSkipWebLineCount() {
    method getRequiredLegendOffset (line 321) | @Override
    method getRequiredBaseOffset (line 326) | @Override
    method getRadius (line 333) | @Override
    method getYChartMax (line 342) | public float getYChartMax() {
    method getYChartMin (line 349) | public float getYChartMin() {
    method getYRange (line 358) | public float getYRange() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/charts/ScatterChart.java
  class ScatterChart (line 18) | public class ScatterChart extends BarLineChartBase<ScatterData> implemen...
    method ScatterChart (line 20) | public ScatterChart(Context context) {
    method ScatterChart (line 24) | public ScatterChart(Context context, AttributeSet attrs) {
    method ScatterChart (line 28) | public ScatterChart(Context context, AttributeSet attrs, int defStyle) {
    method init (line 33) | @Override
    method getScatterData (line 40) | @Override
    type ScatterShape (line 49) | public enum ScatterShape {
      method ScatterShape (line 61) | ScatterShape(final String shapeIdentifier) {
      method toString (line 65) | @Override
      method getAllDefaultShapes (line 70) | public static ScatterShape[] getAllDefaultShapes() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/AxisBase.java
  class AxisBase (line 20) | public abstract class AxisBase extends ComponentBase {
    method AxisBase (line 153) | public AxisBase() {
    method setDrawGridLines (line 165) | public void setDrawGridLines(boolean enabled) {
    method isDrawGridLinesEnabled (line 174) | public boolean isDrawGridLinesEnabled() {
    method setDrawAxisLine (line 183) | public void setDrawAxisLine(boolean enabled) {
    method isDrawAxisLineEnabled (line 192) | public boolean isDrawAxisLineEnabled() {
    method setCenterAxisLabels (line 202) | public void setCenterAxisLabels(boolean enabled) {
    method isCenterAxisLabelsEnabled (line 206) | public boolean isCenterAxisLabelsEnabled() {
    method setGridColor (line 216) | public void setGridColor(int color) {
    method getGridColor (line 226) | public int getGridColor() {
    method setAxisLineWidth (line 235) | public void setAxisLineWidth(float width) {
    method getAxisLineWidth (line 244) | public float getAxisLineWidth() {
    method setGridLineWidth (line 254) | public void setGridLineWidth(float width) {
    method getGridLineWidth (line 264) | public float getGridLineWidth() {
    method setAxisLineColor (line 273) | public void setAxisLineColor(int color) {
    method getAxisLineColor (line 282) | public int getAxisLineColor() {
    method setDrawLabels (line 292) | public void setDrawLabels(boolean enabled) {
    method isDrawLabelsEnabled (line 301) | public boolean isDrawLabelsEnabled() {
    method setLabelCount (line 311) | public void setLabelCount(int count) {
    method setLabelCount (line 333) | public void setLabelCount(int count, boolean force) {
    method isForceLabelsEnabled (line 344) | public boolean isForceLabelsEnabled() {
    method getLabelCount (line 353) | public int getLabelCount() {
    method isGranularityEnabled (line 360) | public boolean isGranularityEnabled() {
    method setGranularityEnabled (line 370) | public void setGranularityEnabled(boolean enabled) {
    method getGranularity (line 377) | public float getGranularity() {
    method setGranularity (line 387) | public void setGranularity(float granularity) {
    method addLimitLine (line 398) | public void addLimitLine(LimitLine l) {
    method removeLimitLine (line 413) | public void removeLimitLine(LimitLine l) {
    method removeAllLimitLines (line 420) | public void removeAllLimitLines() {
    method getLimitLines (line 429) | public List<LimitLine> getLimitLines() {
    method setDrawLimitLinesBehindData (line 439) | public void setDrawLimitLinesBehindData(boolean enabled) {
    method isDrawLimitLinesBehindDataEnabled (line 443) | public boolean isDrawLimitLinesBehindDataEnabled() {
    method getLongestLabel (line 453) | public String getLongestLabel() {
    method getFormattedLabel (line 467) | public String getFormattedLabel(int index) {
    method setValueFormatter (line 484) | public void setValueFormatter(IAxisValueFormatter f) {
    method getValueFormatter (line 497) | public IAxisValueFormatter getValueFormatter() {
    method enableGridDashedLine (line 516) | public void enableGridDashedLine(float lineLength, float spaceLength, ...
    method setGridDashedLine (line 529) | public void setGridDashedLine(DashPathEffect effect) {
    method disableGridDashedLine (line 536) | public void disableGridDashedLine() {
    method isGridDashedLineEnabled (line 545) | public boolean isGridDashedLineEnabled() {
    method getGridDashPathEffect (line 554) | public DashPathEffect getGridDashPathEffect() {
    method enableAxisLineDashedLine (line 568) | public void enableAxisLineDashedLine(float lineLength, float spaceLeng...
    method setAxisLineDashedLine (line 581) | public void setAxisLineDashedLine(DashPathEffect effect) {
    method disableAxisLineDashedLine (line 588) | public void disableAxisLineDashedLine() {
    method isAxisLineDashedLineEnabled (line 597) | public boolean isAxisLineDashedLineEnabled() {
    method getAxisLineDashPathEffect (line 606) | public DashPathEffect getAxisLineDashPathEffect() {
    method getAxisMaximum (line 614) | public float getAxisMaximum() {
    method getAxisMinimum (line 618) | public float getAxisMinimum() {
    method resetAxisMaximum (line 627) | public void resetAxisMaximum() {
    method isAxisMaxCustom (line 636) | public boolean isAxisMaxCustom() {
    method resetAxisMinimum (line 645) | public void resetAxisMinimum() {
    method isAxisMinCustom (line 654) | public boolean isAxisMinCustom() {
    method setAxisMinimum (line 667) | public void setAxisMinimum(float min) {
    method setAxisMinValue (line 678) | @Deprecated
    method setAxisMaximum (line 690) | public void setAxisMaximum(float max) {
    method setAxisMaxValue (line 701) | @Deprecated
    method calculate (line 713) | public void calculate(float dataMin, float dataMax) {
    method getSpaceMin (line 738) | public float getSpaceMin()
    method setSpaceMin (line 746) | public void setSpaceMin(float mSpaceMin)
    method getSpaceMax (line 754) | public float getSpaceMax()
    method setSpaceMax (line 762) | public void setSpaceMax(float mSpaceMax)

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/ComponentBase.java
  class ComponentBase (line 14) | public abstract class ComponentBase {
    method ComponentBase (line 47) | public ComponentBase() {
    method getXOffset (line 57) | public float getXOffset() {
    method setXOffset (line 66) | public void setXOffset(float xOffset) {
    method getYOffset (line 76) | public float getYOffset() {
    method setYOffset (line 87) | public void setYOffset(float yOffset) {
    method getTypeface (line 96) | public Typeface getTypeface() {
    method setTypeface (line 105) | public void setTypeface(Typeface tf) {
    method setTextSize (line 115) | public void setTextSize(float size) {
    method getTextSize (line 130) | public float getTextSize() {
    method setTextColor (line 141) | public void setTextColor(int color) {
    method getTextColor (line 150) | public int getTextColor() {
    method setEnabled (line 161) | public void setEnabled(boolean enabled) {
    method isEnabled (line 170) | public boolean isEnabled() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/Description.java
  class Description (line 11) | public class Description extends ComponentBase {
    method Description (line 28) | public Description() {
    method setText (line 41) | public void setText(String text) {
    method getText (line 50) | public String getText() {
    method setPosition (line 60) | public void setPosition(float x, float y) {
    method getPosition (line 74) | public MPPointF getPosition() {
    method setTextAlign (line 83) | public void setTextAlign(Paint.Align align) {
    method getTextAlign (line 92) | public Paint.Align getTextAlign() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/IMarker.java
  type IMarker (line 9) | public interface IMarker {
    method getOffset (line 16) | MPPointF getOffset();
    method getOffsetForDrawingAtPoint (line 27) | MPPointF getOffsetForDrawingAtPoint(float posX, float posY);
    method refreshContent (line 37) | void refreshContent(Entry e, Highlight highlight);
    method draw (line 46) | void draw(Canvas canvas, float posX, float posY);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/Legend.java
  class Legend (line 23) | public class Legend extends ComponentBase {
    type LegendPosition (line 29) | @Deprecated
    type LegendForm (line 38) | public enum LegendForm {
    type LegendHorizontalAlignment (line 70) | public enum LegendHorizontalAlignment {
    type LegendVerticalAlignment (line 74) | public enum LegendVerticalAlignment {
    type LegendOrientation (line 78) | public enum LegendOrientation {
    type LegendDirection (line 82) | public enum LegendDirection {
    method Legend (line 163) | public Legend() {
    method Legend (line 175) | public Legend(LegendEntry[] entries) {
    method Legend (line 185) | @Deprecated
    method Legend (line 217) | @Deprecated
    method setEntries (line 227) | public void setEntries(List<LegendEntry> entries) {
    method getEntries (line 231) | public LegendEntry[] getEntries() {
    method getMaximumEntryWidth (line 242) | public float getMaximumEntryWidth(Paint p) {
    method getMaximumEntryHeight (line 273) | public float getMaximumEntryHeight(Paint p) {
    method getColors (line 290) | @Deprecated
    method getLabels (line 302) | @Deprecated
    method getExtraColors (line 312) | @Deprecated
    method getExtraLabels (line 324) | @Deprecated
    method getExtraEntries (line 334) | public LegendEntry[] getExtraEntries() {
    method setExtra (line 339) | public void setExtra(List<LegendEntry> entries) {
    method setExtra (line 343) | public void setExtra(LegendEntry[] entries) {
    method setExtra (line 349) | @Deprecated
    method setExtra (line 360) | public void setExtra(int[] colors, String[] labels) {
    method setCustom (line 389) | public void setCustom(LegendEntry[] entries) {
    method setCustom (line 403) | public void setCustom(List<LegendEntry> entries) {
    method resetCustom (line 414) | public void resetCustom() {
    method isLegendCustom (line 422) | public boolean isLegendCustom() {
    method getPosition (line 430) | @Deprecated
    method setPosition (line 470) | @Deprecated
    method getHorizontalAlignment (line 534) | public LegendHorizontalAlignment getHorizontalAlignment() {
    method setHorizontalAlignment (line 543) | public void setHorizontalAlignment(LegendHorizontalAlignment value) {
    method getVerticalAlignment (line 552) | public LegendVerticalAlignment getVerticalAlignment() {
    method setVerticalAlignment (line 561) | public void setVerticalAlignment(LegendVerticalAlignment value) {
    method getOrientation (line 570) | public LegendOrientation getOrientation() {
    method setOrientation (line 579) | public void setOrientation(LegendOrientation value) {
    method isDrawInsideEnabled (line 588) | public boolean isDrawInsideEnabled() {
    method setDrawInside (line 597) | public void setDrawInside(boolean value) {
    method getDirection (line 606) | public LegendDirection getDirection() {
    method setDirection (line 615) | public void setDirection(LegendDirection pos) {
    method getForm (line 624) | public LegendForm getForm() {
    method setForm (line 633) | public void setForm(LegendForm shape) {
    method setFormSize (line 642) | public void setFormSize(float size) {
    method getFormSize (line 651) | public float getFormSize() {
    method setFormLineWidth (line 660) | public void setFormLineWidth(float size) {
    method getFormLineWidth (line 669) | public float getFormLineWidth() {
    method setFormLineDashEffect (line 678) | public void setFormLineDashEffect(DashPathEffect dashPathEffect) {
    method getFormLineDashEffect (line 685) | public DashPathEffect getFormLineDashEffect() {
    method getXEntrySpace (line 695) | public float getXEntrySpace() {
    method setXEntrySpace (line 705) | public void setXEntrySpace(float space) {
    method getYEntrySpace (line 714) | public float getYEntrySpace() {
    method setYEntrySpace (line 724) | public void setYEntrySpace(float space) {
    method getFormToTextSpace (line 733) | public float getFormToTextSpace() {
    method setFormToTextSpace (line 743) | public void setFormToTextSpace(float space) {
    method getStackSpace (line 752) | public float getStackSpace() {
    method setStackSpace (line 761) | public void setStackSpace(float space) {
    method setWordWrapEnabled (line 793) | public void setWordWrapEnabled(boolean enabled) {
    method isWordWrapEnabled (line 803) | public boolean isWordWrapEnabled() {
    method getMaxSizePercent (line 817) | public float getMaxSizePercent() {
    method setMaxSizePercent (line 829) | public void setMaxSizePercent(float maxSize) {
    method getCalculatedLabelSizes (line 837) | public List<FSize> getCalculatedLabelSizes() {
    method getCalculatedLabelBreakPoints (line 841) | public List<Boolean> getCalculatedLabelBreakPoints() {
    method getCalculatedLineSizes (line 845) | public List<FSize> getCalculatedLineSizes() {
    method calculateDimensions (line 856) | public void calculateDimensions(Paint labelpaint, ViewPortHandler view...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/LegendEntry.java
  class LegendEntry (line 8) | public class LegendEntry {
    method LegendEntry (line 9) | public LegendEntry() {
    method LegendEntry (line 22) | public LegendEntry(String label,

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/LimitLine.java
  class LimitLine (line 19) | public class LimitLine extends ComponentBase {
    type LimitLabelPosition (line 61) | public enum LimitLabelPosition {
    method LimitLine (line 71) | public LimitLine(float limit) {
    method LimitLine (line 82) | public LimitLine(float limit, String label) {
    method getLimit (line 92) | public float getLimit() {
    method setLineWidth (line 102) | public void setLineWidth(float width) {
    method getLineWidth (line 116) | public float getLineWidth() {
    method setLineColor (line 126) | public void setLineColor(int color) {
    method getLineColor (line 135) | public int getLineColor() {
    method enableDashedLine (line 146) | public void enableDashedLine(float lineLength, float spaceLength, floa...
    method disableDashedLine (line 155) | public void disableDashedLine() {
    method isDashedLineEnabled (line 165) | public boolean isDashedLineEnabled() {
    method getDashPathEffect (line 174) | public DashPathEffect getDashPathEffect() {
    method setTextStyle (line 184) | public void setTextStyle(Paint.Style style) {
    method getTextStyle (line 193) | public Paint.Style getTextStyle() {
    method setLabelPosition (line 203) | public void setLabelPosition(LimitLabelPosition pos) {
    method getLabelPosition (line 212) | public LimitLabelPosition getLabelPosition() {
    method setLabel (line 222) | public void setLabel(String label) {
    method getLabel (line 231) | public String getLabel() {
    method getRectBac (line 241) | public Rect getRectBac(int[] labelLineWandH, float xOffset, float yOff...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/MarkerImage.java
  class MarkerImage (line 27) | public class MarkerImage implements IMarker {
    method MarkerImage (line 45) | public MarkerImage(Context context, int drawableResourceId) {
    method setOffset (line 58) | public void setOffset(MPPointF offset) {
    method setOffset (line 66) | public void setOffset(float offsetX, float offsetY) {
    method getOffset (line 71) | @Override
    method setSize (line 76) | public void setSize(FSize size) {
    method getSize (line 84) | public FSize getSize() {
    method setChartView (line 88) | public void setChartView(Chart chart) {
    method getChartView (line 92) | public Chart getChartView() {
    method getOffsetForDrawingAtPoint (line 96) | @Override
    method refreshContent (line 130) | @Override
    method draw (line 135) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/MarkerView.java
  class MarkerView (line 22) | public class MarkerView extends RelativeLayout implements IMarker {
    method MarkerView (line 34) | public MarkerView(Context context, int layoutResource) {
    method setupLayoutResource (line 44) | private void setupLayoutResource(int layoutResource) {
    method setOffset (line 55) | public void setOffset(MPPointF offset) {
    method setOffset (line 63) | public void setOffset(float offsetX, float offsetY) {
    method getOffset (line 68) | @Override
    method setChartView (line 73) | public void setChartView(Chart chart) {
    method getChartView (line 77) | public Chart getChartView() {
    method getOffsetForDrawingAtPoint (line 81) | @Override
    method refreshContent (line 108) | @Override
    method draw (line 117) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/XAxis.java
  class XAxis (line 13) | public class XAxis extends AxisBase {
    type XAxisPosition (line 58) | public enum XAxisPosition {
    method XAxis (line 62) | public XAxis() {
    method getPosition (line 71) | public XAxisPosition getPosition() {
    method setPosition (line 80) | public void setPosition(XAxisPosition pos) {
    method getLabelRotationAngle (line 87) | public float getLabelRotationAngle() {
    method setLabelRotationAngle (line 96) | public void setLabelRotationAngle(float angle) {
    method setAvoidFirstLastClipping (line 106) | public void setAvoidFirstLastClipping(boolean enabled) {
    method isAvoidFirstLastClippingEnabled (line 115) | public boolean isAvoidFirstLastClippingEnabled() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/components/YAxis.java
  class YAxis (line 19) | public class YAxis extends AxisBase {
    type YAxisLabelPosition (line 69) | public enum YAxisLabelPosition {
    type AxisDependency (line 97) | public enum AxisDependency {
    method YAxis (line 101) | public YAxis() {
    method YAxis (line 109) | public YAxis(AxisDependency position) {
    method getAxisDependency (line 115) | public AxisDependency getAxisDependency() {
    method getMinWidth (line 122) | public float getMinWidth() {
    method setMinWidth (line 131) | public void setMinWidth(float minWidth) {
    method getMaxWidth (line 138) | public float getMaxWidth() {
    method setMaxWidth (line 147) | public void setMaxWidth(float maxWidth) {
    method getLabelPosition (line 154) | public YAxisLabelPosition getLabelPosition() {
    method setPosition (line 163) | public void setPosition(YAxisLabelPosition pos) {
    method isDrawTopYLabelEntryEnabled (line 172) | public boolean isDrawTopYLabelEntryEnabled() {
    method isDrawBottomYLabelEntryEnabled (line 181) | public boolean isDrawBottomYLabelEntryEnabled() {
    method setDrawTopYLabelEntry (line 192) | public void setDrawTopYLabelEntry(boolean enabled) {
    method setInverted (line 203) | public void setInverted(boolean enabled) {
    method isInverted (line 212) | public boolean isInverted() {
    method setStartAtZero (line 222) | @Deprecated
    method setSpaceTop (line 235) | public void setSpaceTop(float percent) {
    method getSpaceTop (line 244) | public float getSpaceTop() {
    method setSpaceBottom (line 253) | public void setSpaceBottom(float percent) {
    method getSpaceBottom (line 262) | public float getSpaceBottom() {
    method isDrawZeroLineEnabled (line 266) | public boolean isDrawZeroLineEnabled() {
    method setDrawZeroLine (line 276) | public void setDrawZeroLine(boolean mDrawZeroLine) {
    method getZeroLineColor (line 280) | public int getZeroLineColor() {
    method setZeroLineColor (line 289) | public void setZeroLineColor(int color) {
    method getZeroLineWidth (line 293) | public float getZeroLineWidth() {
    method setZeroLineWidth (line 302) | public void setZeroLineWidth(float width) {
    method getRequiredWidthSpace (line 312) | public float getRequiredWidthSpace(Paint p) {
    method getRequiredHeightSpace (line 339) | public float getRequiredHeightSpace(Paint p) {
    method needsOffset (line 352) | public boolean needsOffset() {
    method calculate (line 360) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BarData.java
  class BarData (line 13) | public class BarData extends BarLineScatterCandleBubbleData<IBarDataSet> {
    method BarData (line 20) | public BarData() {
    method BarData (line 24) | public BarData(IBarDataSet... dataSets) {
    method BarData (line 28) | public BarData(List<IBarDataSet> dataSets) {
    method setBarWidth (line 38) | public void setBarWidth(float mBarWidth) {
    method getBarWidth (line 42) | public float getBarWidth() {
    method groupBars (line 56) | public void groupBars(float fromX, float groupSpace, float barSpace) {
    method getGroupWidth (line 116) | public float getGroupWidth(float groupSpace, float barSpace) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BarDataSet.java
  class BarDataSet (line 12) | public class BarDataSet extends BarLineScatterCandleBubbleDataSet<BarEnt...
    method BarDataSet (line 48) | public BarDataSet(List<BarEntry> yVals, String label) {
    method copy (line 57) | @Override
    method calcEntryCountIncludingStacks (line 83) | private void calcEntryCountIncludingStacks(List<BarEntry> yVals) {
    method calcStackSize (line 102) | private void calcStackSize(List<BarEntry> yVals) {
    method calcMinMax (line 113) | @Override
    method getStackSize (line 138) | @Override
    method isStacked (line 143) | @Override
    method getEntryCountStacks (line 154) | public int getEntryCountStacks() {
    method setBarShadowColor (line 165) | public void setBarShadowColor(int color) {
    method getBarShadowColor (line 169) | @Override
    method setBarBorderWidth (line 180) | public void setBarBorderWidth(float width) {
    method getBarBorderWidth (line 190) | @Override
    method setBarBorderColor (line 200) | public void setBarBorderColor(int color) {
    method getBarBorderColor (line 209) | @Override
    method setHighLightAlpha (line 220) | public void setHighLightAlpha(int alpha) {
    method getHighLightAlpha (line 224) | @Override
    method setStackLabels (line 234) | public void setStackLabels(String[] labels) {
    method getStackLabels (line 238) | @Override
    method getHighLightWidth (line 243) | @Override
    method setHighlightLineWidth (line 252) | public void setHighlightLineWidth(float width) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BarEntry.java
  class BarEntry (line 13) | @SuppressLint("ParcelCreator")
    method BarEntry (line 42) | public BarEntry(float x, float y) {
    method BarEntry (line 53) | public BarEntry(float x, float y, Object data) {
    method BarEntry (line 64) | public BarEntry(float x, float y, Drawable icon) {
    method BarEntry (line 76) | public BarEntry(float x, float y, Drawable icon, Object data) {
    method BarEntry (line 86) | public BarEntry(float x, float[] vals) {
    method BarEntry (line 101) | public BarEntry(float x, float[] vals, Object data) {
    method BarEntry (line 116) | public BarEntry(float x, float[] vals, Drawable icon) {
    method BarEntry (line 132) | public BarEntry(float x, float[] vals, Drawable icon, Object data) {
    method copy (line 143) | public BarEntry copy() {
    method getYVals (line 156) | public float[] getYVals() {
    method setVals (line 165) | public void setVals(float[] vals) {
    method getY (line 177) | @Override
    method getRanges (line 187) | public Range[] getRanges() {
    method isStacked (line 196) | public boolean isStacked() {
    method getBelowSum (line 203) | @Deprecated
    method getSumBelow (line 208) | public float getSumBelow(int stackIndex) {
    method getPositiveSum (line 229) | public float getPositiveSum() {
    method getNegativeSum (line 238) | public float getNegativeSum() {
    method calcPosNegSum (line 242) | private void calcPosNegSum() {
    method calcSum (line 270) | private static float calcSum(float[] vals) {
    method calcRanges (line 283) | protected void calcRanges() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BarLineScatterCandleBubbleData.java
  class BarLineScatterCandleBubbleData (line 13) | public abstract class BarLineScatterCandleBubbleData<T extends IBarLineS...
    method BarLineScatterCandleBubbleData (line 16) | public BarLineScatterCandleBubbleData() {
    method BarLineScatterCandleBubbleData (line 20) | public BarLineScatterCandleBubbleData(T... sets) {
    method BarLineScatterCandleBubbleData (line 24) | public BarLineScatterCandleBubbleData(List<T> sets) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BarLineScatterCandleBubbleDataSet.java
  class BarLineScatterCandleBubbleDataSet (line 15) | public abstract class BarLineScatterCandleBubbleDataSet<T extends Entry>...
    method BarLineScatterCandleBubbleDataSet (line 21) | public BarLineScatterCandleBubbleDataSet(List<T> yVals, String label) {
    method setHighLightColor (line 32) | public void setHighLightColor(int color) {
    method getHighLightColor (line 36) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BaseDataSet.java
  class BaseDataSet (line 27) | public abstract class BaseDataSet<T extends Entry> implements IDataSet<T> {
    method BaseDataSet (line 97) | public BaseDataSet() {
    method BaseDataSet (line 111) | public BaseDataSet(String label) {
    method notifyDataSetChanged (line 119) | public void notifyDataSetChanged() {
    method getColors (line 128) | @Override
    method getValueColors (line 133) | public List<Integer> getValueColors() {
    method getColor (line 137) | @Override
    method getColor (line 142) | @Override
    method setColors (line 160) | public void setColors(List<Integer> colors) {
    method setColors (line 173) | public void setColors(int... colors) {
    method setColors (line 187) | public void setColors(int[] colors, Context c) {
    method addColor (line 205) | public void addColor(int color) {
    method setColor (line 217) | public void setColor(int color) {
    method setColor (line 228) | public void setColor(int color, int alpha) {
    method setColors (line 238) | public void setColors(int[] colors, int alpha) {
    method resetColors (line 248) | public void resetColors() {
    method setLabel (line 259) | @Override
    method getLabel (line 264) | @Override
    method setHighlightEnabled (line 269) | @Override
    method isHighlightEnabled (line 274) | @Override
    method setValueFormatter (line 279) | @Override
    method getValueFormatter (line 288) | @Override
    method needsFormatter (line 295) | @Override
    method setValueTextColor (line 300) | @Override
    method setValueTextColors (line 306) | @Override
    method setValueTypeface (line 311) | @Override
    method setValueTextSize (line 316) | @Override
    method getValueTextColor (line 321) | @Override
    method getValueTextColor (line 326) | @Override
    method getValueTypeface (line 331) | @Override
    method getValueTextSize (line 336) | @Override
    method setForm (line 341) | public void setForm(Legend.LegendForm form) {
    method getForm (line 345) | @Override
    method setFormSize (line 350) | public void setFormSize(float formSize) {
    method getFormSize (line 354) | @Override
    method setFormLineWidth (line 359) | public void setFormLineWidth(float formLineWidth) {
    method getFormLineWidth (line 363) | @Override
    method setFormLineDashEffect (line 368) | public void setFormLineDashEffect(DashPathEffect dashPathEffect) {
    method getFormLineDashEffect (line 372) | @Override
    method setDrawValues (line 377) | @Override
    method isDrawValuesEnabled (line 382) | @Override
    method setDrawIcons (line 387) | @Override
    method isDrawIconsEnabled (line 392) | @Override
    method setIconsOffset (line 397) | @Override
    method getIconsOffset (line 404) | @Override
    method setVisible (line 409) | @Override
    method isVisible (line 414) | @Override
    method getAxisDependency (line 419) | @Override
    method setAxisDependency (line 424) | @Override
    method getIndexInEntries (line 434) | @Override
    method removeFirst (line 445) | @Override
    method removeLast (line 456) | @Override
    method removeEntryByXValue (line 467) | @Override
    method removeEntry (line 474) | @Override
    method contains (line 481) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BaseEntry.java
  class BaseEntry (line 8) | public abstract class BaseEntry {
    method BaseEntry (line 19) | public BaseEntry() {
    method BaseEntry (line 23) | public BaseEntry(float y) {
    method BaseEntry (line 27) | public BaseEntry(float y, Object data) {
    method BaseEntry (line 32) | public BaseEntry(float y, Drawable icon) {
    method BaseEntry (line 37) | public BaseEntry(float y, Drawable icon, Object data) {
    method getY (line 48) | public float getY() {
    method setIcon (line 57) | public void setIcon(Drawable icon) {
    method getIcon (line 66) | public Drawable getIcon() {
    method setY (line 75) | public void setY(float y) {
    method getData (line 85) | public Object getData() {
    method setData (line 94) | public void setData(Object data) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleData.java
  class BubbleData (line 8) | public class BubbleData extends BarLineScatterCandleBubbleData<IBubbleDa...
    method BubbleData (line 10) | public BubbleData() {
    method BubbleData (line 14) | public BubbleData(IBubbleDataSet... dataSets) {
    method BubbleData (line 18) | public BubbleData(List<IBubbleDataSet> dataSets) {
    method setHighlightCircleWidth (line 29) | public void setHighlightCircleWidth(float width) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleDataSet.java
  class BubbleDataSet (line 10) | public class BubbleDataSet extends BarLineScatterCandleBubbleDataSet<Bub...
    method BubbleDataSet (line 17) | public BubbleDataSet(List<BubbleEntry> yVals, String label) {
    method setHighlightCircleWidth (line 21) | @Override
    method getHighlightCircleWidth (line 26) | @Override
    method calcMinMax (line 31) | @Override
    method copy (line 42) | @Override
    method getMaxSize (line 58) | @Override
    method isNormalizeSizeEnabled (line 63) | @Override
    method setNormalizeSizeEnabled (line 68) | public void setNormalizeSizeEnabled(boolean normalizeSize) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleEntry.java
  class BubbleEntry (line 14) | @SuppressLint("ParcelCreator")
    method BubbleEntry (line 27) | public BubbleEntry(float x, float y, float size) {
    method BubbleEntry (line 40) | public BubbleEntry(float x, float y, float size, Object data) {
    method BubbleEntry (line 53) | public BubbleEntry(float x, float y, float size, Drawable icon) {
    method BubbleEntry (line 67) | public BubbleEntry(float x, float y, float size, Drawable icon, Object...
    method copy (line 72) | public BubbleEntry copy() {
    method getSize (line 83) | public float getSize() {
    method setSize (line 87) | public void setSize(float size) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleData.java
  class CandleData (line 8) | public class CandleData extends BarLineScatterCandleBubbleData<ICandleDa...
    method CandleData (line 10) | public CandleData() {
    method CandleData (line 14) | public CandleData(List<ICandleDataSet> dataSets) {
    method CandleData (line 18) | public CandleData(ICandleDataSet... dataSets) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleDataSet.java
  class CandleDataSet (line 18) | public class CandleDataSet extends LineScatterCandleRadarDataSet<CandleE...
    method CandleDataSet (line 76) | public CandleDataSet(List<CandleEntry> yVals, String label) {
    method copy (line 80) | @Override
    method calcMinMax (line 103) | @Override
    method calcMinMaxY (line 115) | @Override
    method setBarSpace (line 137) | public void setBarSpace(float space) {
    method getBarSpace (line 147) | @Override
    method setShadowWidth (line 157) | public void setShadowWidth(float width) {
    method getShadowWidth (line 161) | @Override
    method setShowCandleBar (line 171) | public void setShowCandleBar(boolean showCandleBar) {
    method getShowCandleBar (line 175) | @Override
    method setNeutralColor (line 198) | public void setNeutralColor(int color) {
    method getNeutralColor (line 202) | @Override
    method setIncreasingColor (line 213) | public void setIncreasingColor(int color) {
    method getIncreasingColor (line 217) | @Override
    method setDecreasingColor (line 228) | public void setDecreasingColor(int color) {
    method getDecreasingColor (line 232) | @Override
    method getIncreasingPaintStyle (line 237) | @Override
    method setIncreasingPaintStyle (line 247) | public void setIncreasingPaintStyle(Paint.Style paintStyle) {
    method getDecreasingPaintStyle (line 251) | @Override
    method setDecreasingPaintStyle (line 261) | public void setDecreasingPaintStyle(Paint.Style decreasingPaintStyle) {
    method getShadowColor (line 265) | @Override
    method setShadowColor (line 275) | public void setShadowColor(int shadowColor) {
    method getShadowColorSameAsCandle (line 279) | @Override
    method setShadowColorSameAsCandle (line 289) | public void setShadowColorSameAsCandle(boolean shadowColorSameAsCandle) {
    method getHighlightLineAlpha (line 293) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleEntry.java
  class CandleEntry (line 12) | @SuppressLint("ParcelCreator")
    method CandleEntry (line 36) | public CandleEntry(float x, float shadowH, float shadowL, float open, ...
    method CandleEntry (line 55) | public CandleEntry(float x, float shadowH, float shadowL, float open, ...
    method CandleEntry (line 75) | public CandleEntry(float x, float shadowH, float shadowL, float open, ...
    method CandleEntry (line 96) | public CandleEntry(float x, float shadowH, float shadowL, float open, ...
    method getShadowRange (line 112) | public float getShadowRange() {
    method getBodyRange (line 121) | public float getBodyRange() {
    method getY (line 129) | @Override
    method copy (line 134) | public CandleEntry copy() {
    method getHigh (line 147) | public float getHigh() {
    method setHigh (line 151) | public void setHigh(float mShadowHigh) {
    method getLow (line 160) | public float getLow() {
    method setLow (line 164) | public void setLow(float mShadowLow) {
    method getClose (line 173) | public float getClose() {
    method setClose (line 177) | public void setClose(float mClose) {
    method getOpen (line 186) | public float getOpen() {
    method setOpen (line 190) | public void setOpen(float mOpen) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/ChartData.java
  class ChartData (line 21) | public abstract class ChartData<T extends IDataSet<? extends Entry>> {
    method ChartData (line 60) | public ChartData() {
    method ChartData (line 69) | public ChartData(T... dataSets) {
    method arrayToList (line 80) | private List<T> arrayToList(T[] array) {
    method ChartData (line 96) | public ChartData(List<T> sets) {
    method notifyDataChanged (line 106) | public void notifyDataChanged() {
    method calcMinMaxY (line 117) | public void calcMinMaxY(float fromX, float toX) {
    method calcMinMax (line 130) | protected void calcMinMax() {
    method getDataSetCount (line 195) | public int getDataSetCount() {
    method getYMin (line 206) | public float getYMin() {
    method getYMin (line 216) | public float getYMin(AxisDependency axis) {
    method getYMax (line 236) | public float getYMax() {
    method getYMax (line 246) | public float getYMax(AxisDependency axis) {
    method getXMin (line 266) | public float getXMin() {
    method getXMax (line 275) | public float getXMax() {
    method getDataSets (line 284) | public List<T> getDataSets() {
    method getDataSetIndexByLabel (line 299) | protected int getDataSetIndexByLabel(List<T> dataSets, String label,
    method getDataSetLabels (line 320) | public String[] getDataSetLabels() {
    method getEntryForHighlight (line 337) | public Entry getEntryForHighlight(Highlight highlight) {
    method getDataSetByLabel (line 354) | public T getDataSetByLabel(String label, boolean ignorecase) {
    method getDataSetByIndex (line 364) | public T getDataSetByIndex(int index) {
    method addDataSet (line 377) | public void addDataSet(T d) {
    method removeDataSet (line 394) | public boolean removeDataSet(T d) {
    method removeDataSet (line 416) | public boolean removeDataSet(int index) {
    method addEntry (line 432) | public void addEntry(Entry e, int dataSetIndex) {
    method calcMinMax (line 454) | protected void calcMinMax(Entry e, AxisDependency axis) {
    method calcMinMax (line 485) | protected void calcMinMax(T d) {
    method removeEntry (line 517) | public boolean removeEntry(Entry e, int dataSetIndex) {
    method removeEntry (line 547) | public boolean removeEntry(float xValue, int dataSetIndex) {
    method getDataSetForEntry (line 568) | public T getDataSetForEntry(Entry e) {
    method getColors (line 592) | public int[] getColors() {
    method getIndexOfDataSet (line 625) | public int getIndexOfDataSet(T dataSet) {
    method getFirstLeft (line 635) | protected T getFirstLeft(List<T> sets) {
    method getFirstRight (line 649) | public T getFirstRight(List<T> sets) {
    method setValueFormatter (line 662) | public void setValueFormatter(IValueFormatter f) {
    method setValueTextColor (line 678) | public void setValueTextColor(int color) {
    method setValueTextColors (line 690) | public void setValueTextColors(List<Integer> colors) {
    method setValueTypeface (line 702) | public void setValueTypeface(Typeface tf) {
    method setValueTextSize (line 714) | public void setValueTextSize(float size) {
    method setDrawValues (line 726) | public void setDrawValues(boolean enabled) {
    method setHighlightEnabled (line 737) | public void setHighlightEnabled(boolean enabled) {
    method isHighlightEnabled (line 749) | public boolean isHighlightEnabled() {
    method clearValues (line 761) | public void clearValues() {
    method contains (line 775) | public boolean contains(T dataSet) {
    method getEntryCount (line 790) | public int getEntryCount() {
    method getMaxEntryCountSet (line 806) | public T getMaxEntryCountSet() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/CombinedData.java
  class CombinedData (line 18) | public class CombinedData extends BarLineScatterCandleBubbleData<IBarLin...
    method CombinedData (line 26) | public CombinedData() {
    method setData (line 30) | public void setData(LineData data) {
    method setData (line 35) | public void setData(BarData data) {
    method setData (line 40) | public void setData(ScatterData data) {
    method setData (line 45) | public void setData(CandleData data) {
    method setData (line 50) | public void setData(BubbleData data) {
    method calcMinMax (line 55) | @Override
    method getBubbleData (line 109) | public BubbleData getBubbleData() {
    method getLineData (line 113) | public LineData getLineData() {
    method getBarData (line 117) | public BarData getBarData() {
    method getScatterData (line 121) | public ScatterData getScatterData() {
    method getCandleData (line 125) | public CandleData getCandleData() {
    method getAllData (line 134) | public List<BarLineScatterCandleBubbleData> getAllData() {
    method getDataByIndex (line 151) | public BarLineScatterCandleBubbleData getDataByIndex(int index) {
    method notifyDataChanged (line 155) | @Override
    method getEntryForHighlight (line 177) | @Override
    method getDataIndex (line 209) | public int getDataIndex(ChartData data) {
    method removeDataSet (line 213) | @Override
    method removeDataSet (line 232) | @Deprecated
    method removeEntry (line 239) | @Deprecated
    method removeEntry (line 246) | @Deprecated

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/DataSet.java
  class DataSet (line 15) | public abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
    method DataSet (line 51) | public DataSet(List<T> values, String label) {
    method calcMinMax (line 61) | @Override
    method calcMinMaxY (line 77) | @Override
    method calcMinMax (line 101) | protected void calcMinMax(T e) {
    method calcMinMaxX (line 111) | protected void calcMinMaxX(T e) {
    method calcMinMaxY (line 120) | protected void calcMinMaxY(T e) {
    method getEntryCount (line 129) | @Override
    method getValues (line 139) | public List<T> getValues() {
    method setValues (line 148) | public void setValues(List<T> values) {
    method copy (line 158) | public abstract DataSet<T> copy();
    method toString (line 160) | @Override
    method toSimpleString (line 176) | public String toSimpleString() {
    method getYMin (line 183) | @Override
    method getYMax (line 188) | @Override
    method getXMin (line 193) | @Override
    method getXMax (line 198) | @Override
    method addEntryOrdered (line 203) | @Override
    method clear (line 223) | @Override
    method addEntry (line 229) | @Override
    method removeEntry (line 246) | @Override
    method getEntryIndex (line 265) | @Override
    method getEntryForXValue (line 270) | @Override
    method getEntryForXValue (line 279) | @Override
    method getEntryForIndex (line 284) | @Override
    method getEntryIndex (line 290) | @Override
    method getEntriesForXValue (line 375) | @Override
    type Rounding (line 421) | public enum Rounding {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/Entry.java
  class Entry (line 17) | public class Entry extends BaseEntry implements Parcelable {
    method Entry (line 22) | public Entry() {
    method Entry (line 32) | public Entry(float x, float y) {
    method Entry (line 44) | public Entry(float x, float y, Object data) {
    method Entry (line 56) | public Entry(float x, float y, Drawable icon) {
    method Entry (line 69) | public Entry(float x, float y, Drawable icon, Object data) {
    method getX (line 79) | public float getX() {
    method setX (line 88) | public void setX(float x) {
    method copy (line 97) | public Entry copy() {
    method equalTo (line 110) | public boolean equalTo(Entry e) {
    method toString (line 130) | @Override
    method describeContents (line 135) | @Override
    method writeToParcel (line 140) | @Override
    method Entry (line 156) | protected Entry(Parcel in) {
    method createFromParcel (line 165) | public Entry createFromParcel(Parcel source) {
    method newArray (line 169) | public Entry[] newArray(int size) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/LineData.java
  class LineData (line 14) | public class LineData extends BarLineScatterCandleBubbleData<ILineDataSe...
    method LineData (line 16) | public LineData() {
    method LineData (line 20) | public LineData(ILineDataSet... dataSets) {
    method LineData (line 24) | public LineData(List<ILineDataSet> dataSets) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/LineDataSet.java
  class LineDataSet (line 18) | public class LineDataSet extends LineRadarDataSet<Entry> implements ILin...
    method LineDataSet (line 68) | public LineDataSet(List<Entry> yVals, String label) {
    method copy (line 85) | @Override
    method getMode (line 113) | @Override
    method setMode (line 123) | public void setMode(LineDataSet.Mode mode) {
    method setCubicIntensity (line 133) | public void setCubicIntensity(float intensity) {
    method getCubicIntensity (line 143) | @Override
    method setCircleRadius (line 155) | public void setCircleRadius(float radius) {
    method getCircleRadius (line 164) | @Override
    method setCircleHoleRadius (line 175) | public void setCircleHoleRadius(float holeRadius) {
    method getCircleHoleRadius (line 184) | @Override
    method setCircleSize (line 197) | @Deprecated
    method getCircleSize (line 205) | @Deprecated
    method enableDashedLine (line 219) | public void enableDashedLine(float lineLength, float spaceLength, floa...
    method disableDashedLine (line 228) | public void disableDashedLine() {
    method isDashedLineEnabled (line 232) | @Override
    method getDashPathEffect (line 237) | @Override
    method setDrawCircles (line 248) | public void setDrawCircles(boolean enabled) {
    method isDrawCirclesEnabled (line 252) | @Override
    method isDrawCubicEnabled (line 257) | @Deprecated
    method isDrawSteppedEnabled (line 263) | @Deprecated
    method getCircleColors (line 276) | public List<Integer> getCircleColors() {
    method getCircleColor (line 280) | @Override
    method getCircleColorCount (line 285) | @Override
    method setCircleColors (line 299) | public void setCircleColors(List<Integer> colors) {
    method setCircleColors (line 312) | public void setCircleColors(int... colors) {
    method setCircleColors (line 326) | public void setCircleColors(int[] colors, Context c) {
    method setCircleColor (line 347) | public void setCircleColor(int color) {
    method resetCircleColors (line 355) | public void resetCircleColors() {
    method setCircleColorHole (line 367) | public void setCircleColorHole(int color) {
    method getCircleHoleColor (line 371) | @Override
    method setDrawCircleHole (line 381) | public void setDrawCircleHole(boolean enabled) {
    method isDrawCircleHoleEnabled (line 385) | @Override
    method setFillFormatter (line 396) | public void setFillFormatter(IFillFormatter formatter) {
    method getFillFormatter (line 404) | @Override
    method getHighlightLineAlpha (line 409) | @Override
    type Mode (line 414) | public enum Mode {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/LineRadarDataSet.java
  class LineRadarDataSet (line 18) | public abstract class LineRadarDataSet<T extends Entry> extends LineScat...
    method LineRadarDataSet (line 46) | public LineRadarDataSet(List<T> yVals, String label) {
    method getFillColor (line 50) | @Override
    method setFillColor (line 61) | public void setFillColor(int color) {
    method getFillDrawable (line 66) | @Override
    method setFillDrawable (line 76) | @TargetApi(18)
    method getFillAlpha (line 81) | @Override
    method setFillAlpha (line 92) | public void setFillAlpha(int alpha) {
    method setLineWidth (line 102) | public void setLineWidth(float width) {
    method getLineWidth (line 111) | @Override
    method setDrawFilled (line 116) | @Override
    method isDrawFilledEnabled (line 121) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/LineScatterCandleRadarDataSet.java
  class LineScatterCandleRadarDataSet (line 13) | public abstract class LineScatterCandleRadarDataSet<T extends Entry> ext...
    method LineScatterCandleRadarDataSet (line 27) | public LineScatterCandleRadarDataSet(List<T> yVals, String label) {
    method setDrawHorizontalHighlightIndicator (line 36) | public void setDrawHorizontalHighlightIndicator(boolean enabled) {
    method setDrawVerticalHighlightIndicator (line 44) | public void setDrawVerticalHighlightIndicator(boolean enabled) {
    method setDrawHighlightIndicators (line 52) | public void setDrawHighlightIndicators(boolean enabled) {
    method isVerticalHighlightIndicatorEnabled (line 57) | @Override
    method isHorizontalHighlightIndicatorEnabled (line 62) | @Override
    method setHighlightLineWidth (line 71) | public void setHighlightLineWidth(float width) {
    method getHighlightLineWidth (line 76) | @Override
    method enableDashedHighlightLine (line 88) | public void enableDashedHighlightLine(float lineLength, float spaceLen...
    method disableDashedHighlightLine (line 97) | public void disableDashedHighlightLine() {
    method isDashedHighlightLineEnabled (line 107) | public boolean isDashedHighlightLineEnabled() {
    method getDashPathEffectHighlight (line 111) | @Override
    method getmHighlightLineAlpha (line 116) | public int getmHighlightLineAlpha() {
    method setmHighlightLineAlpha (line 124) | public void setmHighlightLineAlpha(int mHighlightLineAlpha) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/PieData.java
  class PieData (line 18) | public class PieData extends ChartData<IPieDataSet> {
    method PieData (line 20) | public PieData() {
    method PieData (line 24) | public PieData(IPieDataSet dataSet) {
    method setDataSet (line 33) | public void setDataSet(IPieDataSet dataSet) {
    method getDataSet (line 45) | public IPieDataSet getDataSet() {
    method getDataSetByIndex (line 55) | @Override
    method getDataSetByLabel (line 60) | @Override
    method getEntryForHighlight (line 66) | @Override
    method getYValueSum (line 76) | public float getYValueSum() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/PieDataSet.java
  class PieDataSet (line 10) | public class PieDataSet extends DataSet<PieEntry> implements IPieDataSet {
    method PieDataSet (line 28) | public PieDataSet(List<PieEntry> yVals, String label) {
    method copy (line 33) | @Override
    method calcMinMax (line 49) | @Override
    method setSliceSpace (line 64) | public void setSliceSpace(float spaceDp) {
    method getSliceSpace (line 74) | @Override
    method setAutomaticallyDisableSliceSpacing (line 85) | public void setAutomaticallyDisableSliceSpacing(boolean autoDisable) {
    method isAutomaticallyDisableSliceSpacingEnabled (line 95) | @Override
    method setSelectionShift (line 106) | public void setSelectionShift(float shift) {
    method getSelectionShift (line 110) | @Override
    method getXValuePosition (line 115) | @Override
    method setXValuePosition (line 121) | public void setXValuePosition(ValuePosition xValuePosition)
    method getYValuePosition (line 126) | @Override
    method setYValuePosition (line 132) | public void setYValuePosition(ValuePosition yValuePosition)
    method getValueLineColor (line 138) | @Override
    method setValueLineColor (line 144) | public void setValueLineColor(int valueLineColor)
    method getValueLineWidth (line 150) | @Override
    method setValueLineWidth (line 156) | public void setValueLineWidth(float valueLineWidth)
    method getValueLinePart1OffsetPercentage (line 162) | @Override
    method setValueLinePart1OffsetPercentage (line 168) | public void setValueLinePart1OffsetPercentage(float valueLinePart1Offs...
    method getValueLinePart1Length (line 174) | @Override
    method setValueLinePart1Length (line 180) | public void setValueLinePart1Length(float valueLinePart1Length)
    method getValueLinePart2Length (line 186) | @Override
    method setValueLinePart2Length (line 192) | public void setValueLinePart2Length(float valueLinePart2Length)
    method isValueLineVariableLength (line 198) | @Override
    method setValueLineVariableLength (line 204) | public void setValueLineVariableLength(boolean valueLineVariableLength)
    type ValuePosition (line 209) | public enum ValuePosition {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/PieEntry.java
  class PieEntry (line 10) | @SuppressLint("ParcelCreator")
    method PieEntry (line 15) | public PieEntry(float value) {
    method PieEntry (line 19) | public PieEntry(float value, Object data) {
    method PieEntry (line 23) | public PieEntry(float value, Drawable icon) {
    method PieEntry (line 27) | public PieEntry(float value, Drawable icon, Object data) {
    method PieEntry (line 31) | public PieEntry(float value, String label) {
    method PieEntry (line 36) | public PieEntry(float value, String label, Object data) {
    method PieEntry (line 41) | public PieEntry(float value, String label, Drawable icon) {
    method PieEntry (line 46) | public PieEntry(float value, String label, Drawable icon, Object data) {
    method getValue (line 56) | public float getValue() {
    method getLabel (line 60) | public String getLabel() {
    method setLabel (line 64) | public void setLabel(String label) {
    method setX (line 68) | @Deprecated
    method getX (line 75) | @Deprecated
    method copy (line 82) | public PieEntry copy() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarData.java
  class RadarData (line 16) | public class RadarData extends ChartData<IRadarDataSet> {
    method RadarData (line 20) | public RadarData() {
    method RadarData (line 24) | public RadarData(List<IRadarDataSet> dataSets) {
    method RadarData (line 28) | public RadarData(IRadarDataSet... dataSets) {
    method setLabels (line 37) | public void setLabels(List<String> labels) {
    method setLabels (line 46) | public void setLabels(String... labels) {
    method getLabels (line 50) | public List<String> getLabels() {
    method getEntryForHighlight (line 54) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarDataSet.java
  class RadarDataSet (line 12) | public class RadarDataSet extends LineRadarDataSet<RadarEntry> implement...
    method RadarDataSet (line 28) | public RadarDataSet(List<RadarEntry> yVals, String label) {
    method isDrawHighlightCircleEnabled (line 33) | @Override
    method setDrawHighlightCircleEnabled (line 40) | @Override
    method getHighlightCircleFillColor (line 46) | @Override
    method setHighlightCircleFillColor (line 52) | public void setHighlightCircleFillColor(int color)
    method getHighlightCircleStrokeColor (line 59) | @Override
    method setHighlightCircleStrokeColor (line 67) | public void setHighlightCircleStrokeColor(int color)
    method getHighlightCircleStrokeAlpha (line 72) | @Override
    method setHighlightCircleStrokeAlpha (line 78) | public void setHighlightCircleStrokeAlpha(int alpha)
    method getHighlightCircleInnerRadius (line 83) | @Override
    method setHighlightCircleInnerRadius (line 89) | public void setHighlightCircleInnerRadius(float radius)
    method getHighlightCircleOuterRadius (line 94) | @Override
    method setHighlightCircleOuterRadius (line 100) | public void setHighlightCircleOuterRadius(float radius)
    method getHighlightCircleStrokeWidth (line 105) | @Override
    method setHighlightCircleStrokeWidth (line 111) | public void setHighlightCircleStrokeWidth(float strokeWidth)
    method copy (line 116) | @Override
    method getHighlightLineAlpha (line 132) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarEntry.java
  class RadarEntry (line 8) | @SuppressLint("ParcelCreator")
    method RadarEntry (line 11) | public RadarEntry(float value) {
    method RadarEntry (line 15) | public RadarEntry(float value, Object data) {
    method getValue (line 24) | public float getValue() {
    method copy (line 28) | public RadarEntry copy() {
    method setX (line 33) | @Deprecated
    method getX (line 39) | @Deprecated

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/ScatterData.java
  class ScatterData (line 8) | public class ScatterData extends BarLineScatterCandleBubbleData<IScatter...
    method ScatterData (line 10) | public ScatterData() {
    method ScatterData (line 14) | public ScatterData(List<IScatterDataSet> dataSets) {
    method ScatterData (line 18) | public ScatterData(IScatterDataSet... dataSets) {
    method getGreatestShapeSize (line 27) | public float getGreatestShapeSize() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/ScatterDataSet.java
  class ScatterDataSet (line 19) | public class ScatterDataSet extends LineScatterCandleRadarDataSet<Entry>...
    method ScatterDataSet (line 44) | public ScatterDataSet(List<Entry> yVals, String label) {
    method copy (line 48) | @Override
    method setScatterShapeSize (line 78) | public void setScatterShapeSize(float size) {
    method getScatterShapeSize (line 82) | @Override
    method setScatterShape (line 93) | public void setScatterShape(ScatterChart.ScatterShape shape) {
    method setShapeRenderer (line 103) | public void setShapeRenderer(IShapeRenderer shapeRenderer) {
    method getShapeRenderer (line 107) | @Override
    method setScatterShapeHoleRadius (line 118) | public void setScatterShapeHoleRadius(float holeRadius) {
    method getScatterShapeHoleRadius (line 122) | @Override
    method setScatterShapeHoleColor (line 132) | public void setScatterShapeHoleColor(int holeColor) {
    method getScatterShapeHoleColor (line 136) | @Override
    method getRendererForShape (line 141) | public static IShapeRenderer getRendererForShape(ScatterChart.ScatterS...
    method getHighlightLineAlpha (line 163) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/data/filter/Approximator.java
  class Approximator (line 15) | public class Approximator {
    method reduceWithDouglasPeucker (line 17) | @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    method concat (line 56) | float[] concat(float[]... arrays) {
    class Line (line 72) | private class Line {
      method Line (line 84) | public Line(float x1, float y1, float x2, float y2) {
      method distance (line 94) | public float distance(float x, float y) {
      method getPoints (line 98) | public float[] getPoints() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/exception/DrawingDataSetNotCreatedException.java
  class DrawingDataSetNotCreatedException (line 3) | public class DrawingDataSetNotCreatedException extends RuntimeException {
    method DrawingDataSetNotCreatedException (line 10) | public DrawingDataSetNotCreatedException() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/ColorFormatter.java
  type ColorFormatter (line 13) | public interface ColorFormatter {
    method getColor (line 23) | int getColor(int index, Entry e, IDataSet set);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultAxisValueFormatter.java
  class DefaultAxisValueFormatter (line 10) | public class DefaultAxisValueFormatter implements IAxisValueFormatter
    method DefaultAxisValueFormatter (line 29) | public DefaultAxisValueFormatter(int digits) {
    method getFormattedValue (line 42) | @Override
    method getDecimalDigits (line 53) | public int getDecimalDigits() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultFillFormatter.java
  class DefaultFillFormatter (line 13) | public class DefaultFillFormatter implements IFillFormatter
    method getFillLinePosition (line 16) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultValueFormatter.java
  class DefaultValueFormatter (line 15) | public class DefaultValueFormatter implements IValueFormatter
    method DefaultValueFormatter (line 31) | public DefaultValueFormatter(int digits) {
    method setup (line 40) | public void setup(int digits) {
    method getFormattedValue (line 54) | @Override
    method getDecimalDigits (line 68) | public int getDecimalDigits() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IAxisValueFormatter.java
  type IAxisValueFormatter (line 10) | public interface IAxisValueFormatter
    method getFormattedValue (line 22) | String getFormattedValue(float value, AxisBase axis);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IFillFormatter.java
  type IFillFormatter (line 12) | public interface IFillFormatter
    method getFillLinePosition (line 23) | float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataP...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IValueFormatter.java
  type IValueFormatter (line 14) | public interface IValueFormatter
    method getFormattedValue (line 28) | String getFormattedValue(float value, Entry entry, int dataSetIndex, V...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IndexAxisValueFormatter.java
  class IndexAxisValueFormatter (line 15) | public class IndexAxisValueFormatter implements IAxisValueFormatter
    method IndexAxisValueFormatter (line 24) | public IndexAxisValueFormatter() {
    method IndexAxisValueFormatter (line 32) | public IndexAxisValueFormatter(String[] values) {
    method IndexAxisValueFormatter (line 42) | public IndexAxisValueFormatter(Collection<String> values) {
    method getFormattedValue (line 47) | public String getFormattedValue(float value, AxisBase axis) {
    method getValues (line 56) | public String[] getValues()
    method setValues (line 61) | public void setValues(String[] values)

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/LargeValueFormatter.java
  class LargeValueFormatter (line 20) | public class LargeValueFormatter implements IValueFormatter, IAxisValueF...
    method LargeValueFormatter (line 30) | public LargeValueFormatter() {
    method LargeValueFormatter (line 39) | public LargeValueFormatter(String appendix) {
    method getFormattedValue (line 45) | @Override
    method getFormattedValue (line 51) | @Override
    method setAppendix (line 61) | public void setAppendix(String appendix) {
    method setSuffix (line 71) | public void setSuffix(String[] suff) {
    method makePretty (line 79) | private String makePretty(double number) {
    method getDecimalDigits (line 96) | public int getDecimalDigits() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/PercentFormatter.java
  class PercentFormatter (line 16) | public class PercentFormatter implements IValueFormatter, IAxisValueForm...
    method PercentFormatter (line 21) | public PercentFormatter() {
    method PercentFormatter (line 30) | public PercentFormatter(DecimalFormat format) {
    method getFormattedValue (line 35) | @Override
    method getFormattedValue (line 41) | @Override
    method getDecimalDigits (line 46) | public int getDecimalDigits() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/formatter/StackedValueFormatter.java
  class StackedValueFormatter (line 15) | public class StackedValueFormatter implements IValueFormatter
    method StackedValueFormatter (line 37) | public StackedValueFormatter(boolean drawWholeStack, String appendix, ...
    method getFormattedValue (line 51) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/BarHighlighter.java
  class BarHighlighter (line 13) | public class BarHighlighter extends ChartHighlighter<BarDataProvider> {
    method BarHighlighter (line 15) | public BarHighlighter(BarDataProvider chart) {
    method getHighlight (line 19) | @Override
    method getStackedHighlight (line 55) | public Highlight getStackedHighlight(Highlight high, IBarDataSet set, ...
    method getClosestStackIndex (line 101) | protected int getClosestStackIndex(Range[] ranges, float value) {
    method getDistance (line 154) | @Override
    method getData (line 159) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/ChartHighlighter.java
  class ChartHighlighter (line 17) | public class ChartHighlighter<T extends BarLineScatterCandleBubbleDataPr...
    method ChartHighlighter (line 30) | public ChartHighlighter(T chart) {
    method getHighlight (line 34) | @Override
    method getValsForTouch (line 53) | protected MPPointD getValsForTouch(float x, float y) {
    method getHighlightForX (line 68) | protected Highlight getHighlightForX(float xVal, float x, float y) {
    method getMinimumDistance (line 95) | protected float getMinimumDistance(List<Highlight> closestValues, floa...
    method getHighlightPos (line 115) | protected float getHighlightPos(Highlight h) {
    method getHighlightsAtXValue (line 128) | protected List<Highlight> getHighlightsAtXValue(float xVal, float x, f...
    method buildHighlights (line 160) | protected List<Highlight> buildHighlights(IDataSet set, int dataSetInd...
    method getClosestHighlightByPixel (line 204) | public Highlight getClosestHighlightByPixel(List<Highlight> closestVal...
    method getDistance (line 237) | protected float getDistance(float x1, float y1, float x2, float y2) {
    method getData (line 243) | protected BarLineScatterCandleBubbleData getData() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/CombinedHighlighter.java
  class CombinedHighlighter (line 16) | public class CombinedHighlighter extends ChartHighlighter<CombinedDataPr...
    method CombinedHighlighter (line 24) | public CombinedHighlighter(CombinedDataProvider chart, BarDataProvider...
    method getHighlightsAtXValue (line 31) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/Highlight.java
  class Highlight (line 11) | public class Highlight {
    method Highlight (line 63) | public Highlight(float x, float y, int dataSetIndex) {
    method Highlight (line 69) | public Highlight(float x, int dataSetIndex, int stackIndex) {
    method Highlight (line 81) | public Highlight(float x, float y, float xPx, float yPx, int dataSetIn...
    method Highlight (line 99) | public Highlight(float x, float y, float xPx, float yPx, int dataSetIn...
    method getX (line 109) | public float getX() {
    method getY (line 118) | public float getY() {
    method getXPx (line 125) | public float getXPx() {
    method getYPx (line 132) | public float getYPx() {
    method getDataIndex (line 141) | public int getDataIndex() {
    method setDataIndex (line 145) | public void setDataIndex(int mDataIndex) {
    method getDataSetIndex (line 154) | public int getDataSetIndex() {
    method getStackIndex (line 164) | public int getStackIndex() {
    method isStacked (line 168) | public boolean isStacked() {
    method getAxis (line 177) | public YAxis.AxisDependency getAxis() {
    method setDraw (line 187) | public void setDraw(float x, float y) {
    method getDrawX (line 197) | public float getDrawX() {
    method getDrawY (line 206) | public float getDrawY() {
    method equalTo (line 217) | public boolean equalTo(Highlight h) {
    method toString (line 230) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/HorizontalBarHighlighter.java
  class HorizontalBarHighlighter (line 17) | public class HorizontalBarHighlighter extends BarHighlighter {
    method HorizontalBarHighlighter (line 19) | public HorizontalBarHighlighter(BarDataProvider chart) {
    method getHighlight (line 23) | @Override
    method buildHighlights (line 48) | @Override
    method getDistance (line 81) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/IHighlighter.java
  type IHighlighter (line 6) | public interface IHighlighter
    method getHighlight (line 16) | Highlight getHighlight(float x, float y);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/PieHighlighter.java
  class PieHighlighter (line 10) | public class PieHighlighter extends PieRadarHighlighter<PieChart> {
    method PieHighlighter (line 12) | public PieHighlighter(PieChart chart) {
    method getClosestHighlight (line 16) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/PieRadarHighlighter.java
  class PieRadarHighlighter (line 12) | public abstract class PieRadarHighlighter<T extends PieRadarChartBase> i...
    method PieRadarHighlighter (line 22) | public PieRadarHighlighter(T chart) {
    method getHighlight (line 26) | @Override
    method getClosestHighlight (line 65) | protected abstract Highlight getClosestHighlight(int index, float x, f...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/RadarHighlighter.java
  class RadarHighlighter (line 14) | public class RadarHighlighter extends PieRadarHighlighter<RadarChart> {
    method RadarHighlighter (line 16) | public RadarHighlighter(RadarChart chart) {
    method getClosestHighlight (line 20) | @Override
    method getHighlightsAtIndex (line 52) | protected List<Highlight> getHighlightsAtIndex(int index) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/highlight/Range.java
  class Range (line 7) | public final class Range {
    method Range (line 12) | public Range(float from, float to) {
    method contains (line 23) | public boolean contains(float value) {
    method isLarger (line 31) | public boolean isLarger(float value) {
    method isSmaller (line 35) | public boolean isSmaller(float value) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarDataProvider.java
  type BarDataProvider (line 5) | public interface BarDataProvider extends BarLineScatterCandleBubbleDataP...
    method getBarData (line 7) | BarData getBarData();
    method isDrawBarShadowEnabled (line 8) | boolean isDrawBarShadowEnabled();
    method isDrawValueAboveBarEnabled (line 9) | boolean isDrawValueAboveBarEnabled();
    method isHighlightFullBarEnabled (line 10) | boolean isHighlightFullBarEnabled();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java
  type BarLineScatterCandleBubbleDataProvider (line 7) | public interface BarLineScatterCandleBubbleDataProvider extends ChartInt...
    method getTransformer (line 9) | Transformer getTransformer(AxisDependency axis);
    method isInverted (line 10) | boolean isInverted(AxisDependency axis);
    method getLowestVisibleX (line 12) | float getLowestVisibleX();
    method getHighestVisibleX (line 13) | float getHighestVisibleX();
    method getData (line 15) | BarLineScatterCandleBubbleData getData();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BubbleDataProvider.java
  type BubbleDataProvider (line 5) | public interface BubbleDataProvider extends BarLineScatterCandleBubbleDa...
    method getBubbleData (line 7) | BubbleData getBubbleData();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/CandleDataProvider.java
  type CandleDataProvider (line 5) | public interface CandleDataProvider extends BarLineScatterCandleBubbleDa...
    method getCandleData (line 7) | CandleData getCandleData();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/ChartInterface.java
  type ChartInterface (line 15) | public interface ChartInterface {
    method getXChartMin (line 22) | float getXChartMin();
    method getXChartMax (line 29) | float getXChartMax();
    method getXRange (line 31) | float getXRange();
    method getYChartMin (line 38) | float getYChartMin();
    method getYChartMax (line 45) | float getYChartMax();
    method getMaxHighlightDistance (line 52) | float getMaxHighlightDistance();
    method getWidth (line 54) | int getWidth();
    method getHeight (line 56) | int getHeight();
    method getCenterOfView (line 58) | MPPointF getCenterOfView();
    method getCenterOffsets (line 60) | MPPointF getCenterOffsets();
    method getContentRect (line 62) | RectF getContentRect();
    method getDefaultValueFormatter (line 64) | IValueFormatter getDefaultValueFormatter();
    method getData (line 66) | ChartData getData();
    method getMaxVisibleCount (line 68) | int getMaxVisibleCount();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/CombinedDataProvider.java
  type CombinedDataProvider (line 8) | public interface CombinedDataProvider extends LineDataProvider, BarDataP...
    method getCombinedData (line 10) | CombinedData getCombinedData();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java
  type LineDataProvider (line 6) | public interface LineDataProvider extends BarLineScatterCandleBubbleData...
    method getLineData (line 8) | LineData getLineData();
    method getAxis (line 10) | YAxis getAxis(YAxis.AxisDependency dependency);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/ScatterDataProvider.java
  type ScatterDataProvider (line 5) | public interface ScatterDataProvider extends BarLineScatterCandleBubbleD...
    method getScatterData (line 7) | ScatterData getScatterData();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java
  type IBarDataSet (line 8) | public interface IBarDataSet extends IBarLineScatterCandleBubbleDataSet<...
    method isStacked (line 15) | boolean isStacked();
    method getStackSize (line 23) | int getStackSize();
    method getBarShadowColor (line 31) | int getBarShadowColor();
    method getBarBorderWidth (line 39) | float getBarBorderWidth();
    method getBarBorderColor (line 46) | int getBarBorderColor();
    method getHighLightAlpha (line 55) | int getHighLightAlpha();
    method getStackLabels (line 64) | String[] getStackLabels();
    method getHighLightWidth (line 66) | float getHighLightWidth();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBarLineScatterCandleBubbleDataSet.java
  type IBarLineScatterCandleBubbleDataSet (line 8) | public interface IBarLineScatterCandleBubbleDataSet<T extends Entry> ext...
    method getHighLightColor (line 15) | int getHighLightColor();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBubbleDataSet.java
  type IBubbleDataSet (line 8) | public interface IBubbleDataSet extends IBarLineScatterCandleBubbleDataS...
    method setHighlightCircleWidth (line 16) | void setHighlightCircleWidth(float width);
    method getMaxSize (line 18) | float getMaxSize();
    method isNormalizeSizeEnabled (line 20) | boolean isNormalizeSizeEnabled();
    method getHighlightCircleWidth (line 26) | float getHighlightCircleWidth();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ICandleDataSet.java
  type ICandleDataSet (line 10) | public interface ICandleDataSet extends ILineScatterCandleRadarDataSet<C...
    method getBarSpace (line 18) | float getBarSpace();
    method getShowCandleBar (line 28) | boolean getShowCandleBar();
    method getShadowWidth (line 35) | float getShadowWidth();
    method getShadowColor (line 42) | int getShadowColor();
    method getNeutralColor (line 49) | int getNeutralColor();
    method getIncreasingColor (line 56) | int getIncreasingColor();
    method getDecreasingColor (line 63) | int getDecreasingColor();
    method getIncreasingPaintStyle (line 70) | Paint.Style getIncreasingPaintStyle();
    method getDecreasingPaintStyle (line 77) | Paint.Style getDecreasingPaintStyle();
    method getShadowColorSameAsCandle (line 84) | boolean getShadowColorSameAsCandle();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IDataSet.java
  type IDataSet (line 19) | public interface IDataSet<T extends Entry> {
    method getYMin (line 28) | float getYMin();
    method getYMax (line 35) | float getYMax();
    method getXMin (line 42) | float getXMin();
    method getXMax (line 49) | float getXMax();
    method getEntryCount (line 57) | int getEntryCount();
    method calcMinMax (line 62) | void calcMinMax();
    method calcMinMaxY (line 71) | void calcMinMaxY(float fromX, float toX);
    method getEntryForXValue (line 89) | T getEntryForXValue(float xValue, float closestToY, DataSet.Rounding r...
    method getEntryForXValue (line 104) | T getEntryForXValue(float xValue, float closestToY);
    method getEntriesForXValue (line 115) | List<T> getEntriesForXValue(float xValue);
    method getEntryForIndex (line 123) | T getEntryForIndex(int index);
    method getEntryIndex (line 139) | int getEntryIndex(float xValue, float closestToY, DataSet.Rounding rou...
    method getEntryIndex (line 148) | int getEntryIndex(T e);
    method getIndexInEntries (line 160) | int getIndexInEntries(int xIndex);
    method addEntry (line 170) | boolean addEntry(T e);
    method addEntryOrdered (line 181) | void addEntryOrdered(T e);
    method removeFirst (line 189) | boolean removeFirst();
    method removeLast (line 197) | boolean removeLast();
    method removeEntry (line 207) | boolean removeEntry(T e);
    method removeEntryByXValue (line 215) | boolean removeEntryByXValue(float xValue);
    method removeEntry (line 224) | boolean removeEntry(int index);
    method contains (line 234) | boolean contains(T entry);
    method clear (line 239) | void clear();
    method getLabel (line 249) | String getLabel();
    method setLabel (line 256) | void setLabel(String label);
    method getAxisDependency (line 263) | YAxis.AxisDependency getAxisDependency();
    method setAxisDependency (line 271) | void setAxisDependency(YAxis.AxisDependency dependency);
    method getColors (line 278) | List<Integer> getColors();
    method getColor (line 286) | int getColor();
    method getColor (line 295) | int getColor(int index);
    method isHighlightEnabled (line 302) | boolean isHighlightEnabled();
    method setHighlightEnabled (line 310) | void setHighlightEnabled(boolean enabled);
    method setValueFormatter (line 321) | void setValueFormatter(IValueFormatter f);
    method getValueFormatter (line 328) | IValueFormatter getValueFormatter();
    method needsFormatter (line 335) | boolean needsFormatter();
    method setValueTextColor (line 342) | void setValueTextColor(int color);
    method setValueTextColors (line 349) | void setValueTextColors(List<Integer> colors);
    method setValueTypeface (line 356) | void setValueTypeface(Typeface tf);
    method setValueTextSize (line 363) | void setValueTextSize(float size);
    method getValueTextColor (line 370) | int getValueTextColor();
    method getValueTextColor (line 379) | int getValueTextColor(int index);
    method getValueTypeface (line 386) | Typeface getValueTypeface();
    method getValueTextSize (line 393) | float getValueTextSize();
    method getForm (line 400) | Legend.LegendForm getForm();
    method getFormSize (line 407) | float getFormSize();
    method getFormLineWidth (line 414) | float getFormLineWidth();
    method getFormLineDashEffect (line 421) | DashPathEffect getFormLineDashEffect();
    method setDrawValues (line 430) | void setDrawValues(boolean enabled);
    method isDrawValuesEnabled (line 437) | boolean isDrawValuesEnabled();
    method setDrawIcons (line 447) | void setDrawIcons(boolean enabled);
    method isDrawIconsEnabled (line 454) | boolean isDrawIconsEnabled();
    method setIconsOffset (line 464) | void setIconsOffset(MPPointF offset);
    method getIconsOffset (line 469) | MPPointF getIconsOffset();
    method setVisible (line 477) | void setVisible(boolean visible);
    method isVisible (line 485) | boolean isVisible();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineDataSet.java
  type ILineDataSet (line 12) | public interface ILineDataSet extends ILineRadarDataSet<Entry> {
    method getMode (line 19) | LineDataSet.Mode getMode();
    method getCubicIntensity (line 27) | float getCubicIntensity();
    method isDrawCubicEnabled (line 29) | @Deprecated
    method isDrawSteppedEnabled (line 32) | @Deprecated
    method getCircleRadius (line 38) | float getCircleRadius();
    method getCircleHoleRadius (line 43) | float getCircleHoleRadius();
    method getCircleColor (line 52) | int getCircleColor(int index);
    method getCircleColorCount (line 59) | int getCircleColorCount();
    method isDrawCirclesEnabled (line 66) | boolean isDrawCirclesEnabled();
    method getCircleHoleColor (line 73) | int getCircleHoleColor();
    method isDrawCircleHoleEnabled (line 80) | boolean isDrawCircleHoleEnabled();
    method getDashPathEffect (line 87) | DashPathEffect getDashPathEffect();
    method isDashedLineEnabled (line 95) | boolean isDashedLineEnabled();
    method getFillFormatter (line 102) | IFillFormatter getFillFormatter();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineRadarDataSet.java
  type ILineRadarDataSet (line 10) | public interface ILineRadarDataSet<T extends Entry> extends ILineScatter...
    method getFillColor (line 17) | int getFillColor();
    method getFillDrawable (line 24) | Drawable getFillDrawable();
    method getFillAlpha (line 32) | int getFillAlpha();
    method getLineWidth (line 39) | float getLineWidth();
    method isDrawFilledEnabled (line 46) | boolean isDrawFilledEnabled();
    method setDrawFilled (line 57) | void setDrawFilled(boolean enabled);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineScatterCandleRadarDataSet.java
  type ILineScatterCandleRadarDataSet (line 10) | public interface ILineScatterCandleRadarDataSet<T extends Entry> extends...
    method isVerticalHighlightIndicatorEnabled (line 16) | boolean isVerticalHighlightIndicatorEnabled();
    method isHorizontalHighlightIndicatorEnabled (line 22) | boolean isHorizontalHighlightIndicatorEnabled();
    method getHighlightLineWidth (line 28) | float getHighlightLineWidth();
    method getHighlightLineAlpha (line 30) | int getHighlightLineAlpha();
    method getDashPathEffectHighlight (line 36) | DashPathEffect getDashPathEffectHighlight();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IPieDataSet.java
  type IPieDataSet (line 10) | public interface IPieDataSet extends IDataSet<PieEntry> {
    method getSliceSpace (line 18) | float getSliceSpace();
    method isAutomaticallyDisableSliceSpacingEnabled (line 26) | boolean isAutomaticallyDisableSliceSpacingEnabled();
    method getSelectionShift (line 34) | float getSelectionShift();
    method getXValuePosition (line 36) | PieDataSet.ValuePosition getXValuePosition();
    method getYValuePosition (line 37) | PieDataSet.ValuePosition getYValuePosition();
    method getValueLineColor (line 42) | int getValueLineColor();
    method getValueLineWidth (line 47) | float getValueLineWidth();
    method getValueLinePart1OffsetPercentage (line 52) | float getValueLinePart1OffsetPercentage();
    method getValueLinePart1Length (line 57) | float getValueLinePart1Length();
    method getValueLinePart2Length (line 62) | float getValueLinePart2Length();
    method isValueLineVariableLength (line 67) | boolean isValueLineVariableLength();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IRadarDataSet.java
  type IRadarDataSet (line 8) | public interface IRadarDataSet extends ILineRadarDataSet<RadarEntry> {
    method isDrawHighlightCircleEnabled (line 11) | boolean isDrawHighlightCircleEnabled();
    method setDrawHighlightCircleEnabled (line 14) | void setDrawHighlightCircleEnabled(boolean enabled);
    method getHighlightCircleFillColor (line 16) | int getHighlightCircleFillColor();
    method getHighlightCircleStrokeColor (line 20) | int getHighlightCircleStrokeColor();
    method getHighlightCircleStrokeAlpha (line 22) | int getHighlightCircleStrokeAlpha();
    method getHighlightCircleInnerRadius (line 24) | float getHighlightCircleInnerRadius();
    method getHighlightCircleOuterRadius (line 26) | float getHighlightCircleOuterRadius();
    method getHighlightCircleStrokeWidth (line 28) | float getHighlightCircleStrokeWidth();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IScatterDataSet.java
  type IScatterDataSet (line 9) | public interface IScatterDataSet extends ILineScatterCandleRadarDataSet<...
    method getScatterShapeSize (line 16) | float getScatterShapeSize();
    method getScatterShapeHoleRadius (line 23) | float getScatterShapeHoleRadius();
    method getScatterShapeHoleColor (line 30) | int getScatterShapeHoleColor();
    method getShapeRenderer (line 37) | IShapeRenderer getShapeRenderer();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java
  class AnimatedMoveViewJob (line 14) | @SuppressLint("NewApi")
    method getInstance (line 24) | public static AnimatedMoveViewJob getInstance(ViewPortHandler viewPort...
    method recycleInstance (line 38) | public static void recycleInstance(AnimatedMoveViewJob instance){
    method AnimatedMoveViewJob (line 43) | public AnimatedMoveViewJob(ViewPortHandler viewPortHandler, float xVal...
    method onAnimationUpdate (line 47) | @Override
    method recycleSelf (line 57) | public void recycleSelf(){
    method instantiate (line 61) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedViewPortJob.java
  class AnimatedViewPortJob (line 15) | @SuppressLint("NewApi")
    method AnimatedViewPortJob (line 25) | public AnimatedViewPortJob(ViewPortHandler viewPortHandler, float xVal...
    method run (line 35) | @SuppressLint("NewApi")
    method getPhase (line 41) | public float getPhase() {
    method setPhase (line 45) | public void setPhase(float phase) {
    method getXOrigin (line 49) | public float getXOrigin() {
    method getYOrigin (line 53) | public float getYOrigin() {
    method recycleSelf (line 57) | public abstract void recycleSelf();
    method resetAnimator (line 59) | protected void resetAnimator(){
    method onAnimationStart (line 67) | @Override
    method onAnimationEnd (line 72) | @Override
    method onAnimationCancel (line 81) | @Override
    method onAnimationRepeat (line 90) | @Override
    method onAnimationUpdate (line 95) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedZoomJob.java
  class AnimatedZoomJob (line 18) | @SuppressLint("NewApi")
    method getInstance (line 27) | public static AnimatedZoomJob getInstance(ViewPortHandler viewPortHand...
    method AnimatedZoomJob (line 51) | @SuppressLint("NewApi")
    method onAnimationUpdate (line 65) | @Override
    method onAnimationEnd (line 87) | @Override
    method onAnimationCancel (line 93) | @Override
    method onAnimationRepeat (line 98) | @Override
    method recycleSelf (line 103) | @Override
    method onAnimationStart (line 108) | @Override
    method instantiate (line 113) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java
  class MoveViewJob (line 13) | public class MoveViewJob extends ViewPortJob {
    method getInstance (line 22) | public static MoveViewJob getInstance(ViewPortHandler viewPortHandler,...
    method recycleInstance (line 32) | public static void recycleInstance(MoveViewJob instance){
    method MoveViewJob (line 36) | public MoveViewJob(ViewPortHandler viewPortHandler, float xValue, floa...
    method run (line 40) | @Override
    method instantiate (line 52) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ViewPortJob.java
  class ViewPortJob (line 19) | public abstract class ViewPortJob extends ObjectPool.Poolable implements...
    method ViewPortJob (line 29) | public ViewPortJob(ViewPortHandler viewPortHandler, float xValue, floa...
    method getXValue (line 40) | public float getXValue() {
    method getYValue (line 44) | public float getYValue() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java
  class ZoomJob (line 16) | public class ZoomJob extends ViewPortJob {
    method getInstance (line 25) | public static ZoomJob getInstance(ViewPortHandler viewPortHandler, flo...
    method recycleInstance (line 39) | public static void recycleInstance(ZoomJob instance) {
    method ZoomJob (line 48) | public ZoomJob(ViewPortHandler viewPortHandler, float scaleX, float sc...
    method run (line 59) | @Override
    method instantiate (line 83) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/BarLineChartTouchListener.java
  class BarLineChartTouchListener (line 30) | public class BarLineChartTouchListener extends ChartTouchListener<BarLin...
    method BarLineChartTouchListener (line 86) | public BarLineChartTouchListener(BarLineChartBase<? extends BarLineSca...
    method onTouch (line 96) | @SuppressLint("ClickableViewAccessibility")
    method saveTouchStart (line 282) | private void saveTouchStart(MotionEvent event) {
    method performDrag (line 296) | private void performDrag(MotionEvent event) {
    method performZoom (line 338) | private void performZoom(MotionEvent event) {
    method performHighlightDrag (line 442) | private void performHighlightDrag(MotionEvent e) {
    method midPoint (line 464) | private static void midPoint(MPPointF point, MotionEvent event) {
    method spacing (line 477) | private static float spacing(MotionEvent event) {
    method getXDist (line 490) | private static float getXDist(MotionEvent e) {
    method getYDist (line 502) | private static float getYDist(MotionEvent e) {
    method getTrans (line 516) | public MPPointF getTrans(float x, float y) {
    method inverted (line 538) | private boolean inverted() {
    method getMatrix (line 553) | public Matrix getMatrix() {
    method setDragTriggerDist (line 563) | public void setDragTriggerDist(float dragTriggerDistance) {
    method onDoubleTap (line 567) | @Override
    method onLongPress (line 595) | @Override
    method onSingleTapUp (line 608) | @Override
    method onFling (line 630) | @Override
    method stopDeceleration (line 644) | public void stopDeceleration() {
    method computeScroll (line 649) | public void computeScroll() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/ChartTouchListener.java
  class ChartTouchListener (line 13) | public abstract class ChartTouchListener<T extends Chart<?>> extends Ges...
    type ChartGesture (line 15) | public enum ChartGesture {
    method ChartTouchListener (line 53) | public ChartTouchListener(T chart) {
    method startAction (line 64) | public void startAction(MotionEvent me) {
    method endAction (line 77) | public void endAction(MotionEvent me) {
    method setLastHighlighted (line 90) | public void setLastHighlighted(Highlight high) {
    method getTouchMode (line 99) | public int getTouchMode() {
    method getLastGesture (line 108) | public ChartGesture getLastGesture() {
    method performHighlight (line 118) | protected void performHighlight(Highlight h, MotionEvent e) {
    method distance (line 138) | protected static float distance(float eventX, float startX, float even...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnChartGestureListener.java
  type OnChartGestureListener (line 10) | public interface OnChartGestureListener {
    method onChartGestureStart (line 18) | void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGestu...
    method onChartGestureEnd (line 26) | void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture...
    method onChartLongPressed (line 33) | void onChartLongPressed(MotionEvent me);
    method onChartDoubleTapped (line 40) | void onChartDoubleTapped(MotionEvent me);
    method onChartSingleTapped (line 47) | void onChartSingleTapped(MotionEvent me);
    method onChartFling (line 57) | void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, f...
    method onChartScale (line 66) | void onChartScale(MotionEvent me, float scaleX, float scaleY);
    method onChartTranslate (line 75) | void onChartTranslate(MotionEvent me, float dX, float dY);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnChartValueSelectedListener.java
  type OnChartValueSelectedListener (line 12) | public interface OnChartValueSelectedListener {
    method onValueSelected (line 21) | void onValueSelected(Entry e, Highlight h);
    method onNothingSelected (line 26) | void onNothingSelected();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnDrawLineChartTouchListener.java
  class OnDrawLineChartTouchListener (line 8) | public class OnDrawLineChartTouchListener extends SimpleOnGestureListene...
    method onTouch (line 10) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnDrawListener.java
  type OnDrawListener (line 12) | public interface OnDrawListener {
    method onEntryAdded (line 21) | void onEntryAdded(Entry entry);
    method onEntryMoved (line 28) | void onEntryMoved(Entry entry);
    method onDrawFinished (line 36) | void onDrawFinished(DataSet<?> dataSet);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/listener/PieRadarChartTouchListener.java
  class PieRadarChartTouchListener (line 22) | public class PieRadarChartTouchListener extends ChartTouchListener<PieRa...
    method PieRadarChartTouchListener (line 36) | public PieRadarChartTouchListener(PieRadarChartBase<?> chart) {
    method onTouch (line 40) | @SuppressLint("ClickableViewAccessibility")
    method onLongPress (line 119) | @Override
    method onSingleTapConfirmed (line 131) | @Override
    method onSingleTapUp (line 136) | @Override
    method resetVelocity (line 157) | private void resetVelocity() {
    method sampleVelocity (line 161) | private void sampleVelocity(float touchLocationX, float touchLocationY) {
    method calculateVelocity (line 179) | private float calculateVelocity() {
    method setGestureStartAngle (line 234) | public void setGestureStartAngle(float x, float y) {
    method updateGestureRotation (line 245) | public void updateGestureRotation(float x, float y) {
    method stopDeceleration (line 252) | public void stopDeceleration() {
    method computeScroll (line 256) | public void computeScroll() {
    class AngularVelocitySample (line 277) | private class AngularVelocitySample {
      method AngularVelocitySample (line 282) | public AngularVelocitySample(long time, float angle) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/matrix/Vector3.java
  class Vector3 (line 7) | public final class Vector3 {
    method Vector3 (line 17) | public Vector3() {
    method Vector3 (line 20) | public Vector3(float[] array)
    method Vector3 (line 25) | public Vector3(float xValue, float yValue, float zValue) {
    method Vector3 (line 29) | public Vector3(Vector3 other) {
    method add (line 33) | public final void add(Vector3 other) {
    method add (line 39) | public final void add(float otherX, float otherY, float otherZ) {
    method subtract (line 45) | public final void subtract(Vector3 other) {
    method subtractMultiple (line 51) | public final void subtractMultiple(Vector3 other, float multiplicator)
    method multiply (line 58) | public final void multiply(float magnitude) {
    method multiply (line 64) | public final void multiply(Vector3 other) {
    method divide (line 70) | public final void divide(float magnitude) {
    method set (line 78) | public final void set(Vector3 other) {
    method set (line 84) | public final void set(float xValue, float yValue, float zValue) {
    method dot (line 90) | public final float dot(Vector3 other) {
    method cross (line 94) | public final Vector3 cross(Vector3 other) {
    method length (line 100) | public final float length() {
    method length2 (line 104) | public final float length2() {
    method distance2 (line 108) | public final float distance2(Vector3 other) {
    method normalize (line 115) | public final float normalize() {
    method zero (line 128) | public final void zero() {
    method pointsInSameDirection (line 132) | public final boolean pointsInSameDirection(Vector3 other) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/AxisRenderer.java
  class AxisRenderer (line 20) | public abstract class AxisRenderer extends Renderer {
    method AxisRenderer (line 48) | public AxisRenderer(ViewPortHandler viewPortHandler, Transformer trans...
    method getPaintAxisLabels (line 79) | public Paint getPaintAxisLabels() {
    method getPaintGrid (line 89) | public Paint getPaintGrid() {
    method getPaintAxisLine (line 99) | public Paint getPaintAxisLine() {
    method getTransformer (line 108) | public Transformer getTransformer() {
    method computeAxis (line 118) | public void computeAxis(float min, float max, boolean inverted) {
    method computeAxisValues (line 149) | protected void computeAxisValues(float min, float max) {
    method renderAxisLabels (line 265) | public abstract void renderAxisLabels(Canvas c);
    method renderGridLines (line 272) | public abstract void renderGridLines(Canvas c);
    method renderAxisLine (line 279) | public abstract void renderAxisLine(Canvas c);
    method renderLimitLines (line 286) | public abstract void renderLimitLines(Canvas c);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.java
  class BarChartRenderer (line 25) | public class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
    method BarChartRenderer (line 39) | public BarChartRenderer(BarDataProvider chart, ChartAnimator animator,
    method initBuffers (line 57) | @Override
    method drawData (line 70) | @Override
    method drawDataSet (line 87) | protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) {
    method prepareBarHighlight (line 176) | protected void prepareBarHighlight(float x, float y1, float y2, float ...
    method drawValues (line 186) | @Override
    method drawHighlighted (line 415) | @Override
    method setHighlightDrawPos (line 476) | protected void setHighlightDrawPos(Highlight high, RectF bar) {
    method drawExtras (line 480) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarLineScatterCandleBubbleRenderer.java
  class BarLineScatterCandleBubbleRenderer (line 14) | public abstract class BarLineScatterCandleBubbleRenderer extends DataRen...
    method BarLineScatterCandleBubbleRenderer (line 21) | public BarLineScatterCandleBubbleRenderer(ChartAnimator animator, View...
    method shouldDrawValues (line 31) | protected boolean shouldDrawValues(IDataSet set) {
    method isInBoundsX (line 42) | protected boolean isInBoundsX(Entry e, IBarLineScatterCandleBubbleData...
    class XBounds (line 59) | protected class XBounds {
      method set (line 82) | public void set(BarLineScatterCandleBubbleDataProvider chart, IBarLi...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BubbleChartRenderer.java
  class BubbleChartRenderer (line 26) | public class BubbleChartRenderer extends BarLineScatterCandleBubbleRende...
    method BubbleChartRenderer (line 30) | public BubbleChartRenderer(BubbleDataProvider chart, ChartAnimator ani...
    method initBuffers (line 41) | @Override
    method drawData (line 46) | @Override
    method getShapeSize (line 61) | protected float getShapeSize(float entrySize, float maxSize, float ref...
    method drawDataSet (line 68) | protected void drawDataSet(Canvas c, IBubbleDataSet dataSet) {
    method drawValues (line 115) | @Override
    method drawExtras (line 195) | @Override
    method drawHighlighted (line 201) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/CandleStickChartRenderer.java
  class CandleStickChartRenderer (line 23) | public class CandleStickChartRenderer extends LineScatterCandleRadarRend...
    method CandleStickChartRenderer (line 33) | public CandleStickChartRenderer(CandleDataProvider chart, ChartAnimato...
    method initBuffers (line 39) | @Override
    method drawData (line 44) | @Override
    method drawDataSet (line 56) | @SuppressWarnings("ResourceAsColor")
    method drawValues (line 256) | @Override
    method drawExtras (line 331) | @Override
    method drawHighlighted (line 335) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/CombinedChartRenderer.java
  class CombinedChartRenderer (line 22) | public class CombinedChartRenderer extends DataRenderer {
    method CombinedChartRenderer (line 31) | public CombinedChartRenderer(CombinedChart chart, ChartAnimator animat...
    method createRenderers (line 41) | public void createRenderers() {
    method initBuffers (line 78) | @Override
    method drawData (line 85) | @Override
    method drawValues (line 92) | @Override
    method drawExtras (line 99) | @Override
    method drawHighlighted (line 108) | @Override
    method getSubRenderer (line 148) | public DataRenderer getSubRenderer(int index) {
    method getSubRenderers (line 160) | public List<DataRenderer> getSubRenderers() {
    method setSubRenderers (line 164) | public void setSubRenderers(List<DataRenderer> renderers) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/DataRenderer.java
  class DataRenderer (line 26) | public abstract class DataRenderer extends Renderer {
    method DataRenderer (line 51) | public DataRenderer(ChartAnimator animator, ViewPortHandler viewPortHa...
    method isDrawingValuesAllowed (line 73) | protected boolean isDrawingValuesAllowed(ChartInterface chart) {
    method getPaintValues (line 84) | public Paint getPaintValues() {
    method getPaintHighlight (line 94) | public Paint getPaintHighlight() {
    method getPaintRender (line 103) | public Paint getPaintRender() {
    method applyValueTextStyle (line 113) | protected void applyValueTextStyle(IDataSet set) {
    method initBuffers (line 124) | public abstract void initBuffers();
    method drawData (line 131) | public abstract void drawData(Canvas c);
    method drawValues (line 138) | public abstract void drawValues(Canvas c);
    method drawValue (line 152) | public void drawValue(Canvas c, IValueFormatter formatter, float value...
    method drawExtras (line 162) | public abstract void drawExtras(Canvas c);
    method drawHighlighted (line 170) | public abstract void drawHighlighted(Canvas c, Highlight[] indices);

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java
  class HorizontalBarChartRenderer (line 31) | public class HorizontalBarChartRenderer extends BarChartRenderer {
    method HorizontalBarChartRenderer (line 33) | public HorizontalBarChartRenderer(BarDataProvider chart, ChartAnimator...
    method initBuffers (line 40) | @Override
    method drawDataSet (line 55) | @Override
    method drawValues (line 145) | @Override
    method drawValue (line 399) | protected void drawValue(Canvas c, String valueText, float x, float y,...
    method prepareBarHighlight (line 404) | @Override
    method setHighlightDrawPos (line 417) | @Override
    method isDrawingValuesAllowed (line 422) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LegendRenderer.java
  class LegendRenderer (line 27) | public class LegendRenderer extends Renderer {
    method LegendRenderer (line 44) | public LegendRenderer(ViewPortHandler viewPortHandler, Legend legend) {
    method getLabelPaint (line 62) | public Paint getLabelPaint() {
    method getFormPaint (line 71) | public Paint getFormPaint() {
    method computeLegend (line 83) | public void computeLegend(ChartData<?> data) {
    method renderLegend (line 225) | public void renderLegend(Canvas c) {
    method drawForm (line 480) | protected void drawForm(
    method drawLabel (line 557) | protected void drawLabel(Canvas c, float x, float y, String label) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java
  class LineChartRenderer (line 30) | public class LineChartRenderer extends LineRadarRenderer {
    method LineChartRenderer (line 59) | public LineChartRenderer(LineDataProvider chart, ChartAnimator animator,
    method initBuffers (line 69) | @Override
    method drawData (line 73) | @Override
    method drawDataSet (line 104) | protected void drawDataSet(Canvas c, ILineDataSet dataSet) {
    method drawHorizontalBezier (line 131) | protected void drawHorizontalBezier(ILineDataSet dataSet) {
    method drawCubicBezier (line 184) | protected void drawCubicBezier(ILineDataSet dataSet) {
    method drawCubicFill (line 263) | protected void drawCubicFill(Canvas c, ILineDataSet dataSet, Path spli...
    method drawLinear (line 292) | protected void drawLinear(Canvas c, ILineDataSet dataSet) {
    method drawLinearFill (line 434) | protected void drawLinearFill(Canvas c, ILineDataSet dataSet, Transfor...
    method generateFilledPath (line 482) | private void generateFilledPath(final ILineDataSet dataSet, final int ...
    method drawValues (line 520) | @Override
    method drawExtras (line 591) | @Override
    method drawCircles (line 606) | protected void drawCircles(Canvas c) {
    method drawHighlighted (line 684) | @Override
    method setBitmapConfig (line 718) | public void setBitmapConfig(Bitmap.Config config) {
    method getBitmapConfig (line 728) | public Bitmap.Config getBitmapConfig() {
    method releaseBitmap (line 735) | public void releaseBitmap() {
    class DataSetImageCache (line 747) | private class DataSetImageCache {
      method init (line 759) | protected boolean init(ILineDataSet set) {
      method fill (line 782) | protected void fill(ILineDataSet set, boolean drawCircleHole, boolea...
      method getBitmap (line 841) | protected Bitmap getBitmap(int index) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineRadarRenderer.java
  class LineRadarRenderer (line 15) | public abstract class LineRadarRenderer extends LineScatterCandleRadarRe...
    method LineRadarRenderer (line 17) | public LineRadarRenderer(ChartAnimator animator, ViewPortHandler viewP...
    method drawFilledPath (line 28) | protected void drawFilledPath(Canvas c, Path filledPath, Drawable draw...
    method drawFilledPath (line 57) | protected void drawFilledPath(Canvas c, Path filledPath, int fillColor...
    method clipPathSupported (line 92) | private boolean clipPathSupported() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineScatterCandleRadarRenderer.java
  class LineScatterCandleRadarRenderer (line 13) | public abstract class LineScatterCandleRadarRenderer extends BarLineScat...
    method LineScatterCandleRadarRenderer (line 20) | public LineScatterCandleRadarRenderer(ChartAnimator animator, ViewPort...
    method drawHighlightLines (line 32) | protected void drawHighlightLines(Canvas c, float x, float y, ILineSca...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/PieChartRenderer.java
  class PieChartRenderer (line 36) | public class PieChartRenderer extends DataRenderer {
    method PieChartRenderer (line 71) | public PieChartRenderer(PieChart chart, ChartAnimator animator,
    method getPaintHole (line 102) | public Paint getPaintHole() {
    method getPaintTransparentCircle (line 106) | public Paint getPaintTransparentCircle() {
    method getPaintCenterText (line 110) | public TextPaint getPaintCenterText() {
    method getPaintEntryLabels (line 114) | public Paint getPaintEntryLabels() {
    method initBuffers (line 118) | @Override
    method drawData (line 123) | @Override
    method calculateMinimumRadiusForSpacedSlice (line 155) | protected float calculateMinimumRadiusForSpacedSlice(
    method getSliceSpace (line 201) | protected float getSliceSpace(IPieDataSet dataSet) {
    method drawDataSet (line 214) | protected void drawDataSet(Canvas c, IPieDataSet dataSet) {
    method drawValues (line 384) | @Override
    method drawEntryLabel (line 630) | protected void drawEntryLabel(Canvas c, String label, float x, float y) {
    method drawExtras (line 634) | @Override
    method drawHole (line 648) | protected void drawHole(Canvas c) {
    method drawCenterText (line 690) | protected void drawCenterText(Canvas c) {
    method drawHighlighted (line 759) | @Override
    method drawRoundedSlices (line 957) | protected void drawRoundedSlices(Canvas c) {
    method releaseBitmap (line 1007) | public void releaseBitmap() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RadarChartRenderer.java
  class RadarChartRenderer (line 21) | public class RadarChartRenderer extends LineRadarRenderer {
    method RadarChartRenderer (line 31) | public RadarChartRenderer(RadarChart chart, ChartAnimator animator,
    method getWebPaint (line 48) | public Paint getWebPaint() {
    method initBuffers (line 52) | @Override
    method drawData (line 58) | @Override
    method drawDataSet (line 81) | protected void drawDataSet(Canvas c, IRadarDataSet dataSet, int mostEn...
    method drawValues (line 150) | @Override
    method drawExtras (line 235) | @Override
    method drawWeb (line 240) | protected void drawWeb(Canvas c) {
    method drawHighlighted (line 299) | @Override
    method drawHighlightCircle (line 366) | public void drawHighlightCircle(Canvas c,

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/Renderer.java
  class Renderer (line 11) | public abstract class Renderer {
    method Renderer (line 18) | public Renderer(ViewPortHandler viewPortHandler) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java
  class ScatterChartRenderer (line 23) | public class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
    method ScatterChartRenderer (line 27) | public ScatterChartRenderer(ScatterDataProvider chart, ChartAnimator a...
    method initBuffers (line 32) | @Override
    method drawData (line 36) | @Override
    method drawDataSet (line 50) | protected void drawDataSet(Canvas c, IScatterDataSet dataSet) {
    method drawValues (line 92) | @Override
    method drawExtras (line 164) | @Override
    method drawHighlighted (line 168) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRenderer.java
  class XAxisRenderer (line 23) | public class XAxisRenderer extends AxisRenderer {
    method XAxisRenderer (line 27) | public XAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Tra...
    method setupGridPaint (line 37) | protected void setupGridPaint() {
    method computeAxis (line 43) | @Override
    method computeAxisValues (line 70) | @Override
    method computeSize (line 77) | protected void computeSize() {
    method renderAxisLabels (line 104) | @Override
    method renderAxisLine (line 148) | @Override
    method drawLabels (line 180) | protected void drawLabels(Canvas c, float pos, MPPointF anchor) {
    method drawLabel (line 232) | protected void drawLabel(Canvas c, String formattedLabel, float x, flo...
    method renderGridLines (line 239) | @Override
    method getGridClippingRect (line 275) | public RectF getGridClippingRect() {
    method drawGridLine (line 289) | protected void drawGridLine(Canvas c, float x, float y, Path gridLineP...
    method renderLimitLines (line 308) | @Override
    method renderLimitLineLine (line 347) | public void renderLimitLineLine(Canvas c, LimitLine limitLine, float[]...
    method renderLimitLineLabel (line 365) | public void renderLimitLineLabel(Canvas c, LimitLine limitLine, float[...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRendererHorizontalBarChart.java
  class XAxisRendererHorizontalBarChart (line 23) | public class XAxisRendererHorizontalBarChart extends XAxisRenderer {
    method XAxisRendererHorizontalBarChart (line 27) | public XAxisRendererHorizontalBarChart(ViewPortHandler viewPortHandler...
    method computeAxis (line 34) | @Override
    method computeSize (line 61) | @Override
    method renderAxisLabels (line 87) | @Override
    method drawLabels (line 133) | @Override
    method getGridClippingRect (line 165) | @Override
    method drawGridLine (line 172) | @Override
    method renderAxisLine (line 184) | @Override
    method renderLimitLines (line 217) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRendererRadarChart.java
  class XAxisRendererRadarChart (line 13) | public class XAxisRendererRadarChart extends XAxisRenderer {
    method XAxisRendererRadarChart (line 17) | public XAxisRendererRadarChart(ViewPortHandler viewPortHandler, XAxis ...
    method renderAxisLabels (line 23) | @Override
    method renderLimitLines (line 67) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRenderer.java
  class YAxisRenderer (line 21) | public class YAxisRenderer extends AxisRenderer {
    method YAxisRenderer (line 27) | public YAxisRenderer(ViewPortHandler viewPortHandler, YAxis yAxis, Tra...
    method renderAxisLabels (line 47) | @Override
    method renderAxisLine (line 91) | @Override
    method drawYLabels (line 115) | protected void drawYLabels(Canvas c, float fixedPosition, float[] posi...
    method renderGridLines (line 133) | @Override
    method getGridClippingRect (line 171) | public RectF getGridClippingRect() {
    method linePath (line 185) | protected Path linePath(Path p, int i, float[] positions) {
    method getTransformedPositions (line 201) | protected float[] getTransformedPositions() {
    method drawZeroLine (line 223) | protected void drawZeroLine(Canvas c) {
    method renderLimitLines (line 257) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRendererHorizontalBarChart.java
  class YAxisRendererHorizontalBarChart (line 21) | public class YAxisRendererHorizontalBarChart extends YAxisRenderer {
    method YAxisRendererHorizontalBarChart (line 23) | public YAxisRendererHorizontalBarChart(ViewPortHandler viewPortHandler...
    method computeAxis (line 36) | @Override
    method renderAxisLabels (line 66) | @Override
    method renderAxisLine (line 107) | @Override
    method drawYLabels (line 133) | @Override
    method getTransformedPositions (line 153) | @Override
    method getGridClippingRect (line 170) | @Override
    method linePath (line 177) | @Override
    method drawZeroLine (line 188) | @Override
    method renderLimitLines (line 222) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRendererRadarChart.java
  class YAxisRendererRadarChart (line 16) | public class YAxisRendererRadarChart extends YAxisRenderer {
    method YAxisRendererRadarChart (line 20) | public YAxisRendererRadarChart(ViewPortHandler viewPortHandler, YAxis ...
    method computeAxisValues (line 26) | @Override
    method renderAxisLabels (line 145) | @Override
    method renderLimitLines (line 179) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java
  class ChevronDownShapeRenderer (line 14) | public class ChevronDownShapeRenderer implements IShapeRenderer
    method renderShape (line 18) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java
  class ChevronUpShapeRenderer (line 14) | public class ChevronUpShapeRenderer implements IShapeRenderer
    method renderShape (line 18) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java
  class CircleShapeRenderer (line 15) | public class CircleShapeRenderer implements IShapeRenderer
    method renderShape (line 18) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java
  class CrossShapeRenderer (line 14) | public class CrossShapeRenderer implements IShapeRenderer
    method renderShape (line 18) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java
  type IShapeRenderer (line 13) | public interface IShapeRenderer
    method renderShape (line 26) | void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler vi...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java
  class SquareShapeRenderer (line 15) | public class SquareShapeRenderer implements IShapeRenderer
    method renderShape (line 19) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java
  class TriangleShapeRenderer (line 16) | public class TriangleShapeRenderer implements IShapeRenderer
    method renderShape (line 21) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java
  class XShapeRenderer (line 14) | public class XShapeRenderer implements IShapeRenderer
    method renderShape (line 18) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/ColorTemplate.java
  class ColorTemplate (line 17) | public class ColorTemplate {
    method rgb (line 64) | public static int rgb(String hex) {
    method getHoloBlue (line 77) | public static int getHoloBlue() {
    method colorWithAlpha (line 88) | public static int colorWithAlpha(int color, int alpha) {
    method createColors (line 100) | public static List<Integer> createColors(Resources r, int[] colors) {
    method createColors (line 118) | public static List<Integer> createColors(int[] colors) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/EntryXComparator.java
  class EntryXComparator (line 11) | public class EntryXComparator implements Comparator<Entry> {
    method compare (line 12) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/FSize.java
  class FSize (line 10) | public final class FSize extends ObjectPool.Poolable{
    method instantiate (line 25) | protected ObjectPool.Poolable instantiate(){
    method getInstance (line 29) | public static FSize getInstance(final float width, final float height){
    method recycleInstance (line 36) | public static void recycleInstance(FSize instance){
    method recycleInstances (line 40) | public static void recycleInstances(List<FSize> instances){
    method FSize (line 44) | public FSize() {
    method FSize (line 47) | public FSize(final float width, final float height) {
    method equals (line 52) | @Override
    method toString (line 67) | @Override
    method hashCode (line 75) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/FileUtils.java
  class FileUtils (line 27) | public class FileUtils {
    method loadEntriesFromFile (line 37) | public static List<Entry> loadEntriesFromFile(String path) {
    method loadEntriesFromAssets (line 109) | public static List<Entry> loadEntriesFromAssets(AssetManager am, Strin...
    method saveToSdCard (line 197) | public static void saveToSdCard(List<Entry> entries, String path) {
    method loadBarEntriesFromAssets (line 230) | public static List<BarEntry> loadBarEntriesFromAssets(AssetManager am,...

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/HorizontalViewPortHandler.java
  class HorizontalViewPortHandler (line 7) | public class HorizontalViewPortHandler extends ViewPortHandler {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/MPPointD.java
  class MPPointD (line 11) | public class MPPointD extends ObjectPool.Poolable {
    method getInstance (line 20) | public static MPPointD getInstance(double x, double y){
    method recycleInstance (line 27) | public static void recycleInstance(MPPointD instance){
    method recycleInstances (line 31) | public static void recycleInstances(List<MPPointD> instances){
    method instantiate (line 38) | protected ObjectPool.Poolable instantiate(){
    method MPPointD (line 42) | private MPPointD(double x, double y) {
    method toString (line 50) | public String toString() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/MPPointF.java
  class MPPointF (line 11) | public class MPPointF extends ObjectPool.Poolable {
    method MPPointF (line 23) | public MPPointF() {
    method MPPointF (line 26) | public MPPointF(float x, float y) {
    method getInstance (line 31) | public static MPPointF getInstance(float x, float y) {
    method getInstance (line 38) | public static MPPointF getInstance() {
    method getInstance (line 42) | public static MPPointF getInstance(MPPointF copy) {
    method recycleInstance (line 49) | public static void recycleInstance(MPPointF instance){
    method recycleInstances (line 53) | public static void recycleInstances(List<MPPointF> instances){
    method createFromParcel (line 61) | public MPPointF createFromParcel(Parcel in) {
    method newArray (line 70) | public MPPointF[] newArray(int size) {
    method my_readFromParcel (line 82) | public void my_readFromParcel(Parcel in) {
    method getX (line 87) | public float getX(){
    method getY (line 91) | public float getY(){
    method instantiate (line 95) | @Override

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java
  class ObjectPool (line 18) | public class ObjectPool<T extends ObjectPool.Poolable> {
    method getPoolId (line 35) | public int getPoolId(){
    method create (line 46) | public static synchronized ObjectPool create(int withCapacity, Poolabl...
    method ObjectPool (line 54) | private ObjectPool(int withCapacity, T object){
    method setReplenishPercentage (line 72) | public void setReplenishPercentage(float percentage){
    method getReplenishPercentage (line 83) | public float getReplenishPercentage(){
    method refillPool (line 87) | private void refillPool(){
    method refillPool (line 91) | private void refillPool(float percentage){
    method get (line 113) | public synchronized T get(){
    method recycle (line 132) | public synchronized void recycle(T object){
    method recycle (line 157) | public synchronized void recycle(List<T> objects){
    method resizePool (line 179) | private void resizePool() {
    method getPoolCapacity (line 196) | public int getPoolCapacity(){
    method getPoolCount (line 205) | public int getPoolCount(){
    class Poolable (line 210) | public static abstract class Poolable{
      method instantiate (line 215) | protected abstract Poolable instantiate();

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/Transformer.java
  class Transformer (line 23) | public class Transformer {
    method Transformer (line 37) | public Transformer(ViewPortHandler viewPortHandler) {
    method prepareMatrixValuePx (line 50) | public void prepareMatrixValuePx(float xChartMin, float deltaX, float ...
    method prepareMatrixOffset (line 73) | public void prepareMatrixOffset(boolean inverted) {
    method generateTransformedValuesScatter (line 98) | public float[] generateTransformedValuesScatter(IScatterDataSet data, ...
    method generateTransformedValuesBubble (line 135) | public float[] generateTransformedValuesBubble(IBubbleDataSet data, fl...
    method generateTransformedValuesLine (line 171) | public float[] generateTransformedValuesLine(ILineDataSet data,
    method generateTransformedValuesCandle (line 209) | public float[] generateTransformedValuesCandle(ICandleDataSet data,
    method pathValueToPixel (line 243) | public void pathValueToPixel(Path path) {
    method pathValuesToPixel (line 255) | public void pathValuesToPixel(List<Path> paths) {
    method pointValuesToPixel (line 268) | public void pointValuesToPixel(float[] pts) {
    method rectValueToPixel (line 280) | public void rectValueToPixel(RectF r) {
    method rectToPixelPhase (line 293) | public void rectToPixelPhase(RectF r, float phaseY) {
    method rectToPixelPhaseHorizontal (line 304) | public void rectToPixelPhaseHorizontal(RectF r, float phaseY) {
    method rectValueToPixelHorizontal (line 320) | public void rectValueToPixelHorizontal(RectF r) {
    method rectValueToPixelHorizontal (line 333) | public void rectValueToPixelHorizontal(RectF r, float phaseY) {
    method rectValuesToPixel (line 349) | public void rectValuesToPixel(List<RectF> rects) {
    method pixelsToValue (line 365) | public void pixelsToValue(float[] pixels) {
    method getValuesByTouchPoint (line 397) | public MPPointD getValuesByTouchPoint(float x, float y) {
    method getValuesByTouchPoint (line 404) | public void getValuesByTouchPoint(float x, float y, MPPointD outputPoi...
    method getPixelForValues (line 423) | public MPPointD getPixelForValues(float x, float y) {
    method getValueMatrix (line 436) | public Matrix getValueMatrix() {
    method getOffsetMatrix (line 440) | public Matrix getOffsetMatrix() {
    method getValueToPixelMatrix (line 446) | public Matrix getValueToPixelMatrix() {
    method getPixelToValueMatrix (line 455) | public Matrix getPixelToValueMatrix() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/TransformerHorizontalBarChart.java
  class TransformerHorizontalBarChart (line 9) | public class TransformerHorizontalBarChart extends Transformer {
    method TransformerHorizontalBarChart (line 11) | public TransformerHorizontalBarChart(ViewPortHandler viewPortHandler) {
    method prepareMatrixOffset (line 20) | public void prepareMatrixOffset(boolean inverted) {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/Utils.java
  class Utils (line 37) | public abstract class Utils {
    method init (line 56) | @SuppressWarnings("deprecation")
    method init (line 84) | @Deprecated
    method convertDpToPixel (line 104) | public static float convertDpToPixel(float dp) {
    method convertPixelsToDp (line 125) | public static float convertPixelsToDp(float px) {
    method calcTextWidth (line 147) | public static int calcTextWidth(Paint paint, String demoText) {
    method calcTextHeight (line 160) | public static int calcTextHeight(Paint paint, String demoText) {
    method calcTextWandH (line 174) | public static int[] calcTextWandH(Paint paint,String demoText){
    method getLineHeight (line 182) | public static float getLineHeight(Paint paint) {
    method getLineHeight (line 186) | public static float getLineHeight(Paint paint, Paint.FontMetrics fontM...
    method getLineSpacing (line 191) | public static float getLineSpacing(Paint paint) {
    method getLineSpacing (line 195) | public static float getLineSpacing(Paint paint, Paint.FontMetrics font...
    method calcTextSize (line 209) | public static FSize calcTextSize(Paint paint, String demoText) {
    method calcTextSize (line 225) | public static void calcTextSize(Paint paint, String demoText, FSize ou...
    method generateDefaultValueFormatter (line 246) | private static IValueFormatter generateDefaultValueFormatter() {
    method getDefaultValueFormatter (line 252) | public static IValueFormatter getDefaultValueFormatter()
    method formatNumber (line 267) | public static String formatNumber(float number, int digitCount, boolea...
    method formatNumber (line 281) | public static String formatNumber(float number, int digitCount, boolea...
    method roundToNextSignificant (line 367) | public static float roundToNextSignificant(double number) {
    method getDecimals (line 387) | public static int getDecimals(float number) {
    method convertIntegers (line 403) | public static int[] convertIntegers(List<Integer> integers) {
    method copyIntegers (line 412) | public static void copyIntegers(List<Integer> from, int[] to){
    method convertStrings (line 425) | public static String[] convertStrings(List<String> strings) {
    method copyStrings (line 436) | public static void copyStrings(List<String> from, String[] to){
    method nextUp (line 450) | public static double nextUp(double d) {
    method getPosition (line 470) | public static MPPointF getPosition(MPPointF center, float dist, float ...
    method getPosition (line 477) | public static void getPosition(MPPointF center, float dist, float angl...
    method velocityTrackerPointerUpCleanUpIfNecessary (line 482) | public static void velocityTrackerPointerUpCleanUpIfNecessary(MotionEv...
    method postInvalidateOnAnimation (line 514) | @SuppressLint("NewApi")
    method getMinimumFlingVelocity (line 522) | public static int getMinimumFlingVelocity() {
    method getMaximumFlingVelocity (line 526) | public static int getMaximumFlingVelocity() {
    method getNormalizedAngle (line 533) | public static float getNormalizedAngle(float angle) {
    method drawImage (line 542) | public static void drawImage(Canvas canvas,
    method drawXAxisValue (line 568) | public static void drawXAxisValue(Canvas c, String text, float x, floa...
    method drawMultilineText (line 634) | public static void drawMultilineText(Canvas c, StaticLayout textLayout,
    method drawMultilineText (line 711) | public static void drawMultilineText(Canvas c, String text,
    method getSizeOfRotatedRectangleByDegrees (line 735) | public static FSize getSizeOfRotatedRectangleByDegrees(FSize rectangle...
    method getSizeOfRotatedRectangleByRadians (line 749) | public static FSize getSizeOfRotatedRectangleByRadians(FSize rectangle...
    method getSizeOfRotatedRectangleByDegrees (line 763) | public static FSize getSizeOfRotatedRectangleByDegrees(float rectangle...
    method getSizeOfRotatedRectangleByRadians (line 778) | public static FSize getSizeOfRotatedRectangleByRadians(float rectangle...
    method getSDKInt (line 788) | public static int getSDKInt() {

FILE: MPChartLib/src/main/java/com/github/mikephil/charting/utils/ViewPortHandler.java
  class ViewPortHandler (line 14) | public class ViewPortHandler {
    method ViewPortHandler (line 82) | public ViewPortHandler() {
    method setChartDimens (line 93) | public void setChartDimens(float width, float height) {
    method hasChartDimens (line 106) | public boolean hasChartDimens() {
    method restrainViewPort (line 113) | public void restrainViewPort(float offsetLeft, float offsetTop, float ...
    method offsetLeft (line 119) | public float offsetLeft() {
    method offsetRight (line 123) | public float offsetRight() {
    method offsetTop (line 127) | public float offsetTop() {
    method offsetBottom (line 131) | public float offsetBottom() {
    method contentTop (line 135) | public float contentTop() {
    method contentLeft (line 139) | public float contentLeft() {
    method contentRight (line 143) | public float contentRight() {
    method contentBottom (line 147) | public float contentBottom() {
    method contentWidth (line 151) | public float contentWidth() {
    method contentHeight (line 155) | public float contentHeight() {
    method getContentRect (line 159) | public RectF getContentRect() {
    method getContentCenter (line 163) | public MPPointF getContentCenter() {
    method getChartHeight (line 167) | public float getChartHeight() {
    method getChartWidth (line 171) | public float getChartWidth() {
    method getSmallestContentExtension (line 180) | public float getSmallestContentExtension() {
    method zoomIn (line 196) | public Matrix zoomIn(float x, float y) {
    method zoomIn (line 203) | public void zoomIn(float x, float y, Matrix outputMatrix) {
    method zoomOut (line 213) | public Matrix zoomOut(float x, float y) {
    method zoomOut (line 220) | public void zoomOut(float x, float y, Matrix outputMatrix) {
    method resetZoom (line 230) | public void resetZoom(Matrix outputMatrix) {
    method zoom (line 243) | public Matrix zoom(float scaleX, float scaleY) {
    method zoom (line 250) | public void zoom(float scaleX, float scaleY, Matrix outputMatrix) {
    method zoom (line 265) | public Matrix zoom(float scaleX, float scaleY, float x, float y) {
    method zoom (line 272) | public void zoom(float scaleX, float scaleY, float x, float y, Matrix ...
    method setZoom (line 285) | public Matrix setZoom(float scaleX, float scaleY) {
    method setZoom (line 292) | public void setZoom(float scaleX, float scaleY, Matrix outputMatrix) {
    method setZoom (line 307) | public Matrix setZoom(float scaleX, float scaleY, float x, float y) {
    method fitScreen (line 323) | public Matrix fitScreen() {
    method fitScreen (line 334) | public void fitScreen(Matrix outputMatrix) {
    method translate (line 362) | public Matrix translate(final float[] transformedPts) {
    method translate (line 375) | public void translate(final float[] transformedPts, Matrix outputMatri...
    method centerViewPort (line 395) | public void centerViewPort(final float[] transformedPts, final View vi...
    method refresh (line 420) | public Matrix refresh(Matrix newMatrix, View chart, boolean invalidate) {
    method limitTransAndScale (line 439) | public void limitTransAndScale(Matrix matrix, RectF content) {
    method setMinimumScaleX (line 483) | public void setMinimumScaleX(float xScale) {
    method setMaximumScaleX (line 498) | public void setMaximumScaleX(float xScale) {
    method setMinMaxScaleX (line 514) | public void setMinMaxScaleX(float minScaleX, float maxScaleX) {
    method setMinimumScaleY (line 534) | public void setMinimumScaleY(float yScale) {
    method setMaximumScaleY (line 549) | public void setMaximumScaleY(float yScale) {
    method setMinMaxScaleY (line 559) | public void setMinMaxScaleY(float minScaleY, float maxScaleY) {
    method getMatrixTouch (line 578) | public Matrix getMatrixTouch() {
    method isInBoundsX (line 589) | public boolean isInBoundsX(float x) {
    method isInBoundsY (line 593) | public boolean isInBoundsY(float y) {
    method isInBounds (line 597) | public boolean isInBounds(float x, float y) {
    method isInBoundsLeft (line 601) | public boolean isInBoundsLeft(float x) {
    method isInBoundsRight (line 605) | public boolean isInBoundsRight(float x) {
    method isInBoundsTop (line 610) | public boolean isInBoundsTop(float y) {
    method isInBoundsBottom (line 614) | public boolean isInBoundsBottom(float y) {
    method getScaleX (line 622) | public float getScaleX() {
    method getScaleY (line 629) | public float getScaleY() {
    method getMinScaleX (line 633) | public float getMinScaleX() {
    method getMaxScaleX (line 637) | public float getMaxScaleX() {
    method getMinScaleY (line 641) | public float getMinScaleY() {
    method getMaxScaleY (line 645) | public float getMaxScaleY() {
    method getTransX (line 654) | public float getTransX() {
    method getTransY (line 663) | public float getTransY() {
    method isFullyZoomedOut (line 672) | public boolean isFullyZoomedOut() {
    method isFullyZoomedOutY (line 682) | public boolean isFullyZoomedOutY() {
    method isFullyZoomedOutX (line 692) | public boolean isFullyZoomedOutX() {
    method setDragOffsetX (line 702) | public void setDragOffsetX(float offset) {
    method setDragOffsetY (line 712) | public void setDragOffsetY(float offset) {
    method hasNoDragOffset (line 721) | public boolean hasNoDragOffset() {
    method canZoomOutMoreX (line 730) | public boolean canZoomOutMoreX() {
    method canZoomInMoreX (line 739) | public boolean canZoomInMoreX() {
    method canZoomOutMoreY (line 748) | public boolean canZoomOutMoreY() {
    method canZoomInMoreY (line 757) | public boolean canZoomInMoreY() {

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/ApproximatorTest.java
  class ApproximatorTest (line 16) | public class ApproximatorTest {
    method testApproximation (line 18) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/AxisRendererTest.java
  class AxisRendererTest (line 14) | public class AxisRendererTest {
    method testComputeAxisValues (line 17) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/BarDataTest.java
  class BarDataTest (line 17) | public class BarDataTest {
    method testGroupBars (line 19) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/ChartDataTest.java
  class ChartDataTest (line 22) | public class ChartDataTest {
    method testDynamicChartData (line 24) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/DataSetTest.java
  class DataSetTest (line 19) | public class DataSetTest {
    method testCalcMinMax (line 21) | @Test
    method testAddRemoveEntry (line 58) | @Test
    method testGetEntryForXValue (line 143) | @Test
    method testGetEntryForXValueWithDuplicates (line 182) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/LargeValueFormatterTest.java
  class LargeValueFormatterTest (line 12) | public class LargeValueFormatterTest {
    method test (line 14) | @Test

FILE: MPChartLib/src/test/java/com/github/mikephil/charting/test/ObjectPoolTest.java
  class ObjectPoolTest (line 15) | public class ObjectPoolTest {
    class TestPoolable (line 17) | static class TestPoolable extends ObjectPool.Poolable{
      method instantiate (line 28) | protected ObjectPool.Poolable instantiate(){
      method TestPoolable (line 32) | private TestPoolable(int foo, int bar){
      method getInstance (line 37) | public static TestPoolable getInstance(int foo, int bar){
      method recycleInstance (line 44) | public static void recycleInstance(TestPoolable instance){
      method recycleInstances (line 48) | public static void recycleInstances(List<TestPoolable> instances){
      method getPool (line 52) | public static ObjectPool getPool(){
    method testObjectPool (line 58) | @Test
Condensed preview — 260 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,955K chars).
[
  {
    "path": ".gitignore",
    "chars": 118,
    "preview": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
  },
  {
    "path": ".idea/gradle.xml",
    "chars": 736,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linke"
  },
  {
    "path": ".idea/markdown-navigator/profiles_settings.xml",
    "chars": 104,
    "preview": "<component name=\"MarkdownNavigator.ProfileManager\">\n  <settings default=\"\" pdf-export=\"\" />\n</component>"
  },
  {
    "path": ".idea/markdown-navigator.xml",
    "chars": 4719,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"MarkdownProjectSettings\" wasCopied=\"fals"
  },
  {
    "path": ".idea/misc.xml",
    "chars": 1611,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"NullableNotNullManager\">\n    <option nam"
  },
  {
    "path": ".idea/modules.xml",
    "chars": 603,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n   "
  },
  {
    "path": ".idea/runConfigurations.xml",
    "chars": 564,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <o"
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 180,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": "MPChartLib/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "MPChartLib/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs",
    "chars": 216,
    "preview": "#org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences\n#Mon Jan 18 23:02:46 CET 2016\norg.springs"
  },
  {
    "path": "MPChartLib/build.gradle",
    "chars": 710,
    "preview": "apply plugin: 'com.android.library'\napply plugin: 'com.github.dcendents.android-maven'\n//apply plugin: 'realm-android'\n\n"
  },
  {
    "path": "MPChartLib/pom.xml",
    "chars": 3345,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n Copyright (c) 2014 Philipp Jahoda <philjay.librarysup@gmail.com>\n\n Licensed"
  },
  {
    "path": "MPChartLib/proguard-project.txt",
    "chars": 781,
    "preview": "# To enable ProGuard in your project, edit project.properties\n# to define the proguard.config property as described in t"
  },
  {
    "path": "MPChartLib/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "MPChartLib/src/main/AndroidManifest.xml",
    "chars": 390,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"com.github.mikephil.charting\">\n\n <!--  <uses-permission androi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/animation/ChartAnimator.java",
    "chars": 9800,
    "preview": "\npackage com.github.mikephil.charting.animation;\n\nimport android.animation.ObjectAnimator;\nimport android.animation.Valu"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/animation/Easing.java",
    "chars": 27611,
    "preview": "\npackage com.github.mikephil.charting.animation;\n\n/**\n * Easing options.\n * \n * @author Daniel Cohen Gindi\n */\npublic cl"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/animation/EasingFunction.java",
    "chars": 398,
    "preview": "package com.github.mikephil.charting.animation;\n\nimport android.animation.TimeInterpolator;\nimport android.annotation.Su"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.java",
    "chars": 2014,
    "preview": "\npackage com.github.mikephil.charting.buffer;\n\nimport java.util.List;\n\n/**\n * Buffer class to boost performance while dr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.java",
    "chars": 3859,
    "preview": "\npackage com.github.mikephil.charting.buffer;\n\nimport com.github.mikephil.charting.data.BarEntry;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.java",
    "chars": 2803,
    "preview": "\npackage com.github.mikephil.charting.buffer;\n\nimport com.github.mikephil.charting.data.BarEntry;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarChart.java",
    "chars": 8132,
    "preview": "package com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.graphics.RectF;\nimport andr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/BarLineChartBase.java",
    "chars": 50703,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.annotation.SuppressLint;\nimport android.annotation.TargetA"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/BubbleChart.java",
    "chars": 1222,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/CandleStickChart.java",
    "chars": 1149,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/Chart.java",
    "chars": 51898,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.animation.ValueAnimator;\nimport android.animation.ValueAni"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/CombinedChart.java",
    "chars": 6346,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/HorizontalBarChart.java",
    "chars": 9058,
    "preview": "package com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.graphics.RectF;\nimport andr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/LineChart.java",
    "chars": 1320,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieChart.java",
    "chars": 19061,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport an"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieRadarChartBase.java",
    "chars": 15993,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.animation.ObjectAnimator;\nimport android.animation.ValueAn"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/RadarChart.java",
    "chars": 9550,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport an"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/charts/ScatterChart.java",
    "chars": 2058,
    "preview": "\npackage com.github.mikephil.charting.charts;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/AxisBase.java",
    "chars": 20387,
    "preview": "\npackage com.github.mikephil.charting.components;\n\nimport android.graphics.Color;\nimport android.graphics.DashPathEffect"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/ComponentBase.java",
    "chars": 3841,
    "preview": "\npackage com.github.mikephil.charting.components;\n\nimport android.graphics.Color;\nimport android.graphics.Typeface;\n\nimp"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/Description.java",
    "chars": 2081,
    "preview": "package com.github.mikephil.charting.components;\n\nimport android.graphics.Paint;\n\nimport com.github.mikephil.charting.ut"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/IMarker.java",
    "chars": 1994,
    "preview": "package com.github.mikephil.charting.components;\n\nimport android.graphics.Canvas;\n\nimport com.github.mikephil.charting.d"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/Legend.java",
    "chars": 32474,
    "preview": "\npackage com.github.mikephil.charting.components;\n\nimport android.graphics.DashPathEffect;\nimport android.graphics.Paint"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/LegendEntry.java",
    "chars": 2185,
    "preview": "package com.github.mikephil.charting.components;\n\n\nimport android.graphics.DashPathEffect;\n\nimport com.github.mikephil.c"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/LimitLine.java",
    "chars": 6188,
    "preview": "\npackage com.github.mikephil.charting.components;\n\nimport android.graphics.Color;\nimport android.graphics.DashPathEffect"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/MarkerImage.java",
    "chars": 4619,
    "preview": "package com.github.mikephil.charting.components;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/MarkerView.java",
    "chars": 3850,
    "preview": "package com.github.mikephil.charting.components;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/XAxis.java",
    "chars": 3126,
    "preview": "\npackage com.github.mikephil.charting.components;\n\nimport com.github.mikephil.charting.utils.Utils;\n\n/**\n * Class repres"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/components/YAxis.java",
    "chars": 9629,
    "preview": "package com.github.mikephil.charting.components;\n\nimport android.graphics.Color;\nimport android.graphics.Paint;\n\nimport "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BarData.java",
    "chars": 3465,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IBarDataSet;\n\nimpor"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BarDataSet.java",
    "chars": 6352,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.Color;\n\nimport com.github.mikephil.charting.interfa"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BarEntry.java",
    "chars": 7026,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.drawable.Dra"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BarLineScatterCandleBubbleData.java",
    "chars": 657,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IBarLineScatterCand"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BarLineScatterCandleBubbleDataSet.java",
    "chars": 1117,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.Color;\n\nimport com.github.mikephil.charting.interfa"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BaseDataSet.java",
    "chars": 11823,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport androi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BaseEntry.java",
    "chars": 1761,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.graphics.drawable.Drawable;\n\n/**\n * Created by Philipp Jahoda"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleData.java",
    "chars": 802,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IBubbleDataSet;\n\nim"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleDataSet.java",
    "chars": 1711,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IBubbleDataSet;\nimp"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/BubbleEntry.java",
    "chars": 2221,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.drawable.Dr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleData.java",
    "chars": 473,
    "preview": "package com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.ICandleDataSet;\n\nimp"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleDataSet.java",
    "chars": 7022,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.Paint;\n\nimport com.github.mikephil.charting.interfa"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/CandleEntry.java",
    "chars": 4524,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.drawable.Dr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/ChartData.java",
    "chars": 20698,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.Typeface;\nimport android.util.Log;\n\nimport com.gith"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/CombinedData.java",
    "chars": 6687,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.util.Log;\n\nimport com.github.mikephil.charting.highlight.Hig"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/DataSet.java",
    "chars": 10672,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * The DataSet clas"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/Entry.java",
    "chars": 4259,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.drawable.Drawable;\nimport android.os.Parcel;\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/LineData.java",
    "chars": 567,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.ILineDataSet;\n\nimpo"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/LineDataSet.java",
    "chars": 10933,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport andro"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/LineRadarDataSet.java",
    "chars": 2838,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.annotation.TargetApi;\nimport android.graphics.Color;\nimport "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/LineScatterCandleRadarDataSet.java",
    "chars": 3877,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.graphics.DashPathEffect;\n\nimport com.github.mikephil.charting"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/PieData.java",
    "chars": 2249,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.highlight.Highlight;\nimport com.github."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/PieDataSet.java",
    "chars": 5667,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IPieDataSet;\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/PieEntry.java",
    "chars": 1890,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.drawable.Dra"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarData.java",
    "chars": 1356,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.highlight.Highlight;\nimport com.github."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarDataSet.java",
    "chars": 3622,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport android.graphics.Color;\n\nimport com.github.mikephil.charting.interfa"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/RadarEntry.java",
    "chars": 828,
    "preview": "package com.github.mikephil.charting.data;\n\nimport android.annotation.SuppressLint;\n\n/**\n * Created by philipp on 13/06/"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/ScatterData.java",
    "chars": 814,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;\n\ni"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/ScatterDataSet.java",
    "chars": 5175,
    "preview": "\npackage com.github.mikephil.charting.data;\n\nimport com.github.mikephil.charting.charts.ScatterChart;\nimport com.github."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/data/filter/Approximator.java",
    "chars": 2669,
    "preview": "\npackage com.github.mikephil.charting.data.filter;\n\nimport android.annotation.TargetApi;\nimport android.os.Build;\n\nimpor"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/exception/DrawingDataSetNotCreatedException.java",
    "chars": 356,
    "preview": "package com.github.mikephil.charting.exception;\n\npublic class DrawingDataSetNotCreatedException extends RuntimeException"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/ColorFormatter.java",
    "chars": 747,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.data.DataSet;\nimport com.github.mik"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultAxisValueFormatter.java",
    "chars": 1301,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.components.AxisBase;\n\nimport java.t"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultFillFormatter.java",
    "chars": 1179,
    "preview": "package com.github.mikephil.charting.formatter;\n\n\nimport com.github.mikephil.charting.data.LineData;\nimport com.github.m"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/DefaultValueFormatter.java",
    "chars": 1694,
    "preview": "\npackage com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IAxisValueFormatter.java",
    "chars": 681,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.components.AxisBase;\n\n/**\n * Create"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IFillFormatter.java",
    "chars": 757,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.interfaces.datasets.ILineDataSet;\ni"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IValueFormatter.java",
    "chars": 1258,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.github.mikep"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/IndexAxisValueFormatter.java",
    "chars": 1702,
    "preview": "\npackage com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.components.AxisBase;\nimport com.gi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/LargeValueFormatter.java",
    "chars": 2908,
    "preview": "\npackage com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.components.AxisBase;\nimport com.gi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/PercentFormatter.java",
    "chars": 1214,
    "preview": "\npackage com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.components.AxisBase;\nimport com.gi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/formatter/StackedValueFormatter.java",
    "chars": 2300,
    "preview": "package com.github.mikephil.charting.formatter;\n\nimport com.github.mikephil.charting.data.BarEntry;\nimport com.github.mi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/BarHighlighter.java",
    "chars": 4506,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.data.BarData;\nimport com.github.mik"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/ChartHighlighter.java",
    "chars": 7535,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.components.YAxis;\nimport com.github"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/CombinedHighlighter.java",
    "chars": 3073,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.data.BarData;\nimport com.github.mik"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/Highlight.java",
    "chars": 5563,
    "preview": "\npackage com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.components.YAxis;\n\n/**\n * Contains"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/HorizontalBarHighlighter.java",
    "chars": 2236,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.data.BarData;\nimport com.github.mik"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/IHighlighter.java",
    "chars": 341,
    "preview": "package com.github.mikephil.charting.highlight;\n\n/**\n * Created by philipp on 10/06/16.\n */\npublic interface IHighlighte"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/PieHighlighter.java",
    "chars": 704,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.charts.PieChart;\nimport com.github."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/PieRadarHighlighter.java",
    "chars": 1756,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.charts.PieChart;\nimport com.github."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/RadarHighlighter.java",
    "chars": 2547,
    "preview": "package com.github.mikephil.charting.highlight;\n\nimport com.github.mikephil.charting.charts.RadarChart;\nimport com.githu"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/highlight/Range.java",
    "chars": 791,
    "preview": "package com.github.mikephil.charting.highlight;\n\n/**\n * Created by Philipp Jahoda on 24/07/15. Class that represents the"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarDataProvider.java",
    "chars": 346,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.data.BarData;\n\npublic"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.java",
    "chars": 558,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.components.YAxis.Axis"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/BubbleDataProvider.java",
    "chars": 237,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.data.BubbleData;\n\npub"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/CandleDataProvider.java",
    "chars": 237,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.data.CandleData;\n\npub"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/ChartInterface.java",
    "chars": 1503,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport android.graphics.RectF;\n\nimport com.github.mikephi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/CombinedDataProvider.java",
    "chars": 344,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.data.CombinedData;\n\n/"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/LineDataProvider.java",
    "chars": 336,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.components.YAxis;\nimp"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/dataprovider/ScatterDataProvider.java",
    "chars": 241,
    "preview": "package com.github.mikephil.charting.interfaces.dataprovider;\n\nimport com.github.mikephil.charting.data.ScatterData;\n\npu"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBarDataSet.java",
    "chars": 1540,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.BarEntry;\n\n/**\n * Cr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBarLineScatterCandleBubbleDataSet.java",
    "chars": 388,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.Entry;\n\n/**\n * Creat"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IBubbleDataSet.java",
    "chars": 643,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.BubbleEntry;\n\n/**\n *"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ICandleDataSet.java",
    "chars": 1623,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport android.graphics.Paint;\n\nimport com.github.mikephil.ch"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IDataSet.java",
    "chars": 13382,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport android.graphics.DashPathEffect;\nimport android.graphi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineDataSet.java",
    "chars": 2341,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport android.graphics.DashPathEffect;\n\nimport com.github.mi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineRadarDataSet.java",
    "chars": 1456,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport android.graphics.drawable.Drawable;\n\nimport com.github"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/ILineScatterCandleRadarDataSet.java",
    "chars": 957,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport android.graphics.DashPathEffect;\n\nimport com.github.mi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IPieDataSet.java",
    "chars": 1819,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.gi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IRadarDataSet.java",
    "chars": 840,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.RadarEntry;\n\n/**\n * "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/interfaces/datasets/IScatterDataSet.java",
    "chars": 830,
    "preview": "package com.github.mikephil.charting.interfaces.datasets;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.gi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java",
    "chars": 2112,
    "preview": "package com.github.mikephil.charting.jobs;\n\nimport android.animation.ValueAnimator;\nimport android.annotation.SuppressLi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedViewPortJob.java",
    "chars": 2449,
    "preview": "package com.github.mikephil.charting.jobs;\n\nimport android.animation.Animator;\nimport android.animation.ObjectAnimator;\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedZoomJob.java",
    "chars": 3871,
    "preview": "package com.github.mikephil.charting.jobs;\n\nimport android.animation.Animator;\nimport android.animation.ValueAnimator;\ni"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java",
    "chars": 1556,
    "preview": "\npackage com.github.mikephil.charting.jobs;\n\nimport android.view.View;\n\nimport com.github.mikephil.charting.utils.Object"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ViewPortJob.java",
    "chars": 1362,
    "preview": "\npackage com.github.mikephil.charting.jobs;\n\nimport android.view.View;\n\nimport com.github.mikephil.charting.utils.Object"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java",
    "chars": 2752,
    "preview": "\npackage com.github.mikephil.charting.jobs;\n\nimport android.graphics.Matrix;\nimport android.view.View;\n\nimport com.githu"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/BarLineChartTouchListener.java",
    "chars": 22525,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.Matrix;\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/ChartTouchListener.java",
    "chars": 3560,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport android.view.GestureDetector;\nimport android.view.MotionEvent;\nim"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnChartGestureListener.java",
    "chars": 1962,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport android.view.MotionEvent;\n\n/**\n * Listener for callbacks when doi"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnChartValueSelectedListener.java",
    "chars": 772,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.github.mikeph"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnDrawLineChartTouchListener.java",
    "chars": 401,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport android.view.GestureDetector.SimpleOnGestureListener;\nimport andr"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/OnDrawListener.java",
    "chars": 881,
    "preview": "package com.github.mikephil.charting.listener;\n\nimport com.github.mikephil.charting.data.DataSet;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/listener/PieRadarChartTouchListener.java",
    "chars": 8823,
    "preview": "\npackage com.github.mikephil.charting.listener;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.PointF;"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/matrix/Vector3.java",
    "chars": 3173,
    "preview": "\npackage com.github.mikephil.charting.matrix;\n\n/**\n * Simple 3D vector class. Handles basic vector math for 3D vectors.\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/AxisRenderer.java",
    "chars": 8165,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.java",
    "chars": 17875,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarLineScatterCandleBubbleRenderer.java",
    "chars": 3077,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport com.github.mikephil.charting.animation.ChartAnimator;\nimport com."
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BubbleChartRenderer.java",
    "chars": 9682,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/CandleStickChartRenderer.java",
    "chars": 13356,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/CombinedChartRenderer.java",
    "chars": 5514,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\n\nimport com.github.mikephil.charting.ani"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/DataRenderer.java",
    "chars": 5068,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.java",
    "chars": 17643,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint.Align;\nim"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LegendRenderer.java",
    "chars": 21054,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.DashPathEffect;"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.java",
    "chars": 27775,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineRadarRenderer.java",
    "chars": 2785,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport an"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineScatterCandleRadarRenderer.java",
    "chars": 2324,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Path;\n\nimport co"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/PieChartRenderer.java",
    "chars": 39604,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RadarChartRenderer.java",
    "chars": 13454,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/Renderer.java",
    "chars": 479,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport com.github.mikephil.charting.utils.ViewPortHandler;\n\n/**\n * Abst"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java",
    "chars": 6660,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.drawable.Drawab"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRenderer.java",
    "chars": 14411,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRendererHorizontalBarChart.java",
    "chars": 10677,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRendererRadarChart.java",
    "chars": 2302,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.PointF;\n\nimport"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRenderer.java",
    "chars": 12503,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport an"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRendererHorizontalBarChart.java",
    "chars": 11080,
    "preview": "\npackage com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport a"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRendererRadarChart.java",
    "chars": 7291,
    "preview": "package com.github.mikephil.charting.renderer;\n\nimport android.graphics.Canvas;\nimport android.graphics.Path;\nimport and"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java",
    "chars": 1157,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java",
    "chars": 1163,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java",
    "chars": 2066,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java",
    "chars": 1134,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java",
    "chars": 992,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java",
    "chars": 2318,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java",
    "chars": 2663,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\ni"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java",
    "chars": 1178,
    "preview": "package com.github.mikephil.charting.renderer.scatter;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\n\n"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/ColorTemplate.java",
    "chars": 3700,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport android.content.res.Resources;\nimport android.graphics.Color;\n\nimpo"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/EntryXComparator.java",
    "chars": 540,
    "preview": "package com.github.mikephil.charting.utils;\n\nimport com.github.mikephil.charting.data.Entry;\n\nimport java.util.Comparato"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/FSize.java",
    "chars": 1807,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport java.util.List;\n\n/**\n * Class for describing width and height dimen"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/FileUtils.java",
    "chars": 8694,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport android.content.res.AssetManager;\nimport android.os.Environment;\nim"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/HorizontalViewPortHandler.java",
    "chars": 683,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\n/**\n * ViewPortHandler for HorizontalBarChart.\n */\npublic class Horizontal"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/MPPointD.java",
    "chars": 1126,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport java.util.List;\n\n/**\n * Point encapsulating two double values.\n *\n "
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/MPPointF.java",
    "chars": 2338,
    "preview": "package com.github.mikephil.charting.utils;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\n\nimport java.util.L"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java",
    "chars": 7348,
    "preview": "package com.github.mikephil.charting.utils;\n\nimport java.util.List;\n\n/**\n * An object pool for recycling of object insta"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/Transformer.java",
    "chars": 13194,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport android.graphics.Matrix;\nimport android.graphics.Path;\nimport andro"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/TransformerHorizontalBarChart.java",
    "chars": 1282,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\n/**\n * Transformer class for the HorizontalBarChart.\n * \n * @author Philip"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/Utils.java",
    "chars": 25798,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nim"
  },
  {
    "path": "MPChartLib/src/main/java/com/github/mikephil/charting/utils/ViewPortHandler.java",
    "chars": 18184,
    "preview": "\npackage com.github.mikephil.charting.utils;\n\nimport android.graphics.Matrix;\nimport android.graphics.RectF;\nimport andr"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/ApproximatorTest.java",
    "chars": 940,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.data.Entry;\nimport com.github.mikephil.c"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/AxisRendererTest.java",
    "chars": 3396,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.components.YAxis;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/BarDataTest.java",
    "chars": 2279,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.data.BarData;\nimport com.github.mikephil"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/ChartDataTest.java",
    "chars": 8267,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.components.YAxis;\nimport com.github.mike"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/DataSetTest.java",
    "chars": 7945,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.data.DataSet;\nimport com.github.mikephil"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/LargeValueFormatterTest.java",
    "chars": 3042,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.formatter.LargeValueFormatter;\n\nimport o"
  },
  {
    "path": "MPChartLib/src/test/java/com/github/mikephil/charting/test/ObjectPoolTest.java",
    "chars": 8603,
    "preview": "package com.github.mikephil.charting.test;\n\nimport com.github.mikephil.charting.utils.ObjectPool;\n\nimport junit.framewor"
  },
  {
    "path": "MPChartLib/说明.txt",
    "chars": 585,
    "preview": "1改了XAxisRenderer的210行,将i/2了\n这个是官方库的bug,等待官方修复后通过gradle引用这个库\n\n2 https://github.com/PhilJay/MPAndroidChart/pull/2462/commi"
  },
  {
    "path": "README.md",
    "chars": 636,
    "preview": "# LaplaceKLine\nleefengme@163.com\nK线图表\n[![](https://jitpack.io/v/limxing/LaplaceKLine.svg)](https://jitpack.io/#limxing/L"
  },
  {
    "path": "app/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "chars": 1238,
    "preview": "apply plugin: 'com.android.application'\n\napply plugin: 'kotlin-android'\n\napply plugin: 'kotlin-android-extensions'\n\nandr"
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 751,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "app/src/androidTest/java/cn/laplacetech/android/laplacekline/ExampleInstrumentedTest.kt",
    "chars": 672,
    "preview": "package cn.laplacetech.android.laplacekline\n\nimport android.support.test.InstrumentationRegistry\nimport android.support."
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 798,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "app/src/main/java/cn/laplacetech/android/laplacekline/MainActivity.kt",
    "chars": 4220,
    "preview": "package cn.laplacetech.android.laplacekline\n\nimport android.content.Context\nimport android.content.res.Configuration\nimp"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "chars": 5606,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:wi"
  },
  {
    "path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "chars": 1880,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    "
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "chars": 3714,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.an"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "chars": 272,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "chars": 272,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "app/src/main/res/raw/fifteen_minutes.json",
    "chars": 542204,
    "preview": "[\n  [\n    1532357100000,\n    7688.51,\n    7701.09,\n    7688.5,\n    7711.92,\n    175.09381179912486,\n    1347945.70033569"
  },
  {
    "path": "app/src/main/res/raw/five_minutes.json",
    "chars": 542296,
    "preview": "[\n  [\n    1533220800000,\n    7535.94,\n    7544.94,\n    7535.68,\n    7547.91,\n    59.86832553097086,\n    451555.390241706"
  },
  {
    "path": "app/src/main/res/raw/four_hours.json",
    "chars": 148937,
    "preview": "[\n  [\n    1527753600000,\n    7527.75,\n    7525.77,\n    7516,\n    7547.35,\n    813.4527847107167,\n    6128678.106305596,\n"
  },
  {
    "path": "app/src/main/res/raw/one_hour.json",
    "chars": 539692,
    "preview": "[\n  [\n    1528408800000,\n    7663.61,\n    7660.5,\n    7647.6,\n    7663.61,\n    183.9546141384395,\n    1408455.03219041,\n"
  },
  {
    "path": "app/src/main/res/raw/one_minute.json",
    "chars": 541689,
    "preview": "[\n  [\n    1533566100000,\n    6928.3,\n    6929.46,\n    6928.3,\n    6929.8,\n    17.204824826633686,\n    119211.38977247573"
  },
  {
    "path": "app/src/main/res/raw/oneday.json",
    "chars": 119980,
    "preview": "[\n  [\n    1498953600000,\n    0.522091,\n    0.54847,\n    0.439085,\n    0.57769,\n    211542,\n    null,\n    null,\n    null,"
  },
  {
    "path": "app/src/main/res/raw/twelve_hours.json",
    "chars": 48297,
    "preview": "[\n  [\n    1527724800000,\n    7527.75,\n    7525.77,\n    7516,\n    7547.35,\n    813.4527847107167,\n    6128678.106305596,\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "chars": 208,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#3F51B5</color>\n    <color name=\"color"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "chars": 75,
    "preview": "<resources>\n    <string name=\"app_name\">LaplaceKLine</string>\n</resources>\n"
  }
]

// ... and 60 more files (download for full content)

About this extraction

This page contains the full source code of the limxing/LaplaceKLine GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 260 files (3.6 MB), approximately 953.5k tokens, and a symbol index with 2092 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!