ArcChartView

Additional

Language
Kotlin
Version
1.0.3.1 (Aug 7, 2018)
Created
Dec 19, 2017
Updated
Oct 31, 2020 (Retired)
Owner
Iman Khoshabi (imaNNeo)
Contributor
Iman Khoshabi (imaNNeo)
1
Activity
Badge
Generate
Download
Source code

ArcChartViewDemo

You can use this library to draw Arc charts

and show your statistics or anything you want

or maybe get some ratings from user.

you can download the Demo apk file (you can first adjust your Chart in the app and then implement it in code)

1 - Getting Started

By this instructions you can add this library and i will explain how use it.

Add Maven to your root build.gradle

First of all Add it in your root build.gradle at the end of repositories:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

Add Dependency

Add the dependency to your app build.gradle file

dependencies
{
    implementation 'com.github.imaNNeoFighT:ArcChartView:1.0.3.1'
    // Or in older versions : 
    // compile 'com.github.imaNNeoFighT:ArcChartView:1.0.3.1'
}

And then sync your gradle and take a tea .

2 - About The View

You can simply use this View like other Views in android, just add ArcChartView in your java code or xml.

View Properties

you can customize StepBarView, all of this attributes can change via xml or code (runtime)

Attribute Type Kotlin Description
acv_lines_count Integer linesCount lines count of chart (i mean arc lines), default value is 10
acv_lines_space Dimensions linesSpace lines space (lines margin), default value is 4dp
acv_lines_width Dimensions linesWidth lines width , default value is 6dp
acv_sections_count Integer sectionsCount sections count , default value is 8
acv_sections_space Dimensions sectionsSpace sections space (sections margin) , default value is 4dp
acv_mid_start_extra_offset Dimensions midStartExtraOffset center extra offest size, default value is 16dp
acv_icon_size Dimensions iconSize the icons size, default value is 32dp
acv_start_degree_offset Float startDegreeOffset offset of start degree to design the view, default value is 0f
acv_allow_setting_value_by_touch Boolean allowSettingValueByTouch disable or enable allow setting value by touch feature, default value is true
acv_allow_animations_on_set_values Boolean allowAnimationsOnSetValue disable or enable allow play animation on setting values, default value is true

Set and get Sections value

keep in mind that sections position starts with 0

to get a section value use this function

value = myArcChartView.getSectionValue(sectionPos)

and to set a section value use this function

myArcChartView.getSectionValue(sectionPos,sectionValue)

Change filled and unFilled colors

to set the unFilled color (the section color that drawn behind) use this function

myArcChartView.setFilldeColor(sectionPos, Color.BLACK)

and to set the filled color (the section color that drawn in top) use this function

myArcChartView.setUnFilldeColor(sectionPos,Color.LTGRAY)

Change section icons

to set the icons use this function

myArcChartView.setSectionIcons(sectionIcons : MutableList<Bitmap?>)

View listener (ArcListener)

you can handle some actions (only sectionsIconClick for now) just set a listener and make your logic

myArcChartView.listener = object : ArcChartView.AcvListener {
            override fun onSectionsIconClicked(sectionPos: Int) {
                //Handle Your Logic Here
                Toast.makeText(applicationContext, sectionPos.toString(),Toast.LENGTH_SHORT).show()
            }
        }

setValueByTouch (and callback)

You can set values by touch and you can disable this feature by 'acv_allow_setting_value_by_touch' attribute. Also you can set a callBack listener to find out when values changed.

myArcChartView.listener = object : ArcChartView.AcvListener {
            override fun onStartSettingSectionValue(sectionPos: Int, sectionValue: Int) {
                tvSectionsValue.setText("onStartSettingSectionValue $sectionPos $sectionValue")
            }

            override fun onContinueSettingSectionValue(sectionPos: Int, sectionValue: Int) {
                tvSectionsValue.setText("onContinueSettingSectionValue $sectionPos $sectionValue")
            }

            override fun onFinishedSettingSectionValue(sectionPos: Int, sectionValue: Int) {
                tvSectionsValue.setText("onFinishedSettingSectionValue $sectionPos $sectionValue")
            }
        }

Implementing Rotate Animation (using startDegreeOffset attribute)

    val anim = ValueAnimator.ofFloat(0f,360f).apply {
                repeatCount = ValueAnimator.INFINITE
                repeatMode = ValueAnimator.RESTART
                interpolator = OvershootInterpolator()
                duration = 3000
            }
            anim.addUpdateListener {
                if(isAnimating)
                    myArcChartView.startDegreeOffset =
                            it.animatedValue as Float
            }
            anim.start()

3 - Some Samples

Sample 1

    <com.neo.arcchartview.ArcChartView
        android:id="@+id/arc_chart_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/view_separator"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:acv_lines_count="10"
        app:acv_lines_width="6dp"
        app:acv_lines_space="4dp"
        app:acv_sections_count="8"
        app:acv_sections_space="2dp"
        app:acv_icon_size="32dp"
        app:acv_mid_start_extra_offset="12dp"
        />

Sample 2

    <com.neo.arcchartview.ArcChartView
        android:id="@+id/arc_chart_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/view_separator"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:acv_lines_count="4"
        app:acv_lines_width="17dp"
        app:acv_lines_space="2dp"
        app:acv_sections_count="3"
        app:acv_sections_space="6dp"
        app:acv_icon_size="36dp"
        app:acv_mid_start_extra_offset="0dp"
        />

Sample 3

    <com.neo.arcchartview.ArcChartView
        android:id="@+id/arc_chart_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/view_separator"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:acv_lines_count="6"
        app:acv_lines_width="14dp"
        app:acv_lines_space="0dp"
        app:acv_sections_count="18"
        app:acv_sections_space="0dp"
        app:acv_icon_size="14dp"
        app:acv_mid_start_extra_offset="8dp"
        />

Sample 4

    myArcChartView.allowAnimationsOnSetValue = true 

License

Copyright 2018 Iman Khoshabi

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.