位置: 编程技术 - 正文

简单的横向ListView实现(version 2.0)(简单的横向棱纹魔杖)

编辑:rootadmin

推荐整理分享简单的横向ListView实现(version 2.0)(简单的横向棱纹魔杖),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:横向列表,简单的横向报价表怎么做,横向列表,简单的横向棱纹魔杖,简单的横向报价表怎么做,简单的横向报价表怎么做,简单的横向棱纹,简单的横向棱纹,内容如对您有帮助,希望把文章链接给更多的朋友!

版本1.0的横向listView核心只是简单的用layout来进行横向的布局,并没有实现基本的滚动操作,整个屏幕智能显示固定的数目的Item,且Adapter中剩余的View虽然添加到了viewGroup中但是并由于没法滚动无法显示出来,这个版本的横向listView将简单的实现滚动的功能。再说滚动之前的时候需要准备的知识资料如下:

如上图,外层蓝色的矩形框为parentView,黑色的矩形框为childView.其中parentView的左上角是相对于child的坐标原点(0,0);在android里面子view在父view里面可以调用getLeft(),getRight(),getBottom()和getTop来确定子view在父View中的位置。其中getRight() == child.getWidth()&#;getLeft(); getBottom() == child.getTop() &#; child.getHeight();

这个版本version 2.0的目标也很简单,只是让listView滚动起来就算达成目标;滚动的操作也很简单,当手指按下的时候listView的Item向左移动一定的距离(在这个版本中是写死的&#;)。所以该版本滚动既没有用Scroller也没有用GestureDetector,只是简单的响应一下MotionEvent.ACTION_DOWN,然后对页面进行重绘就偶了,当然在version3.0将做较大改进,会让整个左右滚动都显示完全,在3.0之前还是一步步慢慢来(同样在最后会将源代码奉上,若是有什么不正确的地方欢迎批评指正)。

版本运行效果:手机点击屏幕的时候,整个listView向左移动显示其余的Item

简单的横向ListView实现(version 2.0)(简单的横向棱纹魔杖)

关键思路:

1)动态加载childView:在屏幕宽度的范围内能显示多少个childView就添加多少个,adapter里面其余剩下的childView就随着滚动调用requestLayout的时候在onLayout里面动态的添加到viewGroup.这时有一个关键的问题就出来了,怎么判断手机屏幕宽度的范围中显示满了,没法显示多余的Item了呢?此时child.getRight()有了用武之地:每次取viewGroup中最后一个子childView也就是parentView.getChildAt(getChildCount()-1),调用childView.getRight(),如果childView.getRight()<parentView.getWidth()就继续addView添加下一个childView;并重复childView.getRight()<parentView.getWidth();如果不成立的话说明屏幕中显示满了。啰嗦了这么多不是很清晰,下面用代码来表示就是如下(该段代码在parentView的onLayout中调用):

每一层的while循环用画图直观分析就是如下(偷个懒,直接用手画的):

每次for循环过后,最右边的那个childView就是while变量中的rightChildView.在上图当添加到四个view的时候屏幕的宽度区域已经沾满了(此时rightChildView.getRight>parentView.getWidt(),所以此时添加到的子view的个数为4个,而不是version1.0版本中的全部的childview.

2) 滚动逻辑:该版本是向左移动的,所以移动的时候某个坐标点在滚动停止的时候是该坐标点是变小的,中间的差&#;或者说运动的距离是负&#;(假设此处用leftSrcollDistance =-)。在这里简单的就定义为-;关键点:滚动的时候,确切地说是向左边滚动的时候.rightChildView的getRight()是越来越小的,当getRight()&#;leftSrcollDistance <parentView.getWidth()的时候,说明屏幕的右边是由空余的空间的,此时就可以动态的添加并显示下一条Item了,具体的代码如下:

运行一把发现此时是不会运动的,为什么?很简单,因为之前这段代码没有把最左边的View在合适的时机从ViewGroup里面删除,导致虽然动态添加了view但是并没有多余的空间让新加的view显示出来。这个合适的时机就是当最左边的chilView的getRight()<=0的时候,因为是滚动确切地说是getRight()&#;leftSrcollDistance()<=0的时候,于是乎修改后的onLayout(该方法最好重构一下,添加,测量等弄到子程序里面最好):

到此为止,这个仍然存在如开头所说问题的横向可滚动listView算是实现了:简单的总结一句话就是,总的核心就是计算坐标和requestLayout过程,难度不是很大。通过写这个小东西自己倒是又更多的掌握了写东西,希望对大家有帮助。在版本verson3.0的时候会对此版本进行全面的修改,未完待续吧!(此处为源代码)

