西甲2015赛程表

更新 --- android实现自定义RelativeLayout可拖动、缩放、旋转Tex...

[复制链接]
来自: 电点mxn 分类: Android精品源码 上传时间: 2016-8-16 09:24:12
Tag:

项目介绍:

因最近公司项目需求,需要做出一个在一张背?#24052;?#19978;添加文字,文字可编辑如修改颜色、样式、字体、背景添加气泡等,也可对文字的位置进行修改,实现拖动、旋转、缩放等功能,类似于美图秀秀中文字的添加,最后可将背?#24052;?#21644;文字联合生成一张图片,保存到相册中,自网上也没有找到合?#23454;?#20195;码以供参考,所以决定自己写一个自定义?#30446;?#20214;实现以上的效果。

? ? 先贴上图看一下效果,这个demo的基本功嫩包括:

? ?? ???一、点击自定义View可?#28304;?#24314;标签,点击标签滑动可以改变标签位置;
? ?? ???二、在View上进行两指缩放旋转可以改变标签的方向和大小,当有多个标签TextView存在时,两指缩放和旋转会自动寻找离两指中心点最近的TextView标签进行操作
? ?? ???三、在自定义上可识别左滑和?#19968;?#25805;作!
? ?? ???四、可监控TextView的实时滑动!
? ?? ???五、对话框中可滑动滑条改变字体颜色!
? ?? ???六、点击保存能将画布生成图片保存下来!
? ?? ?
? ? 实现这个效果的基本思路如下:

? ? 首先,我们自定义一个MyView?#22363;蠷elativeLayout,然后对该MyRelativeLayout进行onTouchEvent的?#24405;?#36827;行监听,?#28304;?#26469;判断是什么?#24405;?#23545;于父布局,我们需要分类的?#24405;?#26377;单击?#24405;?#24038;?#19968;?#21160;?#24405;?#20004;个手指的缩放,旋转操作,对于最后操作的TextView,我们需要监听的?#24405;?#26377;单击?#24405;?#20004;个手指的缩放和旋转操作。

? ? 对于MyView,单击?#24405;?#23601;是单纯的点击?#24405;?#20182;是用来触发产生新的TextView的?#24405;?#26469;源,也就是点击MyView就会生成新的标签,还有左?#19968;?#21160;?#24405;?#22240;为在公司的项目中还需要添加?#21496;?#30340;效果,所以我们要监听左?#19968;?#21160;的?#24405;?#26469;实现切换上下两种不同的?#21496;?#25928;果,然后通过借口回调的的方式告诉调用者即可!最后就是两个手指的滑动?#24405;?#25105;们要通过两个手指在移动过程中两个手指之间的距离的渐变来判断当前用户是想实现放大还是缩小的功能,同时,根据刚开始的两个手指的落点的连线和滑动过程中两个手指的连线来确定用户的旋转角度,从而改变标签TextView的旋转角度。

? ? 对于标签TextView本身,点击?#24405;?#26159;为了确定我门当?#23433;?#20316;的焦点是在哪个TextView上,因为到时候MyView上有很多个标签TextView,我门会把所有的TextView保存到List之中去,然而?#30475;?#25805;作的只有一个全局的TextView所以我们?#30475;?#22312;点击一个TextView的时候就要把被点击的TextView赋值给全局的TextView,代表我们操作的是哪一个View,然后当我们按住TextView滑动的时候,实现的效果是在MyView上的移动效果,当我们两个手指在TextVIew上的时候,TextView本身也要监听是否有旋转和缩放,从而改变TextView自己的旋转角度和缩放效果。

? ? 首先,我们对MyView进行分析。当然稍后?#19968;?#32473;出整个自定义控件的所有代码。

? ? 我们需要关注的是MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP,MotionEvent.ACTION_POINTER_UP,MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_CANCEL.

? ? 首先,我们讨论在MyView上滑动实现对TextView的缩放和旋转操作。当我们有两个以上的手?#22797;?#25720;view的时候,菜具?#22797;?#21457;缩放和旋转的条件,此时,我们需要监听ACTION_DOWN和ACTION_POINTER_DOWN,如果两个?#24405;?#21516;时触发,说明有两个手指,此时我们纪录下刚落点时的两个点的坐标,然后在两个手指的滑动过程中,我们在ACTINON_MOVE?#24405;?#20013;去动态的获取滑动中的两个点的坐标,然后实时的去计算两个点之间的距离,再与之前的距离进行比较,如果比之前的打大,说明用户的意图是放大,反之就是缩小,于此同时,计算两个点之间的连线与之前两个点之间点连线的角度,再根据整个计算出来的角度对TextView进行旋转操作。

? ? 由于为了提高用户的体验,我们决定当MyView上有很多标签TextView的时候,在MyView上进行缩放和旋转操作的时候,我们会自动的去计算两个手指之间的中点坐标,然后去遍历List中存储的所有TextView的位置信息,去匹配List中所有TextView的中心与两个手指中点最近的TextView,对它进行操纵,这样,用户就不用专门去找到某一个TextView去点击一个它才能对他操作了,提高用户体验度,尤其是操作某一个TextView非常小的时候,手指压根点不到的时候。

? ? 另外,在TextView上的操作,原理都一样,在这里九不再赘述,稍后给出的代码中也有相应的注释,相信一看便知,大?#20197;?#27979;试的时候直接将该自定义View使用到布局文件中即可,就可以测试其功能,项目还没有上线,所以说该自定义控件还有bug没有修改,希望大家一起改正,谢谢。

? ? 这次就不上代码了,?#34892;?#36259;的去github上下载源码吧。觉得好的,给个赞哦!哈哈

? ? ?我是Cretin,一个可爱的小男孩。

? ? github地址:https://github.com/MZCretin/RelativeLayoutDemo


相关源码推荐:

    我来说两句
    所有评论(17)
    九酒 2016-8-16 11:13:53
    写的真的很不错
    回复
    chaoyue 2016-8-16 11:23:34
    相当不错,?#34892;?#26080;私分享精神!
    回复
    Mr_Zhao 2016-8-16 11:32:35
    膜拜大神~
    回复
    M知秋 2016-8-16 11:59:02
    ?#34892;?#27004;主分享 这个感觉好炫酷啊
    回复
    gongags 2016-8-16 12:26:03
    ?#34892;?#20998;享,安卓巴士有你更精彩:lol
    回复
    ricktians 2016-8-16 13:38:43
    mark,收藏了
    回复
    wangyongchao74 2016-8-16 15:04:32
    学习了.....
    回复
    123下一页
    1677 0 0
    相关代码
      代码贡?#23376;?#38596;榜
      用户名 下载数
      联系我们
      首页/微信公众账号投稿

      帖子代码编辑/版权问题

      QQ:435399051,769657487

      如?#20301;?#24471;代码达人称号

      如何成为签约作者

      代码分类
      联系我们
      关闭
      合作电话:
      15618560077
      Email:
      [email protected]
      商务市场合作/投稿
      问题反馈及帮助
      联系我们
      领先的中文移动开发者社区
      18620764416
      7*24全天服务
      意见反馈:[email protected]

      扫一扫关注我们

      Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )

      西甲2015赛程表 米德尔斯堡伯恩茅斯 多特蒙德巴西前锋 河北十一选五开奖走趋图 黄金足球电子游戏 巴萨vs塞维利亚直播 彩票开奖api 宝石女王注册 勒沃库森市 电竞比分直播1z 江苏快3开奖号码昨天