写之前,小小吐槽下今天的状态,super差了,老师给我们讲的是J2EE里面的web知识,可班上就我一人自学的移动开发,对他讲的完全不懂,还tomcat什么的,现在数据的传递不都是JSON么,还是我比较肤浅啦,虽然只是一个大三的学生,感觉学不到自己喜欢的东西
今天我看了google官方的文档,有一个讲的不错,就是对bitmap做一个zooming,还是自由伸缩动画,感觉不错,就想练习自己写一个这样的动画,官方用的是属性动画animator,的确现在用animation比较少了.就用这个animator吧
首先讲下这个动画效果,我也不知道怎么截图好,不过我在看人家博客都喜欢先看效果,然后考虑自己有米有方法实现,如果有就pass,可没有图片就不知道效果了,这里我也不截图了,代码比较少.
首先,我们必须要掌握Objectanimator的用法,不知道的小伙伴可以洗洗睡了.
功能实现:将位于(x1,y1)的图片,大小100*100,缩放到(200,300)位置,大小250*200,动画时间5s
上代码:
ImageView image=(ImageView) findViewById(R.id.image);
image.setPivotX(0f); //设置中心为相对位置(0,0)
image.setPivotY(0f);
AnimatorSet set=new AnimatorSet();
set.play(ObjectAnimator.ofFloat(image, View.X, image.getX(),200)).with(//View.X是X的属性名哦
ObjectAnimator.ofFloat(image, View.Y, image.getY(),300) //View.Y是Y的属性名哦
).with(
ObjectAnimator.ofFloat(image, View.SCALE_X, 1f,1.5f)
).with(
ObjectAnimator.ofFloat(image, View.SCALE_Y, 1f,2f)
);
set.setDuration(5000);
set.setInterpolator(new DecelerateInterpolator());
set.start();
这就是这个效果啦,果然属性动画还是比较好用的,我也就学了个View.Y,View.SCALE_X这几个常量,省得自己写属性名了,还容易出错
相比官网那个对图片平移大小伸缩的效果算法上面还是自己的简单,官方只是我的逆运算,特别难懂
tip:想要得到自定义大小图片的小伙伴可以使用官方给的建议,用BitmapFactory.options哦,在decode之前可别忘记inJustDecodeBounds为true哦.
还有一种方法对图片大小处理的就是Bitmap.createScaledBitmap(src, dstWidth, dstHeight, filter),参数2与3就是想要得到图片的宽高,参数四表示是否对参数一过滤,建议把处理后的src给recycle()了