在org.achartengine.renderer這個包里有一個類BasicStroke,可以改變線型(實線、虛線、點線),而折線圖中用的是XYMultipleSeriesRenderer這個類,它繼承自DefaultRenderer,這個與BasicStroke是一個包里的子類,DefaultRenderer有一個方法是setShowGridY(boolean showGrid),感覺在這個方法里肯定有設(shè)置線型的語句,但是我現(xiàn)在沒找到AChartEngine的具體五毛源碼,不知道這個方法具體是怎樣的,只能提供給你一個思路……我?guī)讉€月前也搗鼓過AChartEngine
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元高安做網(wǎng)站,已為上家服務(wù),為高安各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
這個可以用安卓自定義view里的ondraw()方法來實現(xiàn),通過獲取的坐標(biāo),畫圖連接起來即可
下面的例子是一個畫矩形 的代碼,你可以試著改成畫曲線
public class AndroidTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView mv = new MyView(this);
setContentView(mv);
}
public class MyView extends View {
MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// 首先定義一個paint
Paint paint = new Paint();
// 繪制矩形區(qū)域-實心矩形
// 設(shè)置顏色
paint.setColor(Color.BLUE);
// 設(shè)置樣式-填充
paint.setStyle(Style.FILL);
// 繪制一個矩形
canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);
// 繪空心矩形
// 設(shè)置顏色
paint.setColor(Color.RED);
// 設(shè)置樣式-空心矩形
paint.setStyle(Style.STROKE);
// 繪制一個矩形
canvas.drawRect(new Rect(10, 10, 100, 30), paint);
// 繪文字
// 設(shè)置顏色
paint.setColor(Color.GREEN);
// 繪文字
canvas.drawText("Hello", 10, 50, paint);
// 繪圖
// 從資源文件中生成位圖
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
// 繪圖
canvas.drawBitmap(bitmap, 10, 60, paint);
}
}
}
用Canvas的drawLine方法就可以了canvas.drawLine(startX, startY, stopX, stopY, paint);
startX, startY為起始坐標(biāo);
stopX, stopY為終點坐標(biāo);
paint就是一個Paint對象;
比如你的橫坐標(biāo)的第一個坐標(biāo)是(1, 2), 第二個坐標(biāo)是(2, 5), 第三個坐標(biāo)是(3, 10),那么這段折線可以這樣畫:
canvas.drawLine(1,2,2,5,paint);
canvas.drawLine(2,5,3,10,paint);
以此類推,剩下的3段折線都可以這樣畫出來
推薦你幾個相關(guān)開源項目,可以根據(jù)需要自己選擇,自己畫還是比較麻煩的:MPAndroidChart強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環(huán)圖、范圍(高至低)條形圖、網(wǎng)狀圖及各種圖的結(jié)合;支持圖的拖拽縮放;支持Android2.2以上,支持橫縱軸縮放,多指縮放,展現(xiàn)動畫、高亮、保存到sdcard、從文件讀取圖表achartengine強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環(huán)圖、范圍(高至低)條形圖、撥號圖/表、立方線圖及各種圖的結(jié)合GraphView繪制圖表和曲線圖的View,可用于Android上的曲形圖、柱狀圖、波浪圖展示HoloGraphLibrary繪制線狀圖、柱狀圖、餅狀圖XCL-ChartsXCL-Charts基于原生的Canvas來繪制各種圖表,在設(shè)計時,盡量在保證開發(fā)效率的同時,給使用者提供足夠多的定制化能力。因此使用簡便,同時具有相當(dāng)靈活的定制能力。目前支持3D/非3D柱形圖(BarChart)、3D/非3D餅圖(PieChart)、堆積圖(StackedBarChart)、面積圖(AreaChart)、折線圖(LineChart)、曲線圖(SplineChart)、環(huán)形圖(DountChart)、南丁格爾玫瑰圖(RoseChart)、儀表盤(DialChart)、刻度盤(GaugeChart)、雷達圖(RadarChart)、圓形圖(CircleChart)等圖表。其它特性還包括支持圖表縮放、手勢移動、動畫顯示效果、高密度柱形顯示、圖表分界定制線、多圖表的混合顯示及同數(shù)據(jù)源不同類型圖表切換等。EazeGraphAndroid圖表庫,支持柱狀圖、分層柱狀圖、餅狀圖、線性圖WilliamChart繪制圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型,并且支持Android2.2及以上的系統(tǒng)。HelloChartsforAndroid支持折線圖、柱狀圖、餅圖、氣泡圖、組合圖;支持預(yù)覽、放大縮小,滾動,部分圖表支持動畫;支持Android2.2以上這些項目都可以在GitHub搜索到。
package?com.example.testcanvasdraw;?????????????????????????????????????????????????????????????????import?java.util.ArrayList;?import?java.util.List;?import?java.util.Random;?????????????????????????????????????????????????????????????????import?android.content.Context;?import?android.graphics.Canvas;?import?android.graphics.Color;?import?android.graphics.Paint;?import?android.os.Handler;?import?android.os.Message;?import?android.util.AttributeSet;?import?android.view.View;?????????????????????????????????????????????????????????????????public?class?MyView?extends?View{?????private?int?XPoint?=?60;?????private?int?YPoint?=?260;?????private?int?XScale?=?8;??//刻度長度?????private?int?YScale?=?40;?????private?int?XLength?=?380;?????private?int?YLength?=?240;?????????????????????????????????????????????????????????????????????????private?int?MaxDataSize?=?XLength?/?XScale;?????????????????????????????????????????????????????????????????????????private?ListInteger?data?=?new?ArrayListInteger();?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????private?String[]?YLabel?=?new?String[YLength?/?YScale];?????????????????????????????????????????????????????????????????????????private?Handler?handler?=?new?Handler(){?????????public?void?handleMessage(Message?msg)?{?????????????if(msg.what?==?0x1234){?????????????????MyView.this.invalidate();?????????????}?????????};?????};?????public?MyView(Context?context,?AttributeSet?attrs)?{?????????super(context,?attrs);?????????for(int?i=0;?iYLabel.length;?i++){?????????????YLabel[i]?=?(i?+?1)?+?"M/s";?????????}?????????????????????????????????????????????????????????????????????????????????new?Thread(new?Runnable()?{?????????????????????????????????????????????????????????????????????????????????????????@Override?????????????public?void?run()?{?????????????????while(true){?????????????????????try?{?????????????????????????Thread.sleep(1000);?????????????????????}?catch?(InterruptedException?e)?{?????????????????????????e.printStackTrace();?????????????????????}?????????????????????if(data.size()?=?MaxDataSize){?????????????????????????data.remove(0);?????????????????????}?????????????????????data.add(new?Random().nextInt(4)?+?1);?????????????????????handler.sendEmptyMessage(0x1234);?????????????????}?????????????}?????????}).start();?????}?????????????????????????????????????????????????????????????????????????@Override?????protected?void?onDraw(Canvas?canvas)?{?????????super.onDraw(canvas);?????????Paint?paint?=?new?Paint();?????????paint.setStyle(Paint.Style.STROKE);?????????paint.setAntiAlias(true);?//去鋸齒?????????paint.setColor(Color.BLUE);?????????????????????????????????????????????????????????????????????????????????//畫Y軸?????????canvas.drawLine(XPoint,?YPoint?-?YLength,?XPoint,?YPoint,?paint);?????????????????????????????????????????????????????????????????????????????????//Y軸箭頭?????????canvas.drawLine(XPoint,?YPoint?-?YLength,?XPoint?-?3,?YPoint-YLength?+?6,?paint);??//箭頭?????????canvas.drawLine(XPoint,?YPoint?-?YLength,?XPoint?+?3,?YPoint-YLength?+?6?,paint);?????????????????????????????????????????????????????????????????????????????????//添加刻度和文字?????????for(int?i=0;?i?*?YScale??YLength;?i++)?{?????????????canvas.drawLine(XPoint,?YPoint?-?i?*?YScale,?XPoint?+?5,?YPoint?-?i?*?YScale,?paint);??//刻度?????????????????????????????????????????????????????????????????????????????????????????canvas.drawText(YLabel[i],?XPoint?-?50,?YPoint?-?i?*?YScale,?paint);//文字?????????}?????????????????????????????????????????????????????????????????????????????????//畫X軸?????????canvas.drawLine(XPoint,?YPoint,?XPoint?+?XLength,?YPoint,?paint);?????????System.out.println("Data.size?=?"?+?data.size());?????????if(data.size()??1){?????????????for(int?i=1;?idata.size();?i++){?????????????????canvas.drawLine(XPoint?+?(i-1)?*?XScale,?YPoint?-?data.get(i-1)?*?YScale,??????????????????????????XPoint?+?i?*?XScale,?YPoint?-?data.get(i)?*?YScale,?paint);?????????????}?????????}?????}?}
上面繪制折線部分我們還有一種方式同樣可以實現(xiàn):
if(data.size()??1){?????Path?path?=?new?Path();?????path.moveTo(XPoint,?YPoint?-?data.get(0)?*?YScale);?????for(int?i=1;?idata.size();?i++){?????????path.lineTo(XPoint?+?i?*?XScale,?YPoint?-?data.get(i)?*?YScale);?????}?????canvas.drawPath(path,?paint);?}
直接在旁邊寫數(shù)字就可以了。主要畫折線圖。
步驟一:折線圖的坐標(biāo)集
首先應(yīng)該創(chuàng)建 XYSeries對象 : 用于提供繪制的點集合的數(shù)據(jù)
XYSeries series = new XYSeries(titles[i]); // 根據(jù)每條線的名稱創(chuàng)建
將所有的坐標(biāo)加入這個集合
series .add (xV[k], yV[k]);
XYMultipleSeriesDataset對象 用于 保存點集數(shù)據(jù) ,包括每條曲線的X,Y坐標(biāo)
// 用于數(shù)據(jù)的存放
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset .addSeries (series);
步驟二:折線圖的樣式集
定義每條曲線的顏色
int [] colors = new int [] {Color. BLUE ,Color. GREEN };
定義每條曲線的點的形狀
PointStyle [] styles =
new PointStyle []{ PointStyle . CIRCLE , PointStyle . DIAMOND };
曲線圖的格式,包括顏色,值的范圍,點和線的形狀等等 都封裝在 XYSeriesRender對象中,再將XYSeriesRender對象封裝在 XYMultipleSeriesRenderer 對象中
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
r.setFillPoints(fill);
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.addSeriesRenderer(r);
設(shè)置折線圖名稱,坐標(biāo)軸的名稱,坐標(biāo)軸的起點重點,坐標(biāo)軸的顏色,坐標(biāo)軸上數(shù)字的顏色
setChartSettings(renderer, "Line Chart Demo" , "X" , "Y" , - 1 , 12, 0, 35 , Color. WHITE , Color. WHITE );
步驟三:顯示折線圖
View chart = ChartFactory. getLineChartView ( this , dataset, renderer);
setContentView(chart);
本文題目:android折線圖,移動折線圖
網(wǎng)站網(wǎng)址:http://m.rwnh.cn/article22/dsdhicc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計公司、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、企業(yè)建站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)