当前位置: 移动技术网 > IT编程>移动开发>Android > Android LineChart绘制多条曲线的方法

Android LineChart绘制多条曲线的方法

2019年07月23日  | 移动技术网IT编程  | 我要评论

幸福药方,穹高,小侠龙旋风剧情介绍

本文实例为大家分享了android linechart绘制多条曲线的具体代码,供大家参考,具体内容如下

目标效果:

1.新建custom_marker_view.xml页面作为点击弹出框的页面:

<?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="40dp"
 android:background="@drawable/marker2" >
 
 <textview
 android:id="@+id/tvcontent"
 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:textsize="12dp"
 android:textcolor="@android:color/white"
 android:ellipsize="end"
 android:singleline="true"
 android:textappearance="?android:attr/textappearancesmall" />
 
</relativelayout>

2.activity_main.xml页面:

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingbottom="10dp"
 android:paddingleft="10dp"
 android:paddingright="10dp"
 android:paddingtop="10dp"
 tools:context=".mainactivity" >
 
 <com.github.mikephil.charting.charts.linechart
 android:id="@+id/charttall"
 android:layout_width="match_parent"
 android:layout_height="400dp"
 android:layout_margintop="20dp" />
 
 
</relativelayout>

3.新建mymarkerview.java重写markview控件:

package com.example.weixu.drawline;
 
import android.content.context;
import android.widget.textview;
 
import com.github.mikephil.charting.data.candleentry;
import com.github.mikephil.charting.data.entry;
import com.github.mikephil.charting.utils.markerview;
import com.github.mikephil.charting.utils.utils;
 
public class mymarkerview extends markerview {
 
 private textview tvcontent;
 
 public mymarkerview(context context, int layoutresource) {
 super(context, layoutresource);
 
 tvcontent = (textview) findviewbyid(r.id.tvcontent);
 }
 
 @override
 public void refreshcontent(entry e, int datasetindex) {
 
 if (e instanceof candleentry) {
 candleentry ce = (candleentry) e;
 tvcontent.settext("" + utils.formatnumber(ce.gethigh(), 0, true));
 } else {
 tvcontent.settext("" +e.getval());
 }
 }
}

4.mainactivity.java页面:

package com.example.weixu.drawline;
 
import java.util.arraylist;
 
import android.app.activity;
import android.graphics.color;
import android.graphics.typeface;
import android.os.bundle;
import android.view.windowmanager;
 
import com.github.mikephil.charting.charts.barlinechartbase;
import com.github.mikephil.charting.charts.barlinechartbase.borderposition;
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 com.github.mikephil.charting.utils.legend;
import com.github.mikephil.charting.utils.legend.legendform;
import com.github.mikephil.charting.utils.xlabels;
import com.github.mikephil.charting.utils.xlabels.xlabelposition;
import com.github.mikephil.charting.utils.ylabels;
 
public class mainactivity extends activity {
 
 private linechart charttall;
 
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,
 windowmanager.layoutparams.flag_fullscreen);
 setcontentview(r.layout.activity_main);
 
 charttall = (linechart) findviewbyid(r.id.charttall);
 
 settype();
 
 // 刷新图表
 charttall.invalidate();
 }
 
 private void settype() {
 // 设置在y轴上是否是从0开始显示
 charttall.setstartatzero(true);
 //是否在y轴显示数据,就是曲线上的数据
 charttall.setdrawyvalues(true);
 //设置网格
 charttall.setdrawborder(true);
 charttall.setborderpositions(new barlinechartbase.borderposition[] {
 borderposition.bottom});
 //在chart上的右下角加描述
 charttall.setdescription("身高曲线图");
 //设置y轴上的单位
 charttall.setunit("cm");
 //设置透明度
 charttall.setalpha(0.8f);
 //设置网格底下的那条线的颜色
 charttall.setbordercolor(color.rgb(213, 216, 214));
 //设置y轴前后倒置
 charttall.setinvertyaxisenabled(false);
 //设置高亮显示
 charttall.sethighlightenabled(true);
 //设置是否可以触摸,如为false,则不能拖动,缩放等
 charttall.settouchenabled(true);
 //设置是否可以拖拽,缩放
 charttall.setdragenabled(true);
 charttall.setscaleenabled(true);
 //设置是否能扩大扩小
 charttall.setpinchzoom(true);
 //设置点击chart图对应的数据弹出标注
 mymarkerview mv = new mymarkerview(this, r.layout.custom_marker_view);
 mv.setoffsets(-mv.getmeasuredwidth() / 2, -mv.getmeasuredheight());
 charttall.setmarkerview(mv);
 charttall.sethighlightindicatorenabled(false);
 //设置字体格式,如正楷
 typeface tf = typeface.createfromasset(getassets(),
 "opensans-regular.ttf");
 charttall.setvaluetypeface(tf);
 
 xlabels xl = charttall.getxlabels();
 xl.setposition(xlabelposition.bottom); // 设置x轴的数据在底部显示
 xl.settypeface(tf); // 设置字体
 xl.settextsize(10f); // 设置字体大小
 xl.setspacebetweenlabels(3); // 设置数据之间的间距
 
 ylabels yl = charttall.getylabels();
 yl.settypeface(tf); // 设置字体
 yl.settextsize(10f); // s设置字体大小
 yl.setlabelcount(5); // 设置y轴最多显示的数据个数
 // 加载数据
 setdata();
 //从x轴进入的动画
 charttall.animatex(4000);
 charttall.animatey(3000); //从y轴进入的动画
 charttall.animatexy(3000, 3000); //从xy轴一起进入的动画
 
 //设置最小的缩放
 charttall.setscaleminima(0.5f, 1f);
 
 }
 
 private void setdata() {
 string[] babage = {"0","1","2","3","4","5","6"}; //连线的x轴数据
 string[] babytall = {"50","60","90","110","130","135","140"};
 string[] usuatall = {"55","65","95","115","125","135","145"};//连线的y轴数据
 
 linedata data=new linedata(babage,setline(babage,babytall,1,"宝宝身高")); //创建linedata实体类并添加第一条曲线
 data.adddataset(setline(babage,usuatall,2,"正常身高")); //添加第二条曲线
 charttall.setdata(data);
 }
 
 //画线
 private linedataset setline(string[] babage, string[] tall,int flag,string name) {
 arraylist<string> xvalsage = new arraylist<string>();
 for (int i = 0; i < babage.length; i++) {
 xvalsage.add(babage[i]);
 }
 arraylist<entry> yvalsbabytall = new arraylist<entry>();
 for (int i = 0; i < tall.length; i++) {
 yvalsbabytall.add(new entry(float.parsefloat(tall[i]), i));
 }
 //设置baby的成长曲线
 linedataset setdata = new linedataset(yvalsbabytall,name);
 setdata.setdrawcubic(true); //设置曲线为圆滑的线
 setdata.setcubicintensity(0.2f);
 setdata.setdrawfilled(false); //设置包括的范围区域填充颜色
 setdata.setdrawcircles(true); //设置有圆点
 setdata.setlinewidth(2f); //设置线的宽度
 setdata.setcirclesize(5f); //设置小圆的大小
 setdata.sethighlightcolor(color.rgb(244, 117, 117));
 //设置曲线颜色
 if(flag==1)
 setdata.setcolor(color.rgb(104, 241, 175)); //宝宝身高曲线颜色
 else if(flag==2)
 setdata.setcolor(color.rgb(255, 0, 0)); //普通身高曲线颜色
 return setdata; //返回曲线
 }
}

源码:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网