黑马程序员技术交流社区

标题: 【Android】自定义View那些事【连载二】 [打印本页]

作者: Android_Robot    时间: 2016-7-11 16:54
标题: 【Android】自定义View那些事【连载二】
自定义View那些事【二】
涨薪机密——潮流新技术、新框架资源以后不定期更新,
  


学Android的看过来,项目里这个截图,眼熟吧,哪个知识点是自定义View?能讲出来怎么实现的吗?

上一篇说了如何自定义View显示的内容,下面来讲讲如何自定义View中子View的位置以及如何让View随手指移动进行变化

如何自定义View中子View的位置

此处由于你要自定义的View中是包含子View的,那么你应该继承ViewGroup,并且通常情况下,我们为了省去实现onMeasure方法,那么就可以继承系统提供的某个布局,如FrameLayout。自定义子View的位置,那么需要重写onLayout方法了,该方法是允许你随意指定子View位置的。
       现在我们设定需求,要求实现一个ViewGroup,它的子View是从右往左边排列的。代码如下:
效果图如下:

总结,通过layout的方法来控制View的位置,这个属于比较简单的。

如何让View随手指移动进行变化

要实现这个,那么你需要完成2个点:
1. 监听手指移动的距离
2. 让View进行一些变化
对于第一点,监听手指移动的距离,这个很简单,可以重写onTouch方法,获取手指移动距离,也可以借助ViewDragHelper所封装的方法来监听手指的移动。对于通过onTouch方法来获取手指移动距离的代码略过,下面展示一下通过ViewDragHelper来获取手指距离的代码,你需要熟悉一下ViewDragHelper的用法才能看懂下面的代码,clampViewPositionHorizontal方法的dx参数就是手指移动的距离,代码如下:

所以,获取手指移动距离很简单,我们主要把精力放在让View进行一些变化上。
这些变化一般是的是缩放,平移,透明,旋转的变化,这些变化Android都为我们提供了对应的操作View属性的方法,代码如下:
当然如果你需要让View执行某些动画效果,那么你要借助属性动画了,如果你想自定义动画效果,那么就需要使用ValueAnimator,或者继承Animaton类实现自定义动画。
      
总结
以上总结了我们自定义View中最常用的情景,当然还有其他很多情况。不过我们可以在这3种基础上举一反三。遇到复杂的效果,就分离模块,一点一点实现,自定义View也就那点事。



其他精华推荐:
【强荐!】2016年最新Android学习路线图——按此路线图学习月薪过万{ 火速收入}
      【Android】自定义View那些事【连载一】
       为什么黑马程序员能给你2W的月薪,教学为证!
       [持续更新]2016最新Android视频教程+源码+技巧/经验+软件+面试


作者: 行路难    时间: 2016-7-11 18:41
很有用,多谢分享
作者: 行路难    时间: 2016-7-11 18:41
很有用,多谢分享
作者: 行路难    时间: 2016-7-11 18:50
很有用,多谢分享

作者: 13182002757    时间: 2016-7-11 20:22
学习一下
作者: DDV    时间: 2016-7-11 21:36
学习学习 都是大神啊
作者: 896575538    时间: 2016-7-11 23:06
还没学到   表示看不懂

作者: 虾饺不瞎搞    时间: 2016-7-11 23:07
很有用,,哈哈
作者: wanglongbingdao    时间: 2016-7-12 00:03
讲解的好细致哦
作者: EvilFoX    时间: 2016-7-12 16:32
谢谢楼主,楼主辛苦了,黑马加油
作者: 富林    时间: 2016-7-12 16:34
加油!顶一个
作者: 李铮    时间: 2016-7-13 14:32
谢谢  加油加油~~~~
作者: qinxuezilu1314    时间: 2016-7-14 00:08
赞一个。。。。。。。
作者: lichmeng    时间: 2016-7-14 09:18
强势顶帖!!!
作者: miniccc    时间: 2016-7-14 23:47
还没学到   同表示看不懂
作者: jjccxx12    时间: 2016-7-15 15:32
很有用,多谢分享
作者: 申落土    时间: 2016-7-15 22:20
很有用啊|||||||||加油
作者: 申落土    时间: 2016-7-15 22:35
很有用啊|||||||||加油
作者: 申落土    时间: 2016-7-15 22:36
很有用啊|||||||||加油
作者: 申落土    时间: 2016-7-15 22:43
很有用啊|||||||||加油
作者: yl2016    时间: 2016-7-15 23:01
多谢楼主分享,学习了!
作者: yl2016    时间: 2016-7-15 23:15
学习了,多谢楼主分享
作者: jmf332376308    时间: 2016-7-15 23:48
有才,仰慕啊!
作者: a825125501    时间: 2016-7-16 00:54
高端.!!!!!!!!!!!!加油
作者: sanmaovszhe    时间: 2016-7-16 22:53
每日水一贴!!!!!!
作者: x837248435    时间: 2016-7-16 23:04
哇,做的好好
作者: x837248435    时间: 2016-7-16 23:05
哇,做的好好
作者: x837248435    时间: 2016-7-16 23:06
做的好好
作者: 胡哓甫    时间: 2016-7-17 21:20
很有用,多谢分享喽
作者: chidaodehouguo    时间: 2016-7-17 21:34
不错,给力!
作者: 紫电_恶魔    时间: 2016-7-17 22:29
顶贴,加油
作者: 896575538    时间: 2016-7-17 22:34
好东西,虽说看不懂,但还是得赞一个
作者: zhoubinjian    时间: 2016-7-18 01:08
这贴好吊
作者: 一叶知秋来    时间: 2016-7-18 21:51
谢谢。。。
作者: 13592709662    时间: 2016-7-19 02:27
刚入门。。表示难看懂
作者: sun3209571    时间: 2016-7-19 22:46
mark一下
作者: sun3209571    时间: 2016-7-19 22:52
mark一下
作者: daikaisheng    时间: 2016-7-23 00:08
膜拜楼主,楼主6666666
作者: 夜叶lx    时间: 2016-7-23 00:28
楼主说的不错,学习。。。说的好,一起加油
作者: 惊鸿游龙    时间: 2016-7-23 09:05
66666666666
作者: 赛后追溯    时间: 2016-7-23 21:51
很有用,谢谢
作者: Frank_Ms1ZR    时间: 2016-7-23 23:45
很有用啊,加油!
作者: 富林    时间: 2016-7-24 18:30
6666666666666
作者: 张程浩    时间: 2016-7-24 23:03
什么叫做显示初始化
作者: 张程浩    时间: 2016-7-24 23:05
什么叫做显示初始化
作者: miqideliwu    时间: 2016-7-26 23:49
感谢楼主分享,学习。。。,一起加油
作者: 樱释空    时间: 2016-7-27 22:01
楼主666666666
作者: truth95    时间: 2016-7-28 08:32
谢谢分享
作者: houzhiming    时间: 2016-7-28 17:57
谢谢分享,,
作者: miqideliwu    时间: 2016-7-31 00:21
代码敲烂,键盘过万
作者: 修身丶丶丶    时间: 2016-8-1 11:08
每天保持好心情
作者: yezilail    时间: 2016-8-2 10:35
非常有用。谢谢分享。
作者: 樱释空    时间: 2016-8-2 23:58
楼主 6666666666哈
作者: lynch123    时间: 2016-8-4 23:16
666666666666666666666
作者: boom_pm2.5    时间: 2016-11-14 00:24
很有用,多谢分享
作者: boom_pm2.5    时间: 2016-11-14 00:34
厉害啊,前排
作者: aA772807986    时间: 2016-11-17 00:11
谢谢分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2