Guest User

Untitled

a guest
Feb 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. val renderer = GradientBarChartRenderer(chart)
  2. renderer.barPaintOverrider = { index, rect, paint ->
  3. var colors = weekdayColors
  4. if (data[index].isWeekend) {
  5. colors = weekendBarColors
  6. }
  7. paint.shader = LinearGradient(rect.left, rect.top, rect.left, rect.bottom, colors.toIntArray(), null, Shader.TileMode.CLAMP)
  8. }
  9.  
  10. internal class GradientBarChartRenderer(chart: BarChart) : BarChartRenderer(chart, chart.animator, chart.viewPortHandler) {
  11.  
  12. private val mBarShadowRectBuffer = RectF()
  13.  
  14. var barPaintOverrider: ((Int, RectF, Paint) -> Unit)? = null
  15.  
  16. override fun drawDataSet(c: Canvas, dataSet: IBarDataSet, index: Int) {
  17. val trans = mChart.getTransformer(dataSet.getAxisDependency())
  18.  
  19. mBarBorderPaint.color = dataSet.getBarBorderColor()
  20. mBarBorderPaint.strokeWidth = Utils.convertDpToPixel(dataSet.getBarBorderWidth())
  21.  
  22. val drawBorder = dataSet.getBarBorderWidth() > 0f
  23.  
  24. val phaseX = mAnimator.phaseX
  25. val phaseY = mAnimator.phaseY
  26.  
  27. // draw the bar shadow before the values
  28. if (mChart.isDrawBarShadowEnabled) {
  29. mShadowPaint.color = dataSet.getBarShadowColor()
  30.  
  31. val barData = mChart.barData
  32.  
  33. val barWidth = barData.barWidth
  34. val barWidthHalf = barWidth / 2.0f
  35. var x: Float
  36.  
  37. var i = 0
  38. val count = Math.min(Math.ceil((dataSet.getEntryCount().toFloat() * phaseX).toDouble()).toInt(), dataSet.getEntryCount())
  39. while (i < count) {
  40.  
  41. val e = dataSet.getEntryForIndex(i)
  42.  
  43. x = e.x
  44.  
  45. mBarShadowRectBuffer.left = x - barWidthHalf
  46. mBarShadowRectBuffer.right = x + barWidthHalf
  47.  
  48. trans.rectValueToPixel(mBarShadowRectBuffer)
  49.  
  50. if (!mViewPortHandler.isInBoundsLeft(mBarShadowRectBuffer.right)) {
  51. i++
  52. continue
  53. }
  54.  
  55. if (!mViewPortHandler.isInBoundsRight(mBarShadowRectBuffer.left))
  56. break
  57.  
  58. mBarShadowRectBuffer.top = mViewPortHandler.contentTop()
  59. mBarShadowRectBuffer.bottom = mViewPortHandler.contentBottom()
  60.  
  61. c.drawRect(mBarShadowRectBuffer, mShadowPaint)
  62. i++
  63. }
  64. }
  65.  
  66. // initialize the buffer
  67. val buffer = mBarBuffers[index]
  68. buffer.setPhases(phaseX, phaseY)
  69. buffer.setDataSet(index)
  70. buffer.setInverted(mChart.isInverted(dataSet.getAxisDependency()))
  71. buffer.setBarWidth(mChart.barData.barWidth)
  72.  
  73. buffer.feed(dataSet)
  74.  
  75. trans.pointValuesToPixel(buffer.buffer)
  76.  
  77. val isSingleColor = dataSet.getColors().size == 1
  78.  
  79. if (isSingleColor) {
  80. mRenderPaint.color = dataSet.getColor()
  81. }
  82.  
  83. var j = 0
  84. while (j < buffer.size()) {
  85.  
  86. if (!mViewPortHandler.isInBoundsLeft(buffer.buffer[j + 2])) {
  87. j += 4
  88. continue
  89. }
  90.  
  91. if (!mViewPortHandler.isInBoundsRight(buffer.buffer[j]))
  92. break
  93.  
  94. if (!isSingleColor) {
  95. // Set the color for the currently drawn value. If the index
  96. // is out of bounds, reuse colors.
  97. mRenderPaint.color = dataSet.getColor(j / 4)
  98. }
  99. val rect = RectF(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],
  100. buffer.buffer[j + 3])
  101. if (barPaintOverrider != null) {
  102. barPaintOverrider?.invoke(j / 4, rect, mRenderPaint)
  103. }
  104. c.drawRect(rect, mRenderPaint)
  105.  
  106. if (drawBorder) {
  107. c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],
  108. buffer.buffer[j + 3], mBarBorderPaint)
  109. }
  110. j += 4
  111. }
  112. }
  113. }
Add Comment
Please, Sign In to add comment