折线图(三)绘制x轴单位值,以及标识物
来源:互联网 发布:township mac 绿钞 编辑:程序博客网 时间:2024/06/01 07:25
这里的坐标轴只是演示,到后面还要根据情况就算x,y轴的大小决定 折线图的大小。
attrs.xml
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="LineChartView"> <!-- 视图padding --> <attr name="chartPadding" format="dimension"></attr> <!-- x轴单位 长度--> <attr name="xUnit" format="dimension"></attr> <!-- x轴单位值--> <attr name="xValue" format="integer"></attr> <!-- x轴单位字体大小--> <attr name="unitTextSize" format="dimension"></attr> <!-- x轴单位名称--> <attr name="xName" format="string"></attr> </declare-styleable></resources>
package sam.android.utils.widget;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import sam.android.utils.R;/** * 绘制折线图详情 */public class LineChartView extends View{ /** * 折线图padding */ private float chardPading; /** * 单位长度 */ private float xUnit; private float xValueTextSzie; /** * 单位名字 */ private String xName; /** * 单位值 */ private int xValue; public LineChartView(Context context, AttributeSet attrs) { super(context, attrs); //获取提供的chardPading长度, 如果不提供,默认为100px. 注意,拿到的dip单位最终会转化为px TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LineChartView); chardPading = typedArray.getDimension( R.styleable.LineChartView_chartPadding, 100); xUnit = typedArray.getDimension(R.styleable.LineChartView_xUnit, 50); xName = typedArray.getString(R.styleable.LineChartView_xName); xName = null != xName?xName:"x";//如果不提供名字,则默认为x xValue = typedArray.getInt(R.styleable.LineChartView_xValue, 10);//默认单位值为10 xValueTextSzie = typedArray.getDimension(R.styleable.LineChartView_unitTextSize, 25);//默认25px字体大小 } @Override protected void onDraw(Canvas canvas) { //绘制坐标轴 drawAxis(canvas); //绘制x坐标轴详情 drawX_AxisState(canvas); } /** * 为了不遮住坐标轴,给予100padding给它 */ int arrowPadding = 100; /** * 绘制x轴名称,按提供的长度来标识长度值 * @param canvas */ private void drawX_AxisState(Canvas canvas) { Paint paint = new Paint(); //直线画笔 Paint xValuePaint = new Paint(); //画笔 xValuePaint.setColor(Color.BLACK); xValuePaint.setTextSize(xValueTextSzie); paint.setColor(Color.BLACK);//设置画笔为黑色 paint.setStrokeWidth(2);//设置画笔尖大小为2px int with = getMeasuredWidth() -(int)chardPading; int height = getMeasuredHeight() -(int)chardPading; int drawXlengh = with - arrowPadding;//保留能看到箭头 int xUnit = (int) this.xUnit; canvas.drawText(xName, getMeasuredWidth()-chardPading-xValueTextSzie/2, height+xValueTextSzie, xValuePaint);//绘制单前值,在x轴下方xValueTextSzie位置 x/2是为了居中, for(int i = xUnit, j = 1; i <drawXlengh; i += xUnit, j ++) { canvas.drawLine(chardPading + i, height, chardPading + i, height - 10, paint);//绘制10px长度的线作为每单位的间隔标志物 int drawvalue = xValue*j; canvas.drawText(drawvalue+"", chardPading+i-xValueTextSzie/2, height+xValueTextSzie, xValuePaint);//绘制单前值,在x轴下方 chardPading+i-xValueTextSzie/2, xValueTextSzie位置 } } /** *绘制坐标轴, 并且设置100padding给LineChartView * @param canvas */ private void drawAxis(Canvas canvas) { int chartViewHeight = getMeasuredHeight(); //获取LineChartView高度 int charViewWidth = getMeasuredWidth(); //获取LineChartView宽度 Paint paint = new Paint(); //画笔 paint.setColor(Color.BLACK);//设置画笔为黑色 paint.setStrokeWidth(4);//设置画笔尖大小为4px /* * 绘制直线.在2点之间连线 * startX 起点的x坐标 * startY 起点的y坐标 * endX 终点的x坐标 * endY 终点的y坐标 * canvas.drawLine(startX, startY, endX, endY) */ //绘制直线paddingTop 了chardPading的y轴 canvas.drawLine(chardPading, chartViewHeight - chardPading, chardPading, chardPading, paint); //绘制y轴左边半边箭头 canvas.drawLine(chardPading, chardPading, chardPading - 10, chardPading+10, paint); //绘制y轴右边半边箭头 canvas.drawLine(chardPading, chardPading, chardPading + 10, chardPading+10, paint); //绘制直线paddingLeft 了chardPading的x轴, canvas.drawLine(chardPading, chartViewHeight - chardPading, charViewWidth - chardPading, chartViewHeight- chardPading, paint); //绘制x轴上半部分箭头 canvas.drawLine(charViewWidth - chardPading,chartViewHeight - chardPading, charViewWidth - chardPading - 10,chartViewHeight - chardPading - 10, paint); //绘制x轴下半部分箭头 canvas.drawLine(charViewWidth - chardPading, chartViewHeight - chardPading, charViewWidth - chardPading - 10,chartViewHeight - chardPading + 10, paint); }}
<?xml version="1.0" encoding="utf-8"?><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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="折线图(三)" android:layout_centerHorizontal="true" /> <sam.android.utils.widget.LineChartView xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:chartPadding="30dp" app:xValue="10" app:xUnit="30dp" app:xName="x轴" app:unitTextSize="12sp" /></RelativeLayout>
待更新4
0 0
- 折线图(三)绘制x轴单位值,以及标识物
- android-柱状图、折线图、x轴、y轴绘制以及实例代码
- Excel:绘制三类数据关系的折线图
- achartengine.jar绘制动态图形三 --折线图
- C#绘制折线图
- WPF绘制折线图
- EXT3绘制折线图
- android 绘制折线图
- android绘制折线图
- highcharts绘制折线图
- android绘制折线图
- achartengine绘制折线图
- 绘制折线图
- echarts绘制折线图
- 折线图的绘制
- html5绘制折线图
- 绘制折线图
- CALayer绘制折线图
- JS开发HTML5游戏《神奇的六边形》(四)
- myeclipse 编辑java中的变量时,高亮显示
- WIN7 64位系统 VS2012 安装openssl
- Codeforces Round #321 (Div. 2) C. Kefa and Park time limit per test
- Android 提示框的几种类型
- 折线图(三)绘制x轴单位值,以及标识物
- 记住密码功能 angular js实现
- 一步步调试解决iOS内存泄漏
- C++函数学习笔记
- Android跨进程通信----AIDL使用方法
- 编程式使用IoC容器过程
- vim 插件配置
- C++Template
- 怎样实现MindMapper中边框的插入