
라이브러리 & 프로젝트 준비
프로젝트에 MPAndroidChart를 import 하는 법은 이전강의(아래 링크)에 잠깐 참고하고 오면된다.
데이터 구조
봉 차트를 그리기 위해서 open
, close
,shadowHigh
,shadowLow
값을 전달 해 주어야한다. 봉차트를 보는 방법은 다음과 같다. 샘플 데이터는DataUtil.getCSStockData()
를 통해서 가져오면된다. 빨간색으로 칠한 봉은 하루동안 가격이 오른 봉, 한국어로 양봉이고 푸른색으로 칠한 봉은 하루동안 최종적으로 가격이 내려간 봉, 음봉이다.
- open: 시작가 (시가)
- close: 종료가 (종가)
- shadowHigh: 장중 최고가
- shadowLow: 장중 최저가

- 주식 자료형인 CSStock과 샘플 데이터를 불러오기 위한 유틸 클래스
data class CSStock( var createdAt: Long = 0, val open: Float, val close: Float, val shadowHigh: Float, val shadowLow: Float )
object DataUtil { fun getCSStockData(): List<CSStock> { return listOf( CSStock( createdAt = 0, open = 222.8F, close = 222.9F, shadowHigh = 224.0F, shadowLow = 222.2F ), CSStock( createdAt = 1, open = 222.0F, close = 222.2F, shadowHigh = 222.4F, shadowLow = 222.0F ), CSStock( createdAt = 2, open = 222.2F, close = 221.9F, shadowHigh = 222.5F, shadowLow = 221.5F ), CSStock( createdAt = 3, open = 222.4F, close = 222.3F, shadowHigh = 223.7F, shadowLow = 222.1F ), CSStock( createdAt = 4, open = 221.6F, close = 221.9F, shadowHigh = 221.9F, shadowLow = 221.5F ), CSStock( createdAt = 5, open = 221.8F, close = 224.9F, shadowHigh = 225.0F, shadowLow = 221.0F ), CSStock( createdAt = 6, open = 225.0F, close = 220.2F, shadowHigh = 225.4F, shadowLow = 219.2F ), CSStock( createdAt = 7, open = 222.2F, close = 225.9F, shadowHigh = 227.5F, shadowLow = 222.2F ), CSStock( createdAt = 8, open = 226.0F, close = 228.1F, shadowHigh = 228.1F, shadowLow = 225.1F ), CSStock( createdAt = 9, open = 227.6F, close = 228.9F, shadowHigh = 230.9F, shadowLow = 226.5F ), CSStock( createdAt = 10, open = 228.6F, close = 228.6F, shadowHigh = 230.9F, shadowLow = 228.0F ) ) } }
차트 그리기
하루동안 가격 변동이 없을 경우 neautral 상태가 되는데, 이때는 Color.DKGRAY 색깔로 칠하도록 해두었다. 필요에 따라 다른 색깔로 바꾸면된다.
class CandleStickChartActivity : AppCompatActivity() { private lateinit var binding: ActivityCandleStickChartBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityCandleStickChartBinding.inflate(layoutInflater) setContentView(binding.root) val entries = ArrayList<CandleEntry>() for (csStock in DataUtil.getCSStockData()) { entries.add(CandleEntry( csStock.createdAt.toFloat(), csStock.shadowHigh, csStock.shadowLow, csStock.open, csStock.close )) } val dataSet = CandleDataSet(entries, "").apply { // 심지 부분 shadowColor = Color.LTGRAY shadowWidth = 1F // 음봄 decreasingColor = Color.BLUE decreasingPaintStyle = Paint.Style.FILL // 양봉 increasingColor = Color.RED increasingPaintStyle = Paint.Style.FILL neutralColor = Color.DKGRAY setDrawValues(false) // 터치시 노란 선 제거 highLightColor = Color.TRANSPARENT } binding.chart.axisLeft.run { setDrawAxisLine(false) setDrawGridLines(false) textColor = Color.TRANSPARENT } binding.chart.axisRight.run { isEnabled = false } // X 축 binding.chart.xAxis.run { textColor = Color.TRANSPARENT setDrawAxisLine(false) setDrawGridLines(false) setAvoidFirstLastClipping(true) } // 범례 binding.chart.legend.run { isEnabled = false } binding.chart.apply { this.data = CandleData(dataSet) description.isEnabled = false isHighlightPerDragEnabled = true requestDisallowInterceptTouchEvent(true) invalidate() } } }
'프로그래밍 > Android' 카테고리의 다른 글
[안드로이드] 프로젝트에 Sentry 연동방법, Proguard 적용까지 (0) | 2021.01.12 |
---|---|
[Kotlin/Java] 생년월일 기준으로 현재 만 나이 계산하기 (0) | 2021.01.11 |
[안드로이드] 주식차트 그리기 (Drawing LineChart with MPAndroidChart, Differentiate line colors by limit line value) (2) | 2021.01.09 |
[Java/Kotlin] 안드로이드 DP to PX 변환하기 (0) | 2021.01.08 |
[안드로이드] RecyclerView의 자동 스크롤 막기 (0) | 2021.01.08 |