my_gallery特效,旋转,倒影,教程.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
my_gallery特效,旋转,倒影,教程

Gallery特效Android中gallery特效的使用,使用比较多的就是旋转,倒影,效果,让后可以通过自己的创意,写出更好的效果。例:旋转效果(Gif格式的图片,保存后可以看到动画效果)网上的搜索的效果基本上是这种效果:其实这样的效果很多,看自己的想象力。把原理弄清楚了基本上是可以实现的,其中几个比较重的知识是,Matrix和Camera类的应用。都是android.graphics.包下面的,除了倒影效果外,gallery的其他的所有的效果都是使用这两个类来完成的。这两方面的知识可以参考:my_android.graphics.Matrix学习笔记.docx,和 my_android.graphics.Camera图片绕X,Y,Z轴旋转.docx 文档,我会一起打包。倒影效果:思路获取一张图片---》反转高度为原来的1/2---》在新的图片上会一个渐变的矩形框-----》把这几个按照顺序全部画到画布上---》ok任务结束,放回给Gallery的视图,注意是在适配器中完成这个操作的。具体代码就在不在这里讲,有代码:主要讲几个需要注意地方很容易忽略的位子,gallery可以一直转动的效果,就是说即使只有5张图片,可以循环的拖动,这个效果其实没有真正的实现只是一个假象,我们在适配器中getContent(),设置他的返回值很大,例:Integer.Max_Value差不多有21亿多大然后返回视图的时候用position取余,可以达到这样的效果;2.截图中我们看到有对图片的处理,因为gallery中的每一个Item能够接受的图片的大小是有限制的,我们创建Bitmap的时候需要给一个参数给Bitmap来减少图片所占的内存,并且以流的形式来读取,这样可以避免一个内存错误的问题。其中options.inSampleSize = 5是表示放大缩小的比例。3.图片的大小可能是各种尺寸的,我们需要做大小的统一处理,设置imageView的layoutParams来完成,(130,90)是最终输出图片的大小。也就是Item中每一个Item。旋转效果:思路在根据item(以后出现的item都是表示gallery中的一个视图),所在的位置来计算它的旋转角度------》根据旋转角度来计算缩放大小,----》应用旋转和缩放效果,这个流程看上去很简单,但是细节确实很多,特别是一些参数的设置,必须自己慢点摸索出来,才能做出不错的效果。我们需要重写gallery类的方法:getChildStaticTransformation(View child, Transformation t)主要是用来控制gallery中每个图片的旋转(重写的gallery中方法),计算传过来的item的半径值,用来item判断是否在中心位置,如果在中心位置是不需要旋转的,如果不是在根据和屏幕中心位置来计算旋转角度,判断中心位置的方式:首先获取屏幕的半径值,mCoveflowCenter://主要功能的代码 private void transformImageBitmap(ImageView child, Transformation t, int rotationAngle) { //对效果进行保存 mCamera.save(); //获取Matrix这个很重要, final Matrix imageMatrix = t.getMatrix(); //图片高度 final int imageHeight = child.getLayoutParams().height; //图片宽度 final int imageWidth = child.getLayoutParams().width; //返回旋转角度的绝对值 final int rotation = Math.abs(rotationAngle); // As the angle of the view gets less, zoom in if (rotation mMaxRotationAngle) {//如果旋转角度的绝对值小于最大的旋转角度,我们按照比例来缩放,这里根据自己的需要来更改缩放的比例, float zoomAmount = (float) (mMaxZoom + (rotation * 1.5)); mCamera.translate(0.0f, 0.0f, zoomAmount); } else {// mCamera.translate在Z轴上正向移动camera的视角,实际效果为放大图片。 // 如果在Y轴上移动,则图片上下移动;X轴上对应图片左右移动。 rotationAngle = -(int) (((float) (mCoveflowCenter - Math.abs(getC

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档