Skip to content

Commit 6f6a0ba

Browse files
committed
Added animation, fixed sliceStartPoint, added popup text.
1 parent e756245 commit 6f6a0ba

File tree

4 files changed

+28
-23
lines changed

4 files changed

+28
-23
lines changed

app/src/main/java/com/faskn/clickablepiechart/MainActivity.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ class MainActivity : AppCompatActivity() {
1717
// Example
1818
val pieChart0 = PieChart.Builder(
1919
arrayOf(
20-
Slice(30f, R.color.brown700),
21-
Slice(60f, R.color.materialRed700),
20+
Slice(30f, R.color.colorPrimary),
21+
Slice(60f, R.color.colorPrimaryDark),
2222
Slice(120f, R.color.materialIndigo600),
23-
Slice(150f, R.color.materialRed400)
23+
Slice(150f, R.color.colorAccent)
2424
)
25-
)
25+
).setSliceStartPoint(-90f)
2626
.setClickListener { string, float ->
2727
Log.d("ses", "s " + string)
2828
Log.d("ses", "f " + float.toString())
@@ -32,10 +32,10 @@ class MainActivity : AppCompatActivity() {
3232
// Example 2
3333
val pieChart1 = PieChart.Builder(
3434
arrayOf(
35-
Slice(Random.nextInt(0, 100).toFloat(), R.color.brown700),
36-
Slice(Random.nextInt(0, 100).toFloat(), R.color.materialRed700),
35+
Slice(Random.nextInt(0, 100).toFloat(), R.color.colorPrimary),
36+
Slice(Random.nextInt(0, 100).toFloat(), R.color.colorPrimaryDark),
3737
Slice(Random.nextInt(0, 100).toFloat(), R.color.materialIndigo600),
38-
Slice(Random.nextInt(0, 100).toFloat(), R.color.materialRed400)
38+
Slice(Random.nextInt(0, 100).toFloat(), R.color.colorAccent)
3939
)
4040
)
4141
.setClickListener { string, float ->

app/src/main/res/layout/activity_main.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<com.faskn.lib.ClickablePieChart
1010
android:id="@+id/chart"
1111
android:layout_width="250dp"
12-
app:popupText="ziyaret"
12+
app:popupText="Ziyaret"
1313
android:layout_centerInParent="true"
1414
android:layout_height="250dp" />
1515
</RelativeLayout>

lib/src/main/java/com/faskn/lib/ClickablePieChart.kt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@ import android.graphics.Color
1212
import android.graphics.Paint
1313
import android.graphics.RectF
1414
import android.util.AttributeSet
15+
import android.util.Log
1516
import android.view.Gravity
1617
import android.view.LayoutInflater
1718
import android.view.MotionEvent
1819
import android.view.View
1920
import android.view.animation.LinearInterpolator
20-
import android.widget.*
21+
import android.widget.LinearLayout
22+
import android.widget.PopupWindow
23+
import android.widget.TextView
2124
import androidx.core.content.ContextCompat
2225
import androidx.core.view.doOnPreDraw
2326
import androidx.core.widget.ImageViewCompat
@@ -35,8 +38,6 @@ class ClickablePieChart @JvmOverloads constructor(
3538
private var slicePaint: Paint = Paint()
3639
private var centerPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
3740
private var rectF: RectF? = null
38-
private var sliceStartPoint = 0F // FIXME: 16-Aug-20 remove if unnecessary
39-
private var sliceWidth = 80f
4041
private var touchX = 0f
4142
private var touchY = 0f
4243

@@ -49,7 +50,7 @@ class ClickablePieChart @JvmOverloads constructor(
4950
private var currentSweepAngle = 0
5051

5152
// Attributes
52-
private lateinit var popupText: String
53+
private var popupText: String? = null
5354

5455
init {
5556
initAttributes(attrs)
@@ -72,7 +73,7 @@ class ClickablePieChart @JvmOverloads constructor(
7273
context.theme.obtainStyledAttributes(attrs, R.styleable.ClickablePieChart, 0, 0)
7374

7475
try {
75-
popupText = typedArray.getString(R.styleable.ClickablePieChart_popupText)!!
76+
popupText = typedArray.getString(R.styleable.ClickablePieChart_popupText) ?: ""
7677
} finally {
7778
typedArray.recycle()
7879
}
@@ -163,18 +164,21 @@ class ClickablePieChart @JvmOverloads constructor(
163164
)
164165
)
165166

166-
// FIXME: 16-Aug-20 Remove subtraction if unnecessary. On runtime sliceStartPoint is always 0f.
167-
// touchAngle -= sliceStartPoint
168-
touchAngle %= 360
167+
Log.v("qqq", touchAngle.toString())
168+
169+
170+
touchAngle -= pieChart?.sliceStartPoint ?: 0f
169171

170172
if (touchAngle < 0) {
171173
touchAngle += 360.0
172174
}
173175

176+
Log.v("qqq", touchAngle.toString())
177+
174178
var total = 0.0f
175179
var forEachStopper = false // what a idiot stuff
176180
slices.forEachIndexed { index, slice ->
177-
total += slice.dataPoint % 360f
181+
total += (slice.dataPoint) % 360f
178182
if (touchAngle <= total && !forEachStopper) {
179183
pieChart?.clickListener?.invoke(touchAngle.toString(), index.toFloat())
180184
forEachStopper = true
@@ -194,13 +198,13 @@ class ClickablePieChart @JvmOverloads constructor(
194198
val width = LinearLayout.LayoutParams.WRAP_CONTENT
195199
val height = LinearLayout.LayoutParams.WRAP_CONTENT
196200
val popupWindow = PopupWindow(popupView, width, height, true)
197-
var center = slices[index].arc?.average()!!
201+
var center = slices[index].arc?.average()!! + pieChart?.sliceStartPoint?.toDouble()!!
198202
val halfRadius = rectF!!.centerX()
199203

200204
popupView.findViewById<TextView>(R.id.textViewPopupText).text =
201-
"${center.toInt()} $popupText"
205+
"${slices[index].arc?.average()?.toInt()} $popupText"
202206
ImageViewCompat.setImageTintList(
203-
popupView.findViewById<ImageView>(R.id.imageViewPopupCircleIndicator),
207+
popupView.findViewById(R.id.imageViewPopupCircleIndicator),
204208
ColorStateList.valueOf(ContextCompat.getColor(context, slices[index].color))
205209
)
206210

@@ -239,6 +243,7 @@ class ClickablePieChart @JvmOverloads constructor(
239243
fun setPieChart(pieChart: PieChart) {
240244
this.pieChart = pieChart
241245
init()
246+
invalidateAndRequestLayout()
242247
}
243248

244249
fun setCenterColor(colorId: Int) {

lib/src/main/java/com/faskn/lib/PieChart.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ package com.faskn.lib
77
class PieChart private constructor(
88
var slices: Array<Slice>,
99
var clickListener: ((String, Float) -> Unit)? = null,
10-
var sliceStartPoint: Float,
11-
var sliceWidth: Float
10+
var sliceStartPoint: Float = 0f,
11+
var sliceWidth: Float = 80f
1212
) {
1313
data class Builder(
1414
private var slices: Array<Slice>,
1515
private var clickListener: ((String, Float) -> Unit)? = null,
16-
private var sliceStartPoint: Float? = 0f,
16+
private var sliceStartPoint: Float? = 90f,
1717
private var sliceWidth: Float? = 80f
1818
) {
1919
init {

0 commit comments

Comments
 (0)