Android中如何通过自定义view实现动态柱状图
Android中如何通过自定义view实现动态柱状图
本篇内容主要讲解“Android中如何通过自定义view实现动态柱状图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中如何通过自定义view实现动态柱状图”吧!
自定义view
publicclassHistogramextendsView{intMAX=100;//矩形显示的最大值intcorner=0;//矩形的角度。设置为0则没有角度。doubledata=0.0;//显示的数doubletempData=0;//初始数据inttextPadding=50;//字体与矩形图的距离PaintmPaint;intmColor;ContextmContext;//构造函数publicHistogram(Contextcontext){super(context);mContext=context;}publicHistogram(Contextcontext,@NullableAttributeSetattrs){super(context,attrs);mContext=context;initPaint();}publicHistogram(Contextcontext,@NullableAttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);mContext=context;initPaint();}//画笔方法privatevoidinitPaint(){mPaint=newPaint();mPaint.setAntiAlias(true);mColor=mContext.getResources().getColor(R.color.gary);mPaint.setColor(mColor);}@Overridepublicvoiddraw(Canvascanvas){super.draw(canvas);if(data==0.0){mPaint.setTextSize(getWidth()/2);RectFoval3=newRectF(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;}//防止数值很大的的时候,动画时间过长intstep=(int)(data/100+1.0);if(tempData<data-step){tempData=tempData+step;}else{tempData=data;}//画圆角矩形StringS=tempData+"";//如果数字后面需要加%则在""中添加%//设置显示的字体Typefacetypeface=Typeface.createFromAsset(getContext().getAssets(),"digital-7.ttf");mPaint.setTypeface(typeface);////一个字和两,三个字的字号相同if(S.length()<4){mPaint.setTextSize(getWidth()/2);}else{mPaint.setTextSize(50);//可以通过getWidth()/2改变字体大小也可以通过设置数字来改变自己想要的字体大小当超出矩形图宽度时不能显示全部}//floattextH=mPaint.ascent()+mPaint.descent();floatMaxH=getHeight()-textH-2*DensityUtils.pxTodip(mContext,textPadding);////圆角矩形的实际高度floatrealH=(float)(MaxH/MAX*tempData);RectFoval3=newRectF(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();}}publicvoidsetData(doubledata,intMAX){this.data=data;this.MAX=MAX;postInvalidate();}publicintgetmColor(){returnmColor;}publicvoidsetmColor(intmColor){this.mColor=mColor;}}
布局
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns: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"><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.2"/><com.mieasy.myhistogramview.Histogramandroid:id="@+id/column_one"android:layout_width="0dp"android:layout_height="300dp"android:layout_weight="0.8"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2.4"/><com.mieasy.myhistogramview.Histogramandroid:id="@+id/column_two"android:layout_width="0dp"android:layout_height="300dp"android:layout_weight="1"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2.4"/><com.mieasy.myhistogramview.Histogramandroid:id="@+id/column_three"android:layout_width="0dp"android:layout_height="300dp"android:layout_weight="1"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.2"/></LinearLayout>
MainActivity调用initAllViews()方法
privatevoidinitAllViews(){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));//改变柱状图的颜色}
到此,相信大家对“Android中如何通过自定义view实现动态柱状图”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
php 一步步实现mvc架构——路由篇