位置: 编程技术 - 正文

利用Android属性动画实现Banner的原理与实践(android item属性)

编辑:rootadmin

推荐整理分享利用Android属性动画实现Banner的原理与实践(android item属性),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android tools属性,android 属性,android获取系统属性,android exported属性,android item属性,android item属性,android exported属性,android 属性,内容如对您有帮助,希望把文章链接给更多的朋友!

其实在Android刚推出属性动画的时候,就想利用它来设计一个Banner控件,一直没什么时间尝试。在当时看我们应用中的Banner,使用计时器来控制自动播放,设置一个很大的数,利用余数原理来实现ViewPager循环,在进行内存分析的时候,看&#;不起&#;的Banner却是一个消耗内存的大户,相信很多App的Banner都是计时器加ViewPager的方式实现的。

最近时间比较宽裕,可以做一些研究性的工作,因此打算尝试使用属性动画实现Banner。目前仅仅是尝试了一下如何实现,暂还未将其做成一个控件,最后的示例代码也是如此,仅仅是实现原理的一个演示,待后续测一下性能,如果还可以的话再做成自定义控件。先做一些声明:

1.这里仅仅演示一个示例,说明这种Banner的实现原理,暂未封装成控件

2.示例中手势滑动仅用按钮点击来模拟

3.由于仅演示原理,示例中未添加Indicator的联动效果,也没有Banner的点击响应

4.Banner的移动速度由动画时间控制,可自由设置,示例中设置的时间较短,故移动比较快

5.Banner尺寸暂时写死了,仅适配Nexus4手机,其他手机测试请自行获取Banner宽度

6.请分别测试自动播放和左滑、右滑

7.上述问题皆可在封装成正式控件时解决,同时还有图片缓存等

8.另外Banner播放移动由属性动画控制,因此3.0以下需额外动画库nineoldandroids

先来看下效果图(动画录制的很差,上两张静态图好了,大概可以看到Banner的移动过程):

接下来说一下实现原理,目前仅测试了自动播放广告和左右滑动广告,暂时未处理自动播放过程中的左右滑动行为。没啥美术功底,草纸上大概画了个示意图:

下面具体来解释一下:

利用Android属性动画实现Banner的原理与实践(android item属性)

1.首先说明支持任意张广告,个人测试用了4张,以下直接按4张解释原理了

2.先看Banner布局。最外层放一个FrameLayout作为容器,之所以用FrameLayout,是因为后续需要在广告条上覆盖Indicator,即小圆点指示器(目前示例里没有)。FrameLayout放一个水平的LinearLayout,该LinearLayout中依次放4个ImageView,每个代表一幅广告。需要注意的是,初始时,手机屏幕宽度内仅显示第一幅广告,其他3个ImageView可以理解为在手机屏幕右侧看不见的位置。

3.再来说如何实现广告位的移动。大家都知道属性动画与之前的动画最大的区别就是属性动画真实地改变了其属性,比如颜色、位置等。不错,正是利用这一点,对ImageView做动画,改编其水平位置属性,达到移动广告位的目的。具体的动画实现请参考下文中的代码。

4.接下来看如何实现Banner自动播放。开始时,同时对4个ImageView做属性动画,将它们都向左移动一个广告位的宽度。第一次动画完成后,它们的位置是这样的:第1个广告可以理解为移动到了手机屏幕左边的位置,手机屏幕上显示的是第2个广告,第3个,第4个广告依然在手机屏幕右侧看不到的位置。然后再次对它们4个做上述移动的动画,就这样,做完一次动画再做一次,如果没有任何处理的话,等第4张也移动到手机屏幕左侧,再做动画就什么都看不到了,因为它们已经远远偏离手机屏幕了。因此需要做一个特别处理,就是在4个ImageView每次动画完成之后,检查自己的位置,是否已经处于手机屏幕左侧了,如果是,则重新设置一下自己的位置,这个位置也不是随便设置的,需要将它设置到右侧最后,紧跟前一个广告。这样做的效果就是每当Banner移动一次,移到左边的广告条会自动被重新放到右侧末尾,而不影响视觉效果,从而可以达到循环播放的效果。个人觉得这样做的好处是永远只有4个ImageView对象,摒弃了取余循环的方式,效率应该会有提升。

5.最后说手动左滑右滑的实现原理。由于只是演示原理,本例并未真正处理手势滑动,仅用按钮点击来模拟。如果一直向左滑动或向右滑动比较好处理,但手势滑动不像自动轮播,手势滑动可左一下,右一下,任意次数的左右滑动,因此也要做特殊处理。如果向左滑动,原理同自动播放,利用动画将4个ImageView左移一个广告位,随后将移到左侧的重新追加到右侧最后边,任何一次左滑也是同样的处理,因此任一次左滑结束后,一个广告当前显示,其余3个都可以认为在手机屏幕右侧。对于右滑,不同于左滑,它需要在右滑之前做处理,我们需要在右滑之前先提供可供滑动的广告位,因此需要事先把最右边的广告位拿到手机屏幕左侧,然后再执行右滑处理。其实可以这样认为,每次右滑之前,手机屏幕左侧是没有广告位的,需要预先从最右侧拿1幅广告到手机屏幕左侧。

