本文实例实现一个如下图所示的Android折线图,供大家参考,具体内容如下
首先是控件绘图区域的划分,控件左边取一小部分(控件总宽度的八分之一)绘制表头,右边剩余的部分绘制表格
确定表格的行列数,首先绘制一个三行八列的网格,设置好行列的坐标后开始绘制
/*绘制三条横线*/ for(int i=0;i<3;i++){ canvas.drawLine(textWide, mLineYs[i], totalWidth, mLineYs[i], mPaintLine); } /*绘制八条竖线*/ for(int i=0;i<8;i++){ canvas.drawLine(mLineXs[i], 0, mLineXs[i], totalHeight, mPaintLine); }
网格绘制完成后,开始绘制折线图
根据输入的节点数据,分别绘制两条折线
通过canvas的drawLine方法依次连接两点即可
在每个数据节点处绘制一个小圆,突出显示
/*绘制第一条折线的路径*/ for (int i = 0; i
两条折线重合的地方,需要特殊考虑,比如希望两条折线重合的地方折线变为白色
设置下两条折线的画笔即可
mPaintLine2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN)); mPaintLine1.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN));
测试代码及效果;
final Random random=new Random(); final LineChartView myView=(LineChartView)findViewById(R.id.custom_view); final LineChartView.Performance[] performances1=new LineChartView.Performance[8]; final LineChartView.Performance[] performances2=new LineChartView.Performance[8]; myView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ for(int i=0;i
完整代码如下:
public class LineChartView extends View { private Context context; /*动画插值器*/ DecelerateInterpolator mDecelerateInterpolator = new DecelerateInterpolator(); /*动画刷新的次数*/ private int mDuration = 10; /*当前动画进度值*/ private int mCurrentTime = 0; private Performance[] mPerformance_1, mPerformance_2; /*两条折线的颜色*/ private int mLineColor1, mLineColor2; /*绘制表头文字画笔*/ private Paint mPaintText = new Paint(); /*绘制表格的画笔*/ private Paint mPaintLine = new Paint(); /*第一条折线的画笔*/ private Paint mPaintLine1 =new Paint(); /*第二条折线的画笔*/ private Paint mPaintLine2 =new Paint(); /*坐标点的小圆点画笔*/ private Paint mPointPaint = new Paint(); private float mSmallDotRadius = 4; private TypedValue typedValue; private int mPaintClolor; /*Handler刷新界面产生动画效果*/ private Handler mHandler = new Handler(); private Runnable mAnimation = new Runnable() { @Override public void run() { if (mCurrentTime8 &#63; 8 : performance1.length); mPerformance_2 = Arrays.copyOf(performance2, performance2.length > 8 &#63; 8 : performance2.length); if (isShown()) { mCurrentTime = 0; this.invalidate(); } } /** * 设置折线1的颜色 * * @param mLineColor1 */ public void setLineColor1(int mLineColor1) { this.mLineColor1 = mLineColor1; } /** * 设置折线2的颜色 * * @param mLineColor2 */ public void setLineColor2(int mLineColor2) { this.mLineColor2 = mLineColor2; } private void init() { mLineColor1=Color.BLUE; mLineColor2 = Color.GREEN; typedValue=new TypedValue(); context.getTheme().resolveAttribute(R.attr.title_bar,typedValue,true); mPaintClolor =getResources().getColor(typedValue.resourceId); final LineChartView.Performance[] performances1=new LineChartView.Performance[8]; final LineChartView.Performance[] performances2=new LineChartView.Performance[8]; final Random random=new Random(); for(int i=0;i
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。