先看一下动态柱状图效果。

主要功能是可以自定义指定的字体,柱状图颜色,动态效果。
在自定义view
public class Histogram extends View {
int MAX = 100;//矩形显示的最大值
int corner = 0; //矩形的角度。 设置为0 则没有角度。
double data = 0.0;//显示的数
double tempData = 0; //初始数据
int textPadding = 50; //字体与矩形图的距离
Paint mPaint;
int mColor;
Context mContext;
//构造函数
public Histogram(Context context) {
super(context);
mContext = context;
}
public Histogram(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mContext = context;
initPaint();
}
public Histogram(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
initPaint();
}
//画笔方法
private void initPaint() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mColor = mContext.getResources().getColor(R.color.gary);
mPaint.setColor(mColor);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
if (data == 0.0) {
mPaint.setTextSize(getWidth() / 2);
RectF oval3 = new RectF(0, getHeight() - DensityUtils.pxTodip(mContext, 20), getWidth(), getHeight());// 设置个新的长方形
canvas.drawRoundRect(oval3, DensityUtils.pxTodip(mContext, corner), DensityUtils.pxTodip(mContext, corner), mPaint);
canvas.drawText("0",
getWidth() * 0.5f - mPaint.measureText("0") * 0.5f,
getHeight() - DensityUtils.pxTodip(mContext, 20) - 2 * DensityUtils.pxTodip(mContext, textPadding),
mPaint);
return;
}
//防止数值很大的的时候,动画时间过长
int step = (int) (data / 100 + 1.0);
if (tempData < data - step) {
tempData = tempData + step;
} else {
tempData = data;
}
//画圆角矩形
String S = tempData + ""; //如果数字后面需要加% 则在""中添加%
//设置显示的字体
Typeface typeface = Typeface.createFromAsset(getContext().getAssets(),"digital-7.ttf");
mPaint.setTypeface(typeface);
// //一个字和两,三个字的字号相同
if (S.length() < 4) {
mPaint.setTextSize(getWidth()/2 );
} else {
mPaint.setTextSize(50); //可以通过getWidth()/2 改变字体大小 也可以通过设置数字来改变自己想要的字体大小 当超出矩形图宽度时不能显示全部
}
//
float textH = mPaint.ascent() + mPaint.descent();
float MaxH = getHeight() - textH - 2 * DensityUtils.pxTodip(mContext, textPadding);
// //圆角矩形的实际高度
float realH = (float) (MaxH / MAX * tempData);
RectF oval3 = new RectF(0, getHeight() - realH, getWidth(), getHeight());// 设置个新的长方形
canvas.drawRoundRect(oval3, DensityUtils.pxTodip(mContext, corner), DensityUtils.pxTodip(mContext, corner), mPaint);
//写数字
canvas.drawText(S,
getWidth() * 0.5f - mPaint.measureText(S) * 0.5f,
getHeight() - realH - 2 * DensityUtils.pxTodip(mContext, textPadding),
mPaint);
if (tempData != data) {
postInvalidate();
}
}
public void setData(double data, int MAX) {
this.data = data;
this.MAX = MAX;
postInvalidate();
}
public int getmColor() {
return mColor;
}
public void setmColor(int mColor) {
this.mColor = mColor;
}
}
布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" > <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.2"/> <com.mieasy.myhistogramview.Histogram android:id="@+id/column_one" android:layout_width="0dp" android:layout_height="300dp" android:layout_weight="0.8"/> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2.4"/> <com.mieasy.myhistogramview.Histogram android:id="@+id/column_two" android:layout_width="0dp" android:layout_height="300dp" android:layout_weight="1"/> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2.4"/> <com.mieasy.myhistogramview.Histogram android:id="@+id/column_three" android:layout_width="0dp" android:layout_height="300dp" android:layout_weight="1"/> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.2"/> </LinearLayout>
MainActivity调用initAllViews()方法
private void initAllViews() {
column_one = (Histogram) findViewById(R.id.column_one);
column_two = (Histogram) findViewById(R.id.column_two);
column_three = (Histogram) findViewById(R.id.column_three);
column_one.setData( 20.22, 100);
column_two.setData(30.2, 100);
column_three.setData(40, 100);
column_one.mPaint.setColor(getResources().getColor(R.color.colorAccent)); //改变柱状图的颜色
}
参考文章:100行Android代码轻松实现带动画柱状图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# view
# 柱状图
# Android自定义柱状图表的方法实例
# Android实现简易的柱状图和曲线图表实例代码
# 100行Android代码轻松实现带动画柱状图
# 详解Android自定义View--自定义柱状图
# Android自定义带增长动画和点击弹窗提示效果的柱状图DEMO
# MPAndroidChart开源图表库的使用介绍之饼状图、折线图和柱状图
# Android自定义圆角柱状图
# 可以通过
# 自定义
# 圆角
# 一个字
# 设置为
# 则在
# 主要功能
# 三个字
# 先看
# 大家多多
# private
# defStyleAttr
# initPaint
# void
# getResources
# true
# setAntiAlias
# attrs
# mContext
相关文章:
建站主机SSH密钥生成步骤及常见问题解答?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
建站之星如何优化SEO以实现高效排名?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
C++如何使用std::optional?(处理可选值)
建站之星如何防范黑客攻击与数据泄露?
小建面朝正北,A点实际方位是否存在偏差?
建站主机CVM配置优化、SEO策略与性能提升指南
建站之星在线版空间:自助建站+智能模板一键生成方案
如何在搬瓦工VPS快速搭建网站?
移民网站制作流程,怎么看加拿大移民官网?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
建站之星IIS配置教程:代码生成技巧与站点搭建指南
想学网站制作怎么学,建立一个网站要花费多少?
网站企业制作流程,用什么语言做企业网站比较好?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
宝塔面板如何快速创建新站点?
如何获取上海专业网站定制建站电话?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何批量查询域名的建站时间记录?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何用wdcp快速搭建高效网站?
制作网站的基本流程,设计网站的软件是什么?
定制建站价位费用解析与套餐推荐全攻略
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
全景视频制作网站有哪些,全景图怎么做成网页?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何通过虚拟主机快速搭建个人网站?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何选择靠谱的建站公司加盟品牌?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
建站之星ASP如何实现CMS高效搭建与安全管理?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
IOS倒计时设置UIButton标题title的抖动问题
如何获取免费开源的自助建站系统源码?
如何自定义建站之星模板颜色并下载新样式?
兔展官网 在线制作,怎样制作微信请帖?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
建站主机选哪种环境更利于SEO优化?
如何通过云梦建站系统实现SEO快速优化?
韩国服务器如何优化跨境访问实现高效连接?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
威客平台建站流程解析:高效搭建教程与设计优化方案
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
婚礼视频制作网站,学习*后期制作的网站有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。