android实时动态曲线图下面颜色怎么填充

zbx25 2014-04-07 03:01:54
package com.canvas.draw;


import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.Paint.Style;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

private Handler mHandler;
private DrawChart view;
// private int CHARTH = 400;
// private int CHARTW ;
private int X_INTERVAL = 20;
private LinearLayout layout;
private List<Point> plist;
private int py;
private int CHARTH,CHARTW;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CHARTW = getWindowManager().getDefaultDisplay().getWidth();
layout=(LinearLayout) findViewById(R.id.root);
init();
}

private void init() {

view = new DrawChart(this);
// view.invalidate();
layout.addView(view);

mHandler = new Handler();
mHandler.post(new TimerProcess());

}

private class TimerProcess implements Runnable {
public void run() {
view.invalidate();
mHandler.postDelayed(this, 100);
}
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

public class DrawChart extends View{
public DrawChart(Context context) {
super(context);
plist = new ArrayList<Point>();
//initPlist();
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

CHARTH = layout.getHeight();
CHARTW = layout.getWidth();
prepareLine();
drawCurve(canvas);
}

private void drawCurve(Canvas canvas){
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(3);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStyle(Style.STROKE);
Path path = new Path();
path.reset();
//贝塞尔曲线起点
path.moveTo(plist.get(0).x, plist.get(0).y);

if(plist.size() >= 2){
for(int i = 0; i<plist.size()-1; i++){
//canvas.drawLine(plist.get(i).x, plist.get(i).y, plist.get(i+1).x, plist.get(i+1).y, paint);

// 设置贝赛尔曲线的操作点以及终止点
path.quadTo(plist.get(i).x, plist.get(i).y,(plist.get(i).x+plist.get(i+1).x)/2, (plist.get(i).y+plist.get(i+1).y)/2);
// 绘制贝赛尔曲线(Path)
canvas.drawPath(path, paint);


}
}
}

private void prepareLine(){
py = (int)(Math.random()*(CHARTH));
Point p = new Point(CHARTW , py );
//Point p = new Point(OFFSET_LEFT , py );
if(plist.size() > CHARTW){

plist.remove(0);
for(int i = 0; i<CHARTW-1; i++){
if(i == 0) plist.get(i).x -= (X_INTERVAL );
else plist.get(i).x -= X_INTERVAL;
}
plist.add(p);
}
else{
for(int i = 0; i<plist.size()-1; i++){
plist.get(i).x -= X_INTERVAL;
}
plist.add(p);
}

}

}
}
...全文
1502 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
nickDeLove 2016-09-09
  • 打赏
  • 举报
回复
哥们 画出来了吗

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