<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } //依賴 dependencies{ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <com.github.mikephil.charting.charts.LineChart android:id="@+id/lineChart" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:layout_margin="15dp"/> </RelativeLayout>
private LineChart lineChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lineChart = (LineChart) findViewById(R.id.lineChart); //建立描述資訊 Description description = new Description(); description.setText("測試圖表"); description.setTextColor(Color.RED); description.setTextSize(20); lineChart.setDescription(description);//設定圖表描述資訊 lineChart.setNoDataText("沒有資料哦");//沒有資料時顯示的文字 lineChart.setNoDataTextColor(Color.BLUE);//沒有資料時顯示文字的顏色 lineChart.setDrawGridBackground(false);//chart 繪圖區後面的背景矩形將繪製 lineChart.setDrawBorders(false);//禁止繪製圖表邊框的線 //lineChart.setBorderColor(); //設定 chart 邊框線的顏色。 //lineChart.setBorderWidth(); //設定 chart 邊界線的寬度,單位 dp。 //lineChart.setLogEnabled(true);//列印紀錄檔 //lineChart.notifyDataSetChanged();//重新整理資料 //lineChart.invalidate();//重繪 initDate(); initXY(); } private void initDate() { /** * Entry 座標點物件 建構函式 第一個引數為x點座標 第二個為y點 */ ArrayList<Entry> values1 = new ArrayList<>(); ArrayList<Entry> values2 = new ArrayList<>(); values1.add(new Entry(1, 10)); values1.add(new Entry(2, 15)); values1.add(new Entry(3, 20)); values1.add(new Entry(4, 5)); values1.add(new Entry(5, 30)); values1.add(new Entry(6, 15)); values1.add(new Entry(7, 6)); values2.add(new Entry(1, 20)); values2.add(new Entry(2, 15)); values2.add(new Entry(3, 13)); values2.add(new Entry(4, 8)); values2.add(new Entry(5, 9)); values2.add(new Entry(6, 12)); values2.add(new Entry(7, 15)); //LineDataSet每一個物件就是一條連線線 LineDataSet set1; LineDataSet set2; //設定圖例 //獲取圖例 Legend legend=mChart.getLegend(); //是否開啟設定圖例 legend.setEnabled(true); //設定圖例文字大小 legend.setTextSize(50f); //設定圖例文字顏色 legend.setTextColor(Color.BLUE); //如果設定為true,那麼當圖例過多或者過長一行顯示不下的時候就會自適應換行 legend.setWordWrapEnabled(true); //設定表格的最大相對大小,預設為0.95f(95%) legend.setMaxSizePercent(0.95f); //設定圖例位置 legend.setPosition(Legend.LegendPosition.ABOVE_CHART_LEFT); //設定圖例形狀:如SQUARE、CIRCLE、LINE、DEFAULT legend.setForm(Legend.LegendForm.CIRCLE); //設定圖例XY方向的間隔寬度 legend.setXEntrySpace(20f); legend.setYEntrySpace(20f); //設定圖例標籤到文字之間的距離 legend.setFormToTextSpace(20f); //設定文字包裝 legend.setWordWrapEnabled(true); //判斷圖表中原來是否有資料 if (lineChart.getData() != null && lineChart.getData().getDataSetCount() > 0) { //獲取資料1 set1 = (LineDataSet) lineChart.getData().getDataSetByIndex(0); set1.setValues(values1); set2 = (LineDataSet) lineChart.getData().getDataSetByIndex(1); set2.setValues(values2); //重新整理資料 lineChart.getData().notifyDataChanged(); lineChart.notifyDataSetChanged(); } else { //設定資料1 引數1:資料來源 引數2:圖例名稱setValueFormatter set1 = new LineDataSet(values1, "測試資料1"); set1.setColor(Color.BLUE);//兩個點之間的距離連線線 set1.setCircleColor(Color.WHITE);//資料展示的圓點顏色 set1.setLineWidth(3f);//設定線寬 set1.setCircleRadius(3f);//設定焦點圓心的大小 set1.enableDashedHighlightLine(2f, 5f, 0f);//點選後的高亮線的顯示樣式 set1.setHighlightLineWidth(1f);//設定點選交點後顯示高亮線寬 set1.setHighlightEnabled(true);//是否禁用點選高亮線 set1.setHighLightColor(Color.YELLOW);//設定點選交點後顯示交高亮線的顏色 set1.setValueTextSize(9f);//設定顯示值的文字大小 set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);//直線 變成 曲線 set1.setDrawValues(false); //不顯示數值 // set1.setValueFormatter(new LargeValueFormatter("℃"));//顯示數值的樣式 //陰影填充 // set1.setDrawFilled(true);//設定禁用範圍背景填充 陰影 // set1.setFillDrawable(getResources().getDrawable(R.drawable.line_gradient_bg_shape)); //設定資料2 set2 = new LineDataSet(values2, "測試資料2"); set2.setColor(Color.GRAY);//兩個點之間的距離連線線 set2.setCircleColor(Color.WHITE);//資料展示的圓點顏色 set2.setLineWidth(3f);//設定線寬 set2.setCircleRadius(3f);//設定焦點圓心的大小 set2.enableDashedHighlightLine(2f, 5f, 0f);//點選後的高亮線的顯示樣式 set2.setHighlightLineWidth(1f);//設定點選交點後顯示高亮線寬 set2.setHighlightEnabled(true);//是否禁用點選高亮線 set2.setHighLightColor(Color.YELLOW);//設定點選交點後顯示交高亮線的顏色 set2.setValueTextSize(9f);//設定顯示值的文字大小 set2.setMode(LineDataSet.Mode.CUBIC_BEZIER);//直線 變成 曲線 set2.setDrawValues(false); //不顯示數值 //陰影填充 // set2.setDrawFilled(true);//設定禁用範圍背景填充 陰影 // set2.setFillDrawable(getResources().getDrawable(R.drawable.line_gradient_bg_shape2)); //儲存LineDataSet集合 ArrayList<ILineDataSet> dataSets = new ArrayList<>(); dataSets.add(set1); // 新增資料集 dataSets.add(set2);// 新增資料集 //建立LineData物件 屬於LineChart折線圖的資料集合 LineData data = new LineData(dataSets); // 新增到圖表中 lineChart.setData(data); //繪製圖表 lineChart.invalidate(); } } private void initXY() { ArrayList<String> xvalue=new ArrayList<>();//x軸時間 xvalue.add("10-1");//當然這樣可以把X軸的資料隨便設定成啥都行。 xvalue.add("10-2"); xvalue.add("10-3"); xvalue.add("10-4"); xvalue.add("10-5"); xvalue.add("10-6"); xvalue.add("10-7"); //獲取此圖表的x軸 XAxis xAxis = lineChart.getXAxis(); xAxis.setEnabled(true);//設定軸啟用或禁用 如果禁用以下的設定全部不生效 xAxis.setDrawAxisLine(true);//是否繪製軸線 xAxis.setDrawGridLines(true);//設定x軸上每個點對應的線 xAxis.setDrawLabels(true);//繪製標籤 指x軸上的對應數值 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//設定x軸的顯示位置 xAxis.setGranularity(1);//讓x軸上自定義的值和折線上相對應 xAxis.setAxisLineColor(R.color.white);//設定橫軸線的顏色 xAxis.setTextColor(R.color.white);//設定橫軸字型顏色 xAxis.setValueFormatter(new ValueFormatter() { @Override public String getAxisLabel(float value, AxisBase axis) { return xvalue.get((int) value - 1); } }); // xAxis.setLabelsToSkip(0); //xAxis.setTextSize(20f);//設定字型 //xAxis.setTextColor(Color.BLACK);//設定字型顏色 //設定豎線的顯示樣式為虛線 //lineLength控制虛線段的長度 //spaceLength控制線之間的空間 // xAxis.enableGridDashedLine(0f, 0f, 0f); // xAxis.setAxisMinimum(0f);//設定x軸的最小值 // xAxis.setAxisMaximum(10f);//設定最大值 // xAxis.setAvoidFirstLastClipping(true);//圖表將避免第一個和最後一個標籤條目被減掉在圖表或螢幕的邊緣 // xAxis.setLabelRotationAngle(0f);//設定x軸標籤的旋轉角度 // 設定x軸顯示標籤數量 還有一個過載方法第二個引數為布林值強制設定數量 如果啟用會導致繪製點出現偏差 // xAxis.setLabelCount(10); // xAxis.setTextColor(Color.BLUE);//設定軸標籤的顏色 // xAxis.setTextSize(24f);//設定軸標籤的大小 // xAxis.setGridLineWidth(10f);//設定豎線大小 // xAxis.setGridColor(Color.RED);//設定豎線顏色 // xAxis.setAxisLineColor(Color.GREEN);//設定x軸線顏色 // xAxis.setAxisLineWidth(5f);//設定x軸線寬度 // xAxis.setValueFormatter();//格式化x軸標籤顯示字元 /** * Y軸預設顯示左右兩個軸線 */ //獲取右邊的軸線 YAxis rightAxis=lineChart.getAxisRight(); //設定圖表右邊的y軸禁用 rightAxis.setEnabled(false); //獲取左邊的軸線 YAxis leftAxis = lineChart.getAxisLeft(); //設定格線為虛線效果 leftAxis.enableGridDashedLine(0f, 0f, 0f); //是否繪製0所在的格線 leftAxis.setDrawZeroLine(false); leftAxis.setEnabled(true);//設定軸啟用或禁用 如果禁用以下的設定全部不生效 leftAxis.setDrawAxisLine(true);//是否繪製軸線 leftAxis.setDrawGridLines(true);//設定x軸上每個點對應的線 leftAxis.setDrawLabels(true);//繪製標籤 指x軸上的對應數值 leftAxis.setGranularity(1);//讓y軸上自定義的值和折線上相對應 leftAxis.setAxisLineColor(R.color.white);//設定縱軸線的顏色 leftAxis.setTextColor(R.color.white); //設定縱軸字型顏色 lineChart.setTouchEnabled(true); // 設定是否可以觸控 lineChart.setDragEnabled(false); // 是否可以拖拽 lineChart.setScaleEnabled(false);// 是否可以縮放 x和y軸, 預設是true lineChart.setScaleXEnabled(false); //是否可以縮放 僅x軸 lineChart.setScaleYEnabled(false); //是否可以縮放 僅y軸 lineChart.setPinchZoom(false); //設定x軸和y軸能否同時縮放。預設是否 lineChart.setDoubleTapToZoomEnabled(false);//設定是否可以通過雙擊螢幕放大圖表。預設是true lineChart.setHighlightPerDragEnabled(true);//能否拖拽高亮線(資料點與座標的提示線),預設是true lineChart.setDragDecelerationEnabled(false);//拖拽捲動時,手放開是否會持續捲動,預設是true(false是拖到哪是哪,true拖拽之後還會有緩衝) lineChart.setDragDecelerationFrictionCoef(0.99f);//與上面那個屬性配合,持續捲動時的速度快慢,[0,1) 0代表立即停止。 lineChart.getXAxis().setDrawGridLines(false);//設定格線 lineChart.getAxisLeft().setDrawGridLines(false);//去掉左右邊線 lineChart.getAxisRight().setDrawGridLines(false);//去掉左右邊線 final MarkerViews mv = new MarkerViews(this, R.layout.maekertextview,lineChart,xvalue); mv.setChartView(lineChart); // set the marker to the chart lineChart.setMarker(mv); //自定義的MarkerView物件 // MyMarkerView mv = new MyMarkerView(this, R.layout.item); // mv.setChartView(lineChart); // lineChart.setMarker(mv); }
public class MarkerViews extends MarkerView { private TextView tvContent;//自己定義的xmL LineChart lineChart;//圖表控制元件 ArrayList<String> xvalue;//X軸資料來源 /** * Constructor. Sets up the MarkerView with a custom layout resource. * * @param context * @param layoutResource the layout resource to use for the MarkerView */ public MarkerViews(Context context, int layoutResource, LineChart lineChart,ArrayList<String> xvalue) { super(context,layoutResource); tvContent = (TextView) findViewById(R.id.tvContent1); this.lineChart=lineChart; this.xvalue=xvalue; } @Override public void refreshContent(Entry e, Highlight highlight) {//重寫refreshContent方法(注意,在 //MPAndroidChart早期版本里這裡有三個引數,這裡有兩個,我這是MPAndroidChart 3.0.2版本 //下面這裡是關鍵的 LineData lineData=lineChart.getLineData();//得到已經繪製成型的折線圖的資料 LineDataSet set=(LineDataSet)lineData.getDataSetByIndex(0);//獲取第一條折線圖Y軸資料 LineDataSet set1=(LineDataSet)lineData.getDataSetByIndex(1);//獲取第二條折線圖Y軸資料 int DataSetIndex=highlight.getDataSetIndex();//獲取點選的是哪條折線上的交叉點,0就是第一條,以此類推 int index; if (DataSetIndex==0){ index= set.getEntryIndex(e);//根據點選的該條折線的點,獲取當前Y軸資料對應的index值, }else { index= set1.getEntryIndex(e);//根據點選的該條折線的點,獲取當前Y軸資料對應的index值, } //根據index值,分別獲取當前X軸上對應的兩條折線的Y軸的值 Log.i("x,y軸","/"+xvalue.get(index)+"/"+e.getY()); tvContent.setText("時間:"+xvalue.get(index)+"n線上人數:"+e.getY()); super.refreshContent(e, highlight); } @Override public MPPointF getOffset() { return new MPPointF(-(getWidth() / 2), -getHeight()); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/white" > <TextView android:id="@+id/tvContent1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="7dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:text="" android:singleLine="false" android:textSize="12dp" android:textColor="@android:color/black" android:textAppearance="?android:attr/textAppearanceSmall" /> </RelativeLayout>
以上就是Android畫圖實現MPAndroidchart折線圖範例詳解的詳細內容,更多關於Android MPAndroidchart折線圖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45