实现自定义android柱状图控件!可显示气温!可相应点击事件的回调!

本文介绍如何在Android中实现一个自定义柱状图控件,该控件能够显示气温趋势并响应点击事件。通过继承View,重写draw方法进行自定义绘制,并结合手势监听器来判断点击位置。详细讲解了draw方法中的参数计算和柱状图的布局逻辑,提供了源码供读者参考。
摘要由CSDN通过智能技术生成

老规矩,先上运行效果图



这是触发点击事件的运行图



首先给大家介绍一些思路:

首先继承view控件,然后重点是要覆写draw方法实现自定义的绘制,最后实现一个手势监听器,在onTouch事件中进行监听,得到点击坐标后一一与每一个item的左右x坐标比对,看是否落入了该空间中,然后回调监听器即可。


接下来重点介绍一下draw方法:

首先上一张图给大家介绍一下需要知道哪些距离参数


如图所示,这个柱状图有6个item,每个item的宽度就是2所示的宽度,即代码中的mItemBarWidth;1代表了一个item中的柱状图的宽度,即代码中的mBarWidth;0所示的就是单个item中除了柱状图宽度以外到两边的距离,两边的距离是相等的;代码中设定了一个mBeginXCoord变量,表示起始绘制的新坐标,即第一个0的宽度,这是为了累加方便,因为下一个柱状图的起始x坐标就是mBeginXCoord加上一个item的宽度而已;

所以在绘制之前需要把这些参数都计算好,由calculateFontHeight()方法,完成计算,我这里默认设定的是如果用户没有设定柱状图的宽度,则默认为item的一半宽度。


翠花,上代码

package com.example.rangebarchart;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;

public class RangeBarChart extends View{

	/* 用户点击到了无效位置 */
	public static final int INVALID_POSITION = -1;
	
	/* 画笔 */
	private Paint mTextPaint = null;
	private Paint mBarPaint = null;
	
	/* 柱状图数据集 */
	private RangeBarDataSet mDataSet = null;
	
	/* 绘图颜色值 */
	private int mTextColor = Color.WHITE;
	private int mBarColor = Color.WHITE;
	
	/* 圆角矩形的弧度 */
	private int mRadius = 10;
	
	/* 条形图的宽度和高度 */
	private float mBarWidth = 0;
	private float mBarHeight = 0;
	
	/* 辅助计算柱宽,表示一个条目的宽度,包括柱子和空余
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值