border-radius在Android下的几个BUG 一、Android2.3自带浏览器不支持%通常我们实现一个正圆只需要border-radius:%即可,大致代码如下:.foo{width:px;height:px;border-radius:%;border:1pxsolidblue;}然

蛋疼的Caused by: java.lang.ClassNotFoundException 开发中最长遇到的错误提示,遇到这种错误提示,一般可能有:1.忘记在AndroidManifest中配置,这个很好解决,在里面配置一下就行了。2.更常见的问题是

Android Camera 实时滤镜(八) 一、AndroidCamera可以做哪些?1、功能拍摄相片视频录制取景器(扫描类应用,如人脸识别,名片识别,条形码识别)2、根据CameraAPI实现自己的拍照程序,共

标签: 简单的横向棱纹魔杖

本文链接地址:https://www.jiuchutong.com/biancheng/381097.html 转载请保留说明!

上一篇:JDK/ADT Android开发环境搭建(androidstudio的jdk)

下一篇:border-radius在Android下的几个BUG

  • 私立学校要交社保吗
  • 出口退税调整后退税率包括什么档次
  • 车辆购置税退税申请模板
  • 小规模纳税人广联达怎么取费怎么取
  • 发票抬头开个人可以吗
  • 公司贷款利息怎么做分录
  • 怎么控制酒店的设备
  • 出口业务运费可以抵扣吗
  • 个体工商户旅馆怎么交税
  • 招标代理服务费由谁支付
  • 企业哪些做法违背了营销道德
  • 补充协议如何生效
  • 建筑业农民工工资
  • 企业销售矿产是否需要缴纳资源税呢?
  • 应收账款平均余额公式
  • 国税和地税分别占多少
  • 收入确认和发票的区别
  • 总分公司、母子公司:三流不一致情况下,如何抵扣增值税?
  • 发票金额与支票数量不符
  • 滞纳金账务处理
  • 应交税费包括了增值税吗
  • 定额发票存根联丢失如何处罚
  • 分支机构能否随总机构认定为一般纳税人
  • 库存暂估入账
  • 产品调试费计入什么科目
  • 租房押金收不回来怎么做账
  • 一般纳税人汇算清缴操作流程
  • 网页游戏玩着卡
  • 建筑业总产值的统计执法检查内容
  • 利润总额和净利润的区别
  • 厂区地面硬化的意义
  • php utf8转gb2312
  • 残疾人保障金汇算清缴填在哪里
  • Win10 19043.1237 9月累积更新 KB5005565推送(附更新修复+下载)
  • bc2.exe
  • php实现和工作原理
  • 微信小程序怎么制作自己的小程序
  • 网络安全文章1000字
  • 如何在wordpress嵌入amazon链接
  • php initialize
  • 对公账号备用金怎么用
  • 上市公司股票转让收入
  • wordpress 自动生成文章
  • Python IDE之Thonny的介绍
  • mysql的查询缓存与redis的区别
  • centos下编写贪吃蛇吗
  • SQL Report Builder 报表里面的常见问题分析
  • 视同销售是指什么
  • 技术服务收入属于什么收入
  • 年终奖的个税税率
  • 工地会计内账
  • 借应付职工薪酬贷财政拨款收入
  • 税前扣除的职工福利费怎么算
  • 土地使用税为什么要交
  • 加计抵减需要计税吗
  • 小规模公司购买成本票严重吗
  • 存货售出时可以冲减资产减值损失吗
  • mysql 忘记密码重置密码
  • fedora vlc
  • 怎么安装win7系统不占硬盘空间呢
  • win8.1 升级
  • linux ll不能用
  • linux下scp远程拷贝包含空格的目录或者文件的解决方法
  • sdstat.exe - sdstat是什么进程 有什么用
  • win10怎么进去
  • Skype.exe - Skype是什么进程 有什么用
  • win7系统禁止更新
  • 工商网银安装
  • jquery的实现原理
  • 详解怎样利用双色球密码选号
  • Node.js中的construct构造函数
  • linux如何批量执行脚本
  • js文字循环滚动代码
  • python多线程怎么写
  • unity3d快速入门
  • javascript判断浏览器
  • Python 使用requests模块发送GET和POST请求的实现代码
  • java教程
  • jQuery插件ajaxfileupload.js实现上传文件
  • 贵阳市税务电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设