Skip to content

Commit

Permalink
简化数据点实体类的用法
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyiqian committed Dec 23, 2021
1 parent 8d3a1cc commit 5334524
Show file tree
Hide file tree
Showing 21 changed files with 155 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import com.github.wangyiqian.stockchart.childchart.base.IChildChart
import com.github.wangyiqian.stockchart.entities.EmptyKEntity
import com.github.wangyiqian.stockchart.entities.GestureEvent
import com.github.wangyiqian.stockchart.entities.Highlight
import com.github.wangyiqian.stockchart.entities.*
import com.github.wangyiqian.stockchart.listener.OnKEntitiesChangedListener
import com.github.wangyiqian.stockchart.util.checkMainThread
import kotlin.math.max
Expand Down Expand Up @@ -149,7 +147,7 @@ class StockChart @JvmOverloads constructor(context: Context, attrs: AttributeSet
val rightIdx = (tmp4FloatArray[2] + 0.5f).toInt() - 1
var result: Int? = null
for (i in rightIdx downTo leftIdx) {
if (i in config.kEntities.indices && config.kEntities[i] !is EmptyKEntity) {
if (i in config.kEntities.indices && !config.kEntities[i].containFlag(FLAG_EMPTY)) {
result = i
break
}
Expand All @@ -169,7 +167,7 @@ class StockChart @JvmOverloads constructor(context: Context, attrs: AttributeSet
val rightIdx = (tmp4FloatArray[2] + 0.5f).toInt() - 1
var result: Int? = null
for (i in leftIdx..rightIdx) {
if (i in config.kEntities.indices && config.kEntities[i] !is EmptyKEntity) {
if (i in config.kEntities.indices && !config.kEntities[i].containFlag(FLAG_EMPTY)) {
result = i
break
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ package com.github.wangyiqian.stockchart.childchart.kchart
import android.graphics.*
import com.github.wangyiqian.stockchart.IStockChart
import com.github.wangyiqian.stockchart.childchart.base.BaseChildChart
import com.github.wangyiqian.stockchart.entities.EmptyKEntity
import com.github.wangyiqian.stockchart.entities.KEntityOfLineStarter
import com.github.wangyiqian.stockchart.entities.FLAG_EMPTY
import com.github.wangyiqian.stockchart.entities.FLAG_LINE_STARTER
import com.github.wangyiqian.stockchart.entities.containFlag
import com.github.wangyiqian.stockchart.index.Index
import kotlin.math.abs
import kotlin.math.max
Expand Down Expand Up @@ -117,7 +118,7 @@ open class KChart(
var yMin = 0f
var yMax = 0f

getKEntities().filterIndexed { index, kEntity -> index in startIndex..endIndex && kEntity !is EmptyKEntity }
getKEntities().filterIndexed { index, kEntity -> index in startIndex..endIndex && !kEntity.containFlag(FLAG_EMPTY) }
.apply {
when (chartConfig.kChartType) {
is KChartConfig.KChartType.CANDLE, is KChartConfig.KChartType.HOLLOW, is KChartConfig.KChartType.BAR -> {
Expand Down Expand Up @@ -450,7 +451,7 @@ open class KChart(
mapPointsReal2Value(tmp4FloatArray)
val leftIdx = (tmp4FloatArray[0] + 0.5f).toInt()
val rightIdx = (tmp4FloatArray[2] + 0.5f).toInt() - 1
getKEntities().filterIndexed { kEntityIdx, kEntity -> kEntityIdx in leftIdx..rightIdx && kEntity !is EmptyKEntity }
getKEntities().filterIndexed { kEntityIdx, kEntity -> kEntityIdx in leftIdx..rightIdx && !kEntity.containFlag(FLAG_EMPTY) }
.map { it.getHighPrice() }.max()

var maxIdx: Int? = null
Expand All @@ -459,7 +460,7 @@ open class KChart(
var minPrice = 0f
val kEntities = getKEntities()
for (i in leftIdx..rightIdx) {
if (i in kEntities.indices && kEntities[i] !is EmptyKEntity) {
if (i in kEntities.indices && !kEntities[i].containFlag(FLAG_EMPTY)) {
if (minIdx == null || maxIdx == null) {
maxIdx = i
minIdx = i
Expand Down Expand Up @@ -610,7 +611,7 @@ open class KChart(

var preIdx = -1
for (idx in getKEntities().indices) {
if (getKEntities()[idx] is EmptyKEntity || getKEntities()[idx] is KEntityOfLineStarter) {
if (getKEntities()[idx].containFlag(FLAG_EMPTY) || getKEntities()[idx].containFlag(FLAG_LINE_STARTER)) {
if (preIdx != -1) {
tmpPath.lineTo(preIdx + 1f, getKEntities()[preIdx].getClosePrice())
tmpPath.lineTo(preIdx + 1f, yMinValue)
Expand All @@ -619,7 +620,7 @@ open class KChart(
tmpPath.reset()
}
preIdx = -1
if (getKEntities()[idx] is EmptyKEntity) {
if (getKEntities()[idx].containFlag(FLAG_EMPTY)) {
continue
}
}
Expand Down Expand Up @@ -648,12 +649,12 @@ open class KChart(

preIdx = -1
for (idx in getKEntities().indices) {
if (getKEntities()[idx] is EmptyKEntity) {
if (getKEntities()[idx].containFlag(FLAG_EMPTY)) {
preIdx = -1
continue
}

if (preIdx == -1 || getKEntities()[idx] is KEntityOfLineStarter) {
if (preIdx == -1 || getKEntities()[idx].containFlag(FLAG_LINE_STARTER)) {
preIdx = idx
continue
}
Expand Down Expand Up @@ -685,12 +686,12 @@ open class KChart(
var preAvgIdx = -1
for (idx in getKEntities().indices) {

if (getKEntities()[idx] is EmptyKEntity || getKEntities()[idx].getAvgPrice() == null) {
if (getKEntities()[idx].containFlag(FLAG_EMPTY) || getKEntities()[idx].getAvgPrice() == null) {
preAvgIdx = -1
continue
}

if (preAvgIdx == -1 || getKEntities()[idx] is KEntityOfLineStarter) {
if (preAvgIdx == -1 || getKEntities()[idx].containFlag(FLAG_LINE_STARTER)) {
preAvgIdx = idx
continue
}
Expand Down Expand Up @@ -718,7 +719,7 @@ open class KChart(
val spaceWidth = 1 * chartConfig.barSpaceRatio
var left = spaceWidth / 2f
getKEntities().forEachIndexed { idx, kEntity ->
if (kEntity !is EmptyKEntity) {
if (!kEntity.containFlag(FLAG_EMPTY)) {
barKChartPaint.color =
if (isRise(idx)) stockChart.getConfig().riseColor else stockChart.getConfig().downColor

Expand Down Expand Up @@ -751,7 +752,7 @@ open class KChart(
val spaceWidth = 1 * chartConfig.barSpaceRatio
var left = spaceWidth / 2f
getKEntities().forEachIndexed { idx, kEntity ->
if (kEntity !is EmptyKEntity) {
if (!kEntity.containFlag(FLAG_EMPTY)) {
hollowKChartPaint.color =
if (isRise(idx)) stockChart.getConfig().riseColor else stockChart.getConfig().downColor

Expand Down Expand Up @@ -793,7 +794,7 @@ open class KChart(
val spaceWidth = 1 * chartConfig.barSpaceRatio
var left = spaceWidth / 2f
getKEntities().forEachIndexed { idx, kEntity ->
if (kEntity !is EmptyKEntity) {
if (!kEntity.containFlag(FLAG_EMPTY)) {
candleKChartPaint.color =
if (isRise(idx)) stockChart.getConfig().riseColor else stockChart.getConfig().downColor
candleKChartPaint.color = candleKChartPaint.color
Expand All @@ -820,7 +821,7 @@ open class KChart(
if (getKEntities()[idx].getClosePrice() == getKEntities()[idx].getOpenPrice()) {
if (idx - 1 in getKEntities().indices) {
val preKEntity = getKEntities()[idx - 1]
if (preKEntity !is EmptyKEntity) {
if (!preKEntity.containFlag(FLAG_EMPTY)) {
getKEntities()[idx].getClosePrice() >= preKEntity.getClosePrice()
} else {
true
Expand All @@ -837,12 +838,12 @@ open class KChart(
lineKChartLinePaint.color = chartConfig.lineChartColor
var preIdx = -1
for (idx in getKEntities().indices) {
if (getKEntities()[idx] is EmptyKEntity) {
if (getKEntities()[idx].containFlag(FLAG_EMPTY)) {
preIdx = -1
continue
}

if (preIdx == -1 || getKEntities()[idx] is KEntityOfLineStarter) {
if (preIdx == -1 || getKEntities()[idx].containFlag(FLAG_LINE_STARTER)) {
preIdx = idx
continue
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import android.graphics.Canvas
import android.graphics.Paint
import com.github.wangyiqian.stockchart.IStockChart
import com.github.wangyiqian.stockchart.childchart.base.BaseChildChart
import com.github.wangyiqian.stockchart.entities.EmptyKEntity
import com.github.wangyiqian.stockchart.entities.FLAG_EMPTY
import com.github.wangyiqian.stockchart.entities.containFlag
import com.github.wangyiqian.stockchart.util.DimensionUtil
import java.util.*

Expand Down Expand Up @@ -96,7 +97,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -156,7 +157,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :
var tmpLabel = ""

getKEntities().forEachIndexed { idx, kEntity ->
if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -191,7 +192,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :
val labelMinSpace = DimensionUtil.dp2px(context, 70f)

getKEntities().forEachIndexed { idx, kEntity ->
if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -230,7 +231,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -267,7 +268,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -305,7 +306,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -343,7 +344,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -381,7 +382,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -424,7 +425,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -462,7 +463,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -499,7 +500,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -536,7 +537,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity is EmptyKEntity) return@forEachIndexed
if (kEntity.containFlag(FLAG_EMPTY)) return@forEachIndexed

val time = kEntity.getTime()
tmpDate.time = time
Expand Down Expand Up @@ -613,7 +614,7 @@ class TimeBar(stockChart: IStockChart, chartConfig: TimeBarConfig) :

val kEntity = getKEntities()[idx]

if (kEntity is EmptyKEntity) return
if (kEntity.containFlag(FLAG_EMPTY)) return

val time = kEntity.getTime()
tmpDate.time = time
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import android.graphics.Canvas
import android.graphics.Paint
import com.github.wangyiqian.stockchart.IStockChart
import com.github.wangyiqian.stockchart.childchart.base.BaseChildChart
import com.github.wangyiqian.stockchart.entities.EmptyKEntity
import com.github.wangyiqian.stockchart.entities.FLAG_EMPTY
import com.github.wangyiqian.stockchart.entities.containFlag
import kotlin.math.max
import kotlin.math.round

/**
* 成交量图
Expand Down Expand Up @@ -76,7 +76,7 @@ class VolumeChart(

getKEntities().forEachIndexed { idx, kEntity ->

if (kEntity !is EmptyKEntity) {
if (!kEntity.containFlag(FLAG_EMPTY)) {
val isRise = isRise(idx)
volumePaint.color =
if (isRise) stockChart.getConfig().riseColor else stockChart.getConfig().downColor
Expand Down Expand Up @@ -104,7 +104,7 @@ class VolumeChart(
if (getKEntities()[idx].getClosePrice() == getKEntities()[idx].getOpenPrice()) {
if (idx - 1 in getKEntities().indices) {
val preKEntity = getKEntities()[idx - 1]
if (preKEntity !is EmptyKEntity) {
if (!preKEntity.containFlag(FLAG_EMPTY)) {
getKEntities()[idx].getClosePrice() >= preKEntity.getClosePrice()
} else {
true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ package com.github.wangyiqian.stockchart.entities
* @author wangyiqian E-mail: [email protected]
* @version 创建时间: 2021/1/29
*/
open class EmptyKEntity : KEntity(0f, 0f, 0f, 0f, 0, 0)
@Deprecated("")
open class EmptyKEntity : KEntity(0f, 0f, 0f, 0f, 0, 0, null, FLAG_EMPTY)
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,14 @@ interface IKEntity {
*/
fun getAvgPrice(): Float?
fun setAvgPrice(price: Float?)

/**
* 用于设置标记位 如[FLAG_EMPTY]、[FLAG_LINE_STARTER]
*/
fun setFlag(flag: Int)

/**
* 标记位
*/
fun getFlag(): Int
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright 2021 WangYiqian
*
* 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.
*
*/

package com.github.wangyiqian.stockchart.entities

/**
* @author wangyiqian E-mail: [email protected]
* @version 创建时间: 2021/12/23
*/

const val FLAG_DEFAULT = 0

/**
* 空点
*/
const val FLAG_EMPTY = 1 shl 0

/**
* 折线起始点,目的是为了实现五日线这种不同日的折线不需要相连,每日起始第一个点使用此标记位即可
*/
const val FLAG_LINE_STARTER = 1 shl 1

fun IKEntity.containFlag(flag: Int) = getFlag() and flag == flag
Loading

0 comments on commit 5334524

Please sign in to comment.