- 浏览: 156667 次
- 性别:
- 来自: 北京
最新评论
-
cys1314:
java 实现的公式计算 -
qq408170918:
楼主 请问下 “zip压缩包式皮肤” 这个 要怎么解压 怎么读 ...
应用换肤实现思路总结 -
蕾恩love:
Exception in thread "main& ...
Hadoop远程开发 -
unimme:
刚刚接触Jetty收-藏-了
jetty嵌入式配置总结 -
liuxuejin:
demo在那里呢??
aac解码器之郁闷
前几天为了实现类window资源管理器的效果实现了这个折线图。
效果如下:
使用方法:
通过renderPoint添加节点。
代码如下:
package com.hyena.cpumonitor.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.util.AttributeSet; import android.view.View; /** * 折线图 * @author yangzc * */ public class LineChartView extends View { private int mSpeedX = 4;//速度 //刻度相关 private int mScalePos = 0;//刻度面板位置 // private int mCurYMaxValue = 0; private int mScaleCellWidth = 0; private Canvas mScaleCanvas = new Canvas(); private Bitmap mScaleBitmap; private Path mScalePath; private Paint mScalePaint = new Paint(); //图表相关 private int mGraphicPos = 0; private int mSecoundGraphicPos = 0; private Canvas mGraphicCanvas = new Canvas(); private Bitmap mGraphicBitmap; private Paint mGraphicPaint = new Paint(); private Point mLastPoint = new Point(); private int mWidth = 0; private int mHeight = 0; public LineChartView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public LineChartView(Context context, AttributeSet attrs) { super(context, attrs); } public LineChartView(Context context) { super(context); } /** * 添加采样点 * @param value */ public void renderPoint(int value){ if(mGraphicPos <= -mWidth){ mGraphicPos = 0; Bitmap graphicBm = Bitmap.createBitmap(mGraphicBitmap, mWidth, 0, mWidth, mHeight); mGraphicBitmap = Bitmap.createBitmap(mWidth*2, mHeight, Bitmap.Config.ARGB_8888); mGraphicCanvas.setBitmap(mGraphicBitmap); mGraphicCanvas.drawBitmap(graphicBm, 0, 0, null); mLastPoint.x = mWidth; } float v = mHeight - (value / 100f * mHeight); mGraphicCanvas.drawLine(mLastPoint.x, mLastPoint.y, mLastPoint.x + mSpeedX, v, mGraphicPaint); mLastPoint = new Point(mLastPoint.x + mSpeedX, (int) v); invalidate(); mGraphicPos -= mSpeedX; mSecoundGraphicPos -= mSpeedX; } /** * 构筑刻度 * @param x * @param y * @param width * @param height * @param maxXValue * @param maxYValue * @return */ private Path buildScalePath(int x, int y, int width, int height, int maxXValue, int maxYValue) { Path path = new Path(); int rowHeight = Math.round(height / maxYValue)%2 == 0 ? Math.round(height / maxYValue): Math.round(height / maxYValue) + 1; int columnWidth = Math.round(width / maxXValue)%2 == 0 ? Math.round(width / maxXValue) : Math.round(width / maxXValue) + 1; //画X轴 for(int i=0; i< maxYValue; i++){ path.moveTo(x, i * rowHeight); path.lineTo(x + width, i * rowHeight); } //画竖线 for(int i=0; i< maxXValue; i++){ path.moveTo(i * columnWidth, y); path.lineTo(i * columnWidth, y + height); } path.close(); return path; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if(w <= 0 || h <= 0)return; this.mWidth = w; this.mHeight = h; //构造刻度内容 mScaleBitmap = Bitmap.createBitmap(w + 40, h, Bitmap.Config.ARGB_8888); mScaleCanvas.setBitmap(mScaleBitmap); mScalePaint.setAntiAlias(true); mScalePaint.setColor(Color.GREEN); mScalePaint.setStrokeWidth(.5f); mScalePaint.setStyle(Paint.Style.STROKE); mScalePath = buildScalePath(0, 0, mWidth + 40, mHeight, 25, 8); mScaleCanvas.drawPath(mScalePath, mScalePaint); mScaleCellWidth = (mWidth + 40)/25; //单元格宽度务必要可以被2整除 mScaleCellWidth = mScaleCellWidth%2 == 0 ? mScaleCellWidth : mScaleCellWidth + 1; mSpeedX = mScaleCellWidth/2; //构造图表 mGraphicBitmap = Bitmap.createBitmap(w*2, h, Bitmap.Config.ARGB_8888); mGraphicCanvas.setBitmap(mGraphicBitmap); mGraphicPaint.setAntiAlias(true); mGraphicPaint.setColor(Color.GREEN); mGraphicPaint.setStyle(Paint.Style.STROKE); mGraphicPos = mWidth; mLastPoint = new Point(10, 0); if(mLineChartStateChangeListener != null) mLineChartStateChangeListener.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { int left = mScalePos - mSpeedX; // Log.v("yangzc", "Left : " +left + ", mScaleCellWidth: " + mScaleCellWidth); if(Math.abs(left) >= mScaleCellWidth) left = 0; canvas.drawBitmap(mScaleBitmap, left, 0, null); mScalePos = left; //画报表 canvas.drawBitmap(mGraphicBitmap, mGraphicPos, 0, null); } private LineChartStateChangeListener mLineChartStateChangeListener; public void setLineChartStateChangeListener(LineChartStateChangeListener lineChartStateChangeListener){ this.mLineChartStateChangeListener = lineChartStateChangeListener; } public static interface LineChartStateChangeListener { public void onSizeChanged(int w, int h, int oldw, int oldh); } }
发表评论
-
方便好用的自定义按钮按下效果
2013-07-01 12:08 1402public static StateListDrawabl ... -
分享一下
2013-03-08 17:43 1124http://www.cnblogs.com/DreamSea ... -
aac解码器之郁闷(二)
2012-08-21 15:05 5863扫盲 AAC实际上是高级音频编码的缩写, ... -
flash打包
2012-06-29 12:40 1380輕鬆學會用Adobe Flash ... -
Activity的启动模式(android:launchMode)
2012-05-16 10:31 1399standard 每次都会新建,每个Task都可以有, ... -
网上发现的3D Gallery效果
2012-04-10 16:19 1852看了看效果,跑了一下。感觉还不错。 作者不知道是谁了, ... -
复合ListView
2012-04-10 13:11 1696前几天写的复杂ListView的实现方式。 使用的场景: ... -
View 3D旋转
2012-04-10 13:08 1588没事自己写的: package com.zgy.and ... -
取得系统支持的所有音频格式
2012-03-14 20:54 1290try { // Method method = Cla ... -
handler源码分析
2012-03-01 21:24 1623昨天研究了一下Handler的源码,今天总结一下: a ... -
很久发博客了,发个最近写的一个方法吧。
2012-01-05 22:08 1193/** * 设定按钮动作 * @param nor ... -
自定义绝对布局的实现
2012-01-05 22:01 2371android 绝对布局已经过期了为了保证稳定性自定义了一个绝 ... -
aac解码器之郁闷
2011-10-07 10:52 2542扫盲 AAC实际上是高级音频编码的缩写,它是M ... -
91手机助手、豌豆荚自动安装驱动实现方式技术调研总结
2011-07-30 23:37 7960本帖强烈要求扔砖头。 因为工作需要调研一下91手机助手 ... -
换肤实现思路(二)
2011-07-09 12:31 2486以前写过一个关于皮肤的换肤思路的博客。但那个里边主要是针对于资 ... -
ContentProvider的实现
2011-07-09 12:28 3362这几天有些忙,要做关于访问exchange服务器的技术调研,环 ... -
应用换肤实现思路总结
2011-07-01 23:14 3995注:以下所有言论纯属个人主观分析。 换肤解决方案:1. ... -
widget开发实例代码
2011-06-28 21:44 1689其实创建一个widget很简单。这里就做了一个简单的demo, ... -
android应用之--我的微博
2011-06-26 15:53 1565用了一个周六周日,做了一个简单的新浪微博。后续功能还要加入腾讯 ... -
androidpn的一次亲密接触(二)
2011-06-22 22:46 6401简单看了一下源码的实现,这里贴一点个人觉得比叫重要的代码。 ...
相关推荐
"jq报表折线图"这个功能模块显然聚焦于利用jQuery(jq)库来实现动态和交互式的报表,特别是折线图这一图表类型。以下是关于这个主题的详细解释: **jQuery(jq)库** jQuery是一个轻量级的JavaScript库,它简化了...
经营报表折线图是一种常用于数据分析和展示的图表类型,尤其在商业环境中,它能够直观地展示企业经营数据随时间的变化趋势。折线图通过连接各个时间点上的数据点形成一条或多条连续的折线,使得管理者可以快速理解...
EXCEL报表折线图-7-多层折线图(静态).xlsx
EXCEL报表折线图-14-漂亮折线图模板.xls
EXCEL报表折线图-11-横向分布填充背景的折线图.xlsx
EXCEL报表折线图-20-折线图制作花型图表.xlsx
EXCEL报表折线图-6-多层折线图(动态).xlsx
EXCEL报表折线图-8-多段式折线图.xlsx
EXCEL报表折线图-2-分段折线图(模板).xlsx
EXCEL报表折线图-10-高低点连接线折线图.xlsx
EXCEL报表折线图-13-吊牌价图表.xlsx
EXCEL报表折线图-3-分段式折线图(模板).xlsx
EXCEL报表折线图-18-通用图表模板带标记线的月份对比折线图.xlsx
EXCEL报表折线图-4-动态盈亏平衡分析图.xlsx
EXCEL报表折线图-12-另类折线图.xlsx
EXCEL报表折线图-19-员工业绩折线图.xlsx
EXCEL报表折线图-17-随数据变化改变背景颜色.xlsx
EXCEL报表折线图-9-复选框折线图.xlsx
EXCEL报表折线图-16-双重水平分割折线图.xlsx
EXCEL报表折线图-3-生产成本指数预测分析.xlsx