공부/Android

MPAndroidChart 안드로이드에서 그래프 그리기

데자와 맛있다 2022. 11. 3. 00:03

MPAndroidChart란

안드로이드 앱에서 그래프를 그려주는 라이브러리로 많은 사람들이 사용중이다

https://github.com/PhilJay/MPAndroidChart

 

GitHub - PhilJay/MPAndroidChart: A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubb

A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations. - GitHub - PhilJay/MPAndroidChart:...

github.com

 

gradle에 추가

이부분에서 

Build was configured to prefer settings repositories over project repositories but repository 'BintrayJCenter' was added by build file 'build.gradle'

이라는 에러가 생길 수 있다 이는 아트릭폭스 이후 버전일때 gradle에 추가하는 방법이 변했기 때문이다

settings.gradle에도 디펜던시 추가가 필요하다

-build.gradle app

dependencies {
...(생략)
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

-settings.gradle

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {url'https://jitpack.io'}
        jcenter() // Warning: this repository is going to shut down soon

    }
}

 

 

만들어 보자

-activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    >

    
    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/lineChart"
        android:layout_width="360dp"
        android:layout_height="320dp"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
         />

</LinearLayout>

-MainActivity.java

public class MainActivity extends AppCompatActivity {
    private LineChart lineChart;
    private  List<Entry> entryList1;
    private  List<Entry> entryList2;
    private  List<Entry> entryList3;
    private  List<Entry> entryList4;
    private  List<Entry> entryList5;
    private  List<Entry> entryList6;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 위젯에 대한 참조.
        lineChart=(LineChart)findViewById(R.id.lineChart);
        // URL 설정.
        String url = "http://퍼블릭IPv4주소/어쩌고.php";

        // AsyncTask를 통해 HttpURLConnection 수행.
        NetworkTask networkTask = new NetworkTask(url, null);
        networkTask.execute();
        entryList1=new ArrayList<Entry>();
        entryList2=new ArrayList<Entry>();
        entryList3=new ArrayList<Entry>();
        entryList4=new ArrayList<Entry>();
        entryList5=new ArrayList<Entry>();
        entryList6=new ArrayList<Entry>();

    }

    public class NetworkTask extends AsyncTask<Void, Void, String> {

        private String url;
        private ContentValues values;

        public NetworkTask(String url, ContentValues values) {

            this.url = url;
            this.values = values;
        }

        @Override
        protected String doInBackground(Void... params) {

            String result; // 요청 결과를 저장할 변수.
            RequestHttpURLConnection requestHttpURLConnection = new RequestHttpURLConnection();
            result = requestHttpURLConnection.request(url, values); // 해당 URL로 부터 결과물을 얻어온다.

            return result;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //doInBackground()로 부터 리턴된 값이 onPostExecute()의 매개변수로 넘어오므로 s를 출력한다.

            doJSONParser(s);
        }
    }
    void doJSONParser(String str){
        int time=0;//시간
        try{
            
            JSONObject order = new JSONObject(str);
            JSONArray index = order.getJSONArray("bio");
            for (int i = 0; i < index.length(); i++) {
                JSONObject tt = index.getJSONObject(i);
                entryList1.add(new Entry(time,Integer.parseInt(tt.getString("data1"))));
                entryList2.add(new Entry(time,Float.parseFloat(tt.getString("data2"))));
                entryList3.add(new Entry(time,Integer.parseInt(tt.getString("data3"))));
                entryList4.add(new Entry(time,Integer.parseInt(tt.getString("data4"))));
                entryList5.add(new Entry(time,Integer.parseInt(tt.getString("data5"))));
                entryList6.add(new Entry(time,Integer.parseInt(tt.getString("data6"))));
                time++;
            }
            LineDataSet dataSet1=new LineDataSet(entryList1,"data1");
            dataSet1.setDrawValues(false);
            dataSet1.setColor(Color.parseColor("#F79AB3"));
            dataSet1.setDrawCircles(false);
            dataSet1.setLineWidth(3);

            LineDataSet dataSet2=new LineDataSet(entryList2,"data2");
            dataSet2.setDrawValues(false);
            dataSet2.setColor(Color.parseColor("#F7C69A"));
            dataSet2.setDrawCircles(false);
            dataSet2.setLineWidth(3);


            LineDataSet dataSet3=new LineDataSet(entryList3,"data3");
            dataSet3.setDrawValues(false);
            dataSet3.setColor(Color.parseColor("#ECF99B"));
            dataSet3.setDrawCircles(false);
            dataSet3.setLineWidth(3);


            LineDataSet dataSet4=new LineDataSet(entryList4,"data4");
            dataSet4.setDrawValues(false);
            dataSet4.setColor(Color.parseColor("#9BF99E"));
            dataSet4.setDrawCircles(false);
            dataSet4.setLineWidth(3);


            LineDataSet dataSet5=new LineDataSet(entryList5,"data5");
            dataSet5.setDrawValues(false);
            dataSet5.setColor(Color.parseColor("#9AD8F7"));
            dataSet5.setDrawCircles(false);
            dataSet5.setLineWidth(3);


            LineDataSet dataSet6=new LineDataSet(entryList6,"data6");
            dataSet6.setDrawValues(false);
            dataSet6.setColor(Color.parseColor("#E89AF7"));
            dataSet6.setDrawCircles(false);
            dataSet6.setLineWidth(3);


            LineData chartData=new LineData();
            chartData.addDataSet(dataSet1);
            chartData.addDataSet(dataSet2);
            chartData.addDataSet(dataSet3);
            chartData.addDataSet(dataSet4);
            chartData.addDataSet(dataSet5);
            chartData.addDataSet(dataSet6);

            lineChart.setData(chartData);
            lineChart.invalidate();
        }
        catch (JSONException e){ ;}


    }



}

 

-참고

https://ideajini.tistory.com/15

 

[안드로이드] Android studio Arctic Fox 버전 이후 gradle allprojects 추가방법

안드로이드 스튜디오 버전을 업데이트하고 신규 프로젝트파일을 생성했습니다. 라이브러리 추가가 필요해서 jcenter와 jitpack.io 레포지토리 등록을 평소처럼 프로젝트 단위의 build.gradle에서 추가

ideajini.tistory.com

https://under-desk.tistory.com/183

 

[안드로이드] MPAndroidChart 꺾은선 그래프 만들기

PhilJay/MPAndroidChart A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, dragging and animations. - PhilJay/MPAndroidChart github.com MPAndroidChart 링크 build.gr

under-desk.tistory.com

https://n2infotech.co.kr/102

 

안드로이드 스튜디오에서 MPAndroidChart 사용법

안드로이드 스튜디오에서 MPAndroidChart 사용법 참조사이트 : 지민의 개발개발 안드로이드앱에서 차트를 기리기 위해 여러 사이트를 전전했지만 구체적인 방법을 알려주는데를 찾비 못했다. 그

n2infotech.co.kr