下面附一些相关代码,以下是示例的布局代码:

自动播放的处理代码:

向左滑动处理代码:

向右滑动处理代码:

完整示例代码下载 当某天需要下载资料时,发现自己竟然没有下载积分,因此设了1个积分,有需要下载的可以支持下,多谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

unity 5 打包apk 手动升级android sdk 5.0 api unity5打包apk需要将安装SDK升级到androidsdk5.0api。国内使用SDKManager.exe更新不了,于是下载sdk包手动更新到sdk5.0。下载下面几个包:

LayoutInflater.inflate方法解析 LayoutInflater.inflate方法应该是Android程序员最常使用的方法之一了,但是如果使用不当,你会碰见很多的坑。。。今天我就碰到了一个,我找到了解决方法

xml输入是如传递给java的 spanstyle=font-size:px;font-family:Arial,Helvetica,sans-serif;background-color:rgb(,,);/spanspanstyle=font-size:px;font-family:Arial,Helvetica,sans-serif;background-color:rgb(,,)

标签: android item属性

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

上一篇:android 开源项目GuillotineMenu,酷炫的铡刀菜单(Android 开源项目集合)

下一篇:unity 5 打包apk 手动升级android sdk 5.0 api 21(unity打包安卓apk)

  • 印花税的征税对象是条例列举的凭证未列举的不征税
  • 完税证明能作为理赔依据吗
  • 固定资产入账原值含税价吗
  • 个人先进奖励要缴纳个税吗
  • 外包和离岸外包一样吗
  • 人力资源公司代招的岗位可以去吗
  • 转让长期股权投资的净收益计入
  • 哪些固定资产不需要计提折旧
  • 金融机构利息收入缴纳增值税
  • 商品损失 进项税 确定
  • 季度收取租金会计分录怎么写?
  • 可变股权转让对价会计处理怎么做?
  • 当月冲销的作废发票怎么账务处理?
  • 预提土地使用税的分录
  • 房租收入应该计入什么会计科目
  • 收到第三方利息会计分录
  • 公司支付宝账户怎么登录
  • 税控系统维护费账务处理
  • 银行贷款利息是百分比还是千分比
  • 三证合一后章要换吗
  • 成本票和费用票分别是什么
  • 股权转让过程中需要注意哪些问题
  • 其他综合收益是什么类科目
  • 股东以股抵债是否合法
  • 房地产记账凭证
  • 好听的开机音效
  • 信用卡扣手续费怎么算的
  • 鸿蒙系统2.0怎么升级3.0
  • 对公账户自己扣钱
  • php数据库语句
  • PHP:imagepsloadfont()的用法_GD库图像处理函数
  • 出口零退税率商品目录
  • 购买房屋缴纳的税款
  • iframe写法
  • 购车的进项税怎么抵扣
  • 维保服务的税率是多少
  • 销售费用凭证
  • 基于web的疫情防控方案
  • php array search
  • 应付票据应付利息
  • asp连接sqlserver数据库的三种方式是什么?
  • 用于职工福利的固定资产折旧
  • 归属净利润和扣非净利润看哪一个
  • 什么是指企业的市场营销活动发生影响的各种因素的总和
  • 私车公用协议可以过户吗
  • 资产减值准备怎么理解
  • 出库销售会计分录
  • 现金收款的程序是什么
  • 为什么持有库存
  • 子公司提取盈余公积
  • 现金日记账与现金流量表的区别
  • 为什么营业成本属于费用
  • 装修费摊销怎么计算公式
  • win10选择软件打开方式
  • Linux系统下Qt的基本安装和配置
  • macbook恢复macos
  • linux中压缩文件
  • linux操作系统主要学什么
  • centos 编译安装
  • mac app store更新软件一直输入密码
  • win10纯净系统安装教程
  • cocos2dx schedule
  • cocos2d-x window实现鼠标移动 键盘事件
  • js设计模式有什么用
  • pval 胶水
  • nodejs前后端数据交互
  • css要学到什么程度
  • 如何进行arp病毒防范
  • NGUI 响应touchscript 的 tuio动作
  • 安卓如何取消长按电源键关机
  • shell脚本监听端口
  • [置顶] 转载自官方-unity5.0正式发布了,看看带来哪些重要的新特性!
  • js行号显示的文字不一样
  • scrapy python
  • 选择排序图解过程
  • Dalvik VM (DVM) 与Java VM (JVM)之间有哪些区别
  • 河南普通发票查询真伪查询系统
  • 山西税务官网登录
  • uk怎么查看发票开票额度
  • 安徽省建筑企业资质查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设