没有合适的资源?快使用搜索试试~ 我知道了~
前言 本文将通过示例代码介绍如何自定义简单的直方图表,此图表并非常见的直方图表,而是可以分组的。此文不会过多涉及原理,比较简单,示例图片如下(gif图片没有制作好,有闪烁,请见谅): 对于该示例的代码实现,其实重点在于坐标轴、文字、直方图的位置控制,需要随滑动距离而动态更新。注意事项会在示例代码中标注。下面贴出示例代码 public class MultiGroupHistogramView extends View { private int width; private int height; // 坐标轴线宽度 private int coordinateAxisWidth
资源推荐
资源详情
资源评论















Android自定义柱状图表的方法实例自定义柱状图表的方法实例
前言前言
本文将通过示例代码介绍如何自定义简单的直方图表,此图表并非常见的直方图表,而是可以分组的。此文不会过多涉及原
理,比较简单,示例图片如下(gif图片没有制作好,有闪烁,请见谅):
对于该示例的代码实现,其实重点在于坐标轴、文字、直方图的位置控制,需要随滑动距离而动态更新。注意事项会在示例代
码中标注。下面贴出示例代码
public class MultiGroupHistogramView extends View {
private int width;
private int height;
// 坐标轴线宽度
private int coordinateAxisWidth;
// 组名称字体大小
private int groupNameTextSize;
// 小组之间间距
private int groupInterval;
// 组内子直方图间距
private int histogramInterval;
private int histogramValueTextSize;
// 图表数值小数点位数
private int histogramValueDecimalCount;
private int histogramHistogramWidth;
private int chartPaddingTop;
private int histogramPaddingStart;
private int histogramPaddingEnd;
// 各组名称到X轴的距离
private int distanceFormGroupNameToAxis;
// 直方图上方数值到直方图的距离
private int distanceFromValueToHistogram;

// 直方图最大高度
private int maxHistogramHeight;
// 轴线画笔
private Paint coordinateAxisPaint;
// 组名画笔
private Paint groupNamePaint;
private Paint.FontMetrics groupNameFontMetrics;
private Paint.FontMetrics histogramValueFontMetrics;
// 直方图数值画笔
private Paint histogramValuePaint;
// 直方图画笔
private Paint histogramPaint;
// 直方图绘制区域
private Rect histogramPaintRect;
// 直方图表视图总宽度
private int histogramContentWidth;
// 存储组内直方图shader color,例如,每组有3个直方图,该SparseArray就存储3个相对应的shader color
private SparseArray<int[]> histogramShaderColorArray;
private List<MultiGroupHistogramGroupData> dataList;
private SparseArray<Float> childMaxValueArray;
private Scroller scroller;
private int minimumVelocity;
private int maximumVelocity;
private VelocityTracker velocityTracker;
public MultiGroupHistogramView(Context context) {
this(context, null);
}
public MultiGroupHistogramView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public MultiGroupHistogramView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
private void init(AttributeSet attrs) {
setLayerType(View.LAYER_TYPE_HARDWARE, null);
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.MultiGroupHistogramView);
coordinateAxisWidth = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_coordinateAxisWidth,
DisplayUtil.dp2px(2));
// 坐标轴线颜色
int coordinateAxisColor = typedArray.getColor(R.styleable.MultiGroupHistogramView_coordinateAxisColor,
Color.parseColor("#434343"));
// 底部小组名称字体颜色
int groupNameTextColor = typedArray.getColor(R.styleable.MultiGroupHistogramView_groupNameTextColor,
Color.parseColor("#CC202332"));
groupNameTextSize = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_groupNameTextSize,
DisplayUtil.dp2px(15));
groupInterval = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_groupInterval,
DisplayUtil.dp2px(30));
histogramInterval = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_histogramInterval,
DisplayUtil.dp2px(10));
// 直方图数值文本颜色
int histogramValueTextColor = typedArray.getColor(R.styleable.MultiGroupHistogramView_histogramValueTextColor,
Color.parseColor("#CC202332"));
histogramValueTextSize =
typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_histogramValueTextSize, DisplayUtil.dp2px(12));
histogramValueDecimalCount = typedArray.getInt(R.styleable.MultiGroupHistogramView_histogramValueDecimalCount, 0);
histogramHistogramWidth =
typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_histogramHistogramWidth,
DisplayUtil.dp2px(20));
chartPaddingTop = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_chartPaddingTop,
DisplayUtil.dp2px(10));
histogramPaddingStart = typedArray.getDimensionPixelSize(R.styleable.MultiGroupHistogramView_histogramPaddingStart,
剩余7页未读,继续阅读
资源评论


weixin_38706197
- 粉丝: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- python 练习题,python题目
- 【嵌入式系统】基于STM32单片机的按键控制LED闪烁程序:初学者快速上手指南
- 首个实现全参数训练的知识产权大模型 -MoZi(墨子)
- ADO.NET专业项目实战指南
- 一项基于大模型的App隐私开关探测技术
- 支持多情感男女声,实时离线文本合成 TTS,可单模变声、调速率音量及自定义语音模型
- 首个全参数训练的知识产权大模型 MoZi (墨子)
- 基于 Next.js 的大模型小说创作工具 AI-Novel
- mmexport1755910142185.mp4
- 基于 Next.js 的大模型小说创作工具 AI-Novel
- 【移动应用开发】多框架教程汇总:智慧林业IoT、Rhodes、Kivy、Android、Ionic4开发资源与入门指导
- 冰心3.9多开(推荐).apk
- 唯雨超自然-1.6.apk
- 大数据信息的处理模式与模型构建
- 基于 TinyVue 的前后端分离后台管理系统,支持在线配置菜单、路由、国际化及页签模式、多级菜单,模板丰富、构建工具多样,功能强大且开箱即用!
- CST联合Matlab仿真程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
