CombinedChart是柱狀圖和折線圖的組合圖形,固然也能夠做爲CandleStickChart和折線圖的組合圖形, 也就是K線圖和均線java
/** * 蠟燭圖和折線圖的組合圖形 */ public class CombinedChartUtils { private CombinedChart combinedChart; private XAxis xAxis; public CombinedChartUtils(CombinedChart combinedChart){ this.combinedChart = combinedChart; initSetting(); } /** * 經常使用設置 */ private void initSetting() { combinedChart.getDescription().setText(""); combinedChart.getDescription().setTextColor(Color.RED); combinedChart.getDescription().setTextSize(16);//設置描述的文字 ,顏色 大小 combinedChart.setNoDataText("無數據噢"); //沒數據的時候顯示 //這裏爲了 能夠使左右滑動 Matrix m=new Matrix(); m.postScale(1.5f, 1f);//兩個參數分別是x,y軸的縮放比例。例如:將x軸的數據放大爲以前的1.5倍 combinedChart.getViewPortHandler().refresh(m, combinedChart, false);//將圖表動畫顯示以前進行縮放 combinedChart.animateX(1000); // 當即執行的動畫,x軸 //設置圖例 Legend legend = combinedChart.getLegend(); // legend.setForm(Legend.LegendForm.NONE); //直接禁止圖例,x軸會顯示不全, 用這種方法解決 // legend.setTextColor(Color.TRANSPARENT); //設置X軸 xAxis = combinedChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//設置x軸位置 xAxis.setAxisMinimum(1);//設置x軸最小 // xAxis.setAxisMaximum(12);//設置x軸最大值 xAxis.setTextSize(14); xAxis.setTextColor(Color.RED); xAxis.setEnabled(true);//是否顯示x軸是否禁用 xAxis.setDrawLabels(true); //設置x軸標籤 即x軸上顯示的數值 xAxis.setDrawGridLines(true);//是否設置x軸上每一個點對應的線 即 豎向的網格線 xAxis.enableGridDashedLine(2,2,2); //豎線 虛線樣式 lineLength控制虛線段的長度 spaceLength控制線之間的空間 xAxis.setLabelRotationAngle(30f);//設置x軸標籤的旋轉角度 xAxis.setGranularity(1f);//x軸上設置間隔尺寸 //設置Y軸 YAxis yAxisLef = combinedChart.getAxisLeft(); yAxisLef.setTextSize(14); yAxisLef.setAxisMinimum(0); YAxis yAxisRight = combinedChart.getAxisRight();//獲取右側y軸 yAxisRight.setEnabled(false);//設置是否禁止 } /** * 設置單條折線圖的K線圖 數據 */ public void setSingleCombinedData(List<Entry> lineYVals, List<CandleEntry> candleYVals){ xAxis.setAxisMinimum(0); xAxis.setAxisMaximum((float)(candleYVals.size()+0.5)); //防止出現顯示一半柱狀圖的狀況 CombinedData data = new CombinedData(); LineData lineData = getSingleMa(lineYVals); data.setData(lineData); CandleData candleData = getCandleData(candleYVals); data.setData(candleData); combinedChart.setData(data); } /** * 折線圖(多條) * @param lineChartYs 折線Y軸值 * @param lineNames 折線圖名字 * @param lineColors 折線顏色 * @param candleYVals K線圖的y值 * @return */ public void setMoreCombinedData(List<List<Float>> lineChartYs, List<String> lineNames, List<Integer> lineColors, List<CandleEntry> candleYVals){ xAxis.setAxisMinimum(0); xAxis.setAxisMaximum((float)(candleYVals.size()+1)); //防止出現顯示一半柱狀圖的狀況 CombinedData data = new CombinedData(); LineData lineData = getMoreMA(lineChartYs, lineNames, lineColors); data.setData(lineData); CandleData candleData = getCandleData(candleYVals); data.setData(candleData); combinedChart.setData(data); } /** * 獲取蠟燭圖(K線圖) * @param candleYVals * @return */ private CandleData getCandleData(List<CandleEntry> candleYVals){ CandleDataSet candleDataSet = new CandleDataSet(candleYVals, ""); candleDataSet.setValueTextColor(Color.BLACK); candleDataSet.setValueTextSize(14); candleDataSet.setShadowColor(Color.DKGRAY);//設置影線的顏色 candleDataSet.setShadowWidth(0.5f);//設置影線的寬度 candleDataSet.setShadowColorSameAsCandle(true);//設置影線和蠟燭圖的顏色同樣 candleDataSet.setDecreasingColor(Color.GREEN);//設置減小色 candleDataSet.setDecreasingPaintStyle(Paint.Style.STROKE);//綠跌,空心描邊 candleDataSet.setIncreasingColor(Color.RED);//設置增加色 candleDataSet.setIncreasingPaintStyle(Paint.Style.FILL);//設置增加紅 實心 candleDataSet.setNeutralColor(Color.RED);//當天價格不漲不跌(一字線)顏色 candleDataSet.setHighlightEnabled(true);//設置定位線是否可用 candleDataSet.setHighLightColor(Color.BLACK); //設置定位線的顏色 candleDataSet.setHighlightLineWidth(0.5f);//設置定位線的線寬 candleDataSet.setBarSpace(0.9f);//0 至1 之間,越小蠟燭圖的寬度越寬 candleDataSet.setDrawValues(false);//設置是否顯示蠟燭圖上的文字 CandleData candleData = new CandleData(candleDataSet); return candleData; } /** * 獲取單條均線 * @param lineYVals y軸值 * @return */ private LineData getSingleMa(List<Entry> lineYVals){ LineDataSet lineDataSet = new LineDataSet(lineYVals, ""); lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);// 設置平滑曲線 lineDataSet.setHighLightColor(Color.RED); //設置高亮線的顏色 lineDataSet.setHighlightEnabled(false);//設置高亮線是否可用 lineDataSet.setColor(Color.BLACK);//設置折線顏色 lineDataSet.setCircleColor(Color.BLUE);//設置交點的圓圈的顏色 lineDataSet.setDrawCircles(false);//設置是否顯示交點 lineDataSet.setDrawValues(false); //設置是否顯示交點處的數值 lineDataSet.setValueTextColor(Color.RED); //設置交點上值的顏色 lineDataSet.setValueTextSize(14);//設置交點上值的字體大小 LineData lineData = new LineData(lineDataSet); return lineData; } /** * 折線圖(多條) * @param lineChartYs 折線Y軸值 * @param lineNames 折線圖名字 * @param lineColors 折線顏色 * @return */ private LineData getMoreMA(List<List<Float>> lineChartYs, List<String> lineNames, List<Integer> lineColors){ LineData lineData = new LineData(); for (int i = 0; i < lineChartYs.size(); i++) { ArrayList<Entry> yValues = new ArrayList<>(); for (int j = 0; j < lineChartYs.get(i).size(); j++) { yValues.add(new Entry(j, lineChartYs.get(i).get(j))); } LineDataSet lineDataSet = new LineDataSet(yValues, lineNames.get(i)); lineDataSet.setColor(lineColors.get(i));//設置折線顏色 lineDataSet.setCircleColor(lineColors.get(i)); //設置交點圓的顏色 lineDataSet.setValueTextColor(lineColors.get(i)); lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);// 設置平滑曲線 lineDataSet.setHighLightColor(Color.RED); //設置高亮線的顏色 lineDataSet.setHighlightEnabled(false);//設置高亮線是否可用 lineDataSet.setDrawCircles(false);//設置是否顯示交點 lineDataSet.setDrawValues(false); //設置是否顯示交點處的數值 lineDataSet.setValueTextSize(14);//設置交點上值的字體大小 lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT); lineData.addDataSet(lineDataSet); } return lineData; } }
Activity中使用,傳遞數據,這是單條折線圖dom
List<Entry> lineEntry = new ArrayList<>(); lineEntry.add(new Entry(0,3)); lineEntry.add(new Entry(1,5)); lineEntry.add(new Entry(2,6)); lineEntry.add(new Entry(3,5)); lineEntry.add(new Entry(4,2)); lineEntry.add(new Entry(5,8)); List<CandleEntry> barEntry = new ArrayList<>(); barEntry.add(new CandleEntry(1,8,1,3f,6f)); barEntry.add(new CandleEntry(2,8,1,8f,2f)); barEntry.add(new CandleEntry(3,3,2,2f,2f)); barEntry.add(new CandleEntry(4,5,1,4f,2f)); barEntry.add(new CandleEntry(5,6,2,3f,3f)); barEntry.add(new CandleEntry(6,8,2,3f,6f)); barEntry.add(new CandleEntry(7,7,3,3f,6f)); barEntry.add(new CandleEntry(8,7,2,6f,2f)); barEntry.add(new CandleEntry(9,6,2,2f,6f)); barEntry.add(new CandleEntry(10,9,5,6f,7f)); barEntry.add(new CandleEntry(11,5,1,3f,4f)); // combinedChartUtils.setSingleCombinedData(lineEntry,barEntry); //單條直線圖的K線圖
多條折線圖的數據傳遞post
List<String> names = new ArrayList<>(); names.add("MA5"); names.add("MA10"); names.add("MA30"); List<Integer> colors = new ArrayList<>(); colors.add(Color.YELLOW); colors.add(Color.RED); colors.add(Color.DKGRAY); //y軸數據集合 List<List<Float>> yLineDatas = new ArrayList<>(); //4種直方圖 for (int i = 0; i < 3; i++) { //y軸數 List<Float> yData = new ArrayList<>(); for (int j = 0; j <= 20; j++) { yData.add((float) (Math.random() * 10)); } yLineDatas.add(yData); } combinedChartUtils.setMoreCombinedData(yLineDatas,names,colors,barEntry); //設置多條折線
截圖如上,可是關於圖例有一點,若是我只想顯示均線的圖例,不顯示蠟燭圖的圖例,怎麼實現呢?求大神告知,字體
我暫時想到的方法就是使用圖例的setCustom方法,自定義圖例,這能夠實現,不知道還有沒有別的方式動畫