全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义view实现动态柱状图

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

主要功能是可以自定义指定的字体,柱状图颜色,动态效果。

在自定义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小时内与您取得联系。