【Android开发日记】 AndroidCharts LineView根据数据自动调整高度

这篇博客主要记录如何在Android开发中,根据LineView中的数据动态调整视图高度。作者参考了AndroidCharts项目,并在刷新数据后更新视图高度,通过重写onMeasure方法实现动态调整。同时,提到了相关技术文章链接以深入理解视图尺寸调整的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     首先感谢GitHUb上贡献开源项目 AndroidCharts的作者:dacer,我是在项目中K图也就是lineView代码基础上修改的。

       项目地址:https://github.com/dacer/AndroidCharts

    然后感谢CDSN博主 nekocode 我参照他的代码给lineView图 添加了纵坐标。

       他的博文:http://blog.youkuaiyun.com/nekocode/article/details/18325459

    然后非常感谢我的程序员小圈子 Android 开发者们 qq群里的大哥们,特别鸣谢@ 奔放蜗牛,帮我寻找解决办法到一点多,他明天还要上班呢。其他的少年不再一一列举,好兄弟!

 最后步入正题:

    我的需求:根据k图中画的线的数目动态调整view的大小,这里主要是高度,因为我的需求画出来的线都是水平线,因此线的数目与图的大小有直接关系。

    问题:项目中view的大小是在xml文件中设定的,即是明确的数值,然后在LineView.java中 通过 重写的 onMeasure( )函数获取view的大小,将view的Height赋值给一个非常重要的参数:mViewHeight 因为从头到尾的所有draw操作的纵坐标都与这个参数与关,可以理解为mViewHeight就是这个画布的高,不论是画点,画线,还是显示纵坐标数据,都用到这个参数。这样设定的话,view的大小就是确定的。

   修改办法:

   1:在xml中将layout_height属性设置为 match_parent,

   2:在refreshAfterDataChanged()函数中更新mViewHeight的值。因为每次更新数据之后,所有数据的x,y以及绘制都是在refreshAfterDataChanged()中实现的,所以将更新mViewHeight的代码放在这个函数中最优先位置。这样每次更新了数据先更新了mViewHeight的值,然后才开始绘制。

   那么view的大小是怎么改变的呢?

   因为在重写的onMeasure( )函数中调用了一次refreshAfterDataChanged()! 紧接着调用了setMeasuredDimension(mViewWidth,mViewHeight); 来调整view的大小。这时候我们的mViewHeight已经被更新了,所以传进setMeasuredDimension之后将view的大小调整到新的状态。

  重要部分:


  前后效果对比:

  修改之前:


  修改之后:


 

  虽然解决了问题,但是知其然不知其所以然,关于onMeasure,measure,setMeasuredDimension来动态调整view大小的原理,下面两篇博文应该很不错:

    

继承ViewGroup:重写onMeasure方法和onLayout方法   http://www.cnblogs.com/fengzhblog/archive/2013/05/13/3075627.html

View和ViewGroup             http://blog.youkuaiyun.com/linghu_java/article/details/8532988


  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值