안드로이드로 그래프를 그려주고 싶습니다. 구글링을 해보니 MPAndroidChart 라는 라이브러리가 괜찮은 모양입니다.
네이티브 안드로이드 개발을 해본지가 까마득 하기에 공부하며 기록할 겸 설치 및 테스트를 기록합니다.
(마지막으로 네이티브 안드로이드 개발해봤던 것이 이클립스를 이용하고 Gradle 도 없던 시절이라...)
Quick Start 를 보면 Gradle Setup 과 Maven Setup 두가지 방식이 있는거 같습니다.
Android Studio 를 통해 생성한 빈 프로젝트에 Gradle 이 보이니 Gradle Setup 을 해봅시다.
Gradle 이 뭔지 잘 모르겠지만 외부 라이브러리를 참조하게 도와주는 녀석인가 봅니다.
build.gradle 파일을 열어보니 가이드와 일치하는 repositories 와 dependencies 가 보입니다.
이곳에 내용을 추가해 봅시다.
에러가 나네요...
Gradle sync failed: Could not find method implementation() for arguments [com.github.PhilJay:MPAndroidChart:v3.1.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHanGradle sync failed: Could not find method implementation() for arguments [com.github.PhilJay:MPAndroidChart:v3.1.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
구글링을 해보지만 정확히 모르겠습니다.
근데 잘 보니 build.gradle 파일이 하나 더 있네요.
build.gradle 파일이 Project 와 Module 두개로 구분되어 있습니다.
왠지 Module 에 외부 라이브러리가 들어가는게 더 맞는거 같은 느낌입니다.
위치를 옮겨 봅시다.
이번엔 성공 했네요.
참고로 Gradle 변경 후 제대로 됬는지 테스트는 Sync Gradle 버튼을 이용했습니다.
Gralde 수정 후 추가된 라이브러리를 실제 프로젝트에 반영하는 방법이 있지 않을까 싶었는데 상단에 Sync Gradle 버튼이 있더군요.
어찌어찌 외부 라이브러리 연동까지 성공 했다고 생각 됩니다.
이제 예제 코드를 짜서 테스트 해봅시다.
테스트 코드는 Document 의 Getting Started 를 참고했습니다.
우선 activity_main.xml 에 레이아웃을 잡아주고
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Java 코드를 작성해 줍니다. 참고로 전 예문에 나와 있는대로 LineChart 만 썼었는데 당연했지만 에러가 났었습니다.
라이브러리를 import 해줬어야 됬는데 공식 문서를 찾아보면 있지만 에러가 나는 부분에서 Alt+Enter 를 눌러주면 자동으로 import 해주더군요.
LineDataSet 에 색상 같은 값을 설정해 줄수 있는거 같은데 일단 귀찮으니 아무렇게나 적어봅시다.
(Color.red 하면 빨간색이 적용되는 줄 알았는데 Color.red(int) 더군요... 무슨 값을 넣는거지...)
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LineChart lineChart = (LineChart)findViewById(R.id.chart);
List<Entry> entries = new ArrayList<Entry>();
entries.add(new Entry(1, 1));
entries.add(new Entry(2, 2));
entries.add(new Entry(3, 3));
entries.add(new Entry(1, 1));
entries.add(new Entry(4, 4));
entries.add(new Entry(5, 5));
entries.add(new Entry(2, 2));
entries.add(new Entry(1, 1));
LineDataSet dataSet = new LineDataSet(entries, "Label");
dataSet.setColor(Color.red(1));
dataSet.setValueTextColor(Color.blue(1));
LineData lineData = new LineData(dataSet);
lineChart.setData(lineData);
lineChart.invalidate();
}
}
스마트폰에 물려서 테스트를 돌려봅니다.
뭔가 이상한거 같지만 그래프는 나옵니다.
전체적으로 이게 뭐지 하는 주먹구구식의 진행이었지만 어쨌든. 테스트 까지 성공 했습니다. 짬이 나면 나머지는 차차 공부해 보기로 하고... 그냥 이런 사람도 있구나 생각해 주시고, 혹시나 보시는 분이 계시다면 조금이나마 도움이 됬으면 좋겠습니다.
'Works > Android' 카테고리의 다른 글
안드로이드 기기 복구 (0) | 2020.10.18 |
---|---|
[Android] Android Library(ARR) 배포 - JCenter(Bintray) (0) | 2020.08.31 |
[Android] VS Code 에서 Flutter 프로젝트 생성하기 (0) | 2019.12.03 |
[Android] Windows 에서 Flutter 개발 환경 구축 (0) | 2019.12.03 |
Google Play Console Unsupported API Warning Issues (0) | 2019.10.14 |
댓글