要求将界面中显示的任意一个view(已经Measure好了)缩放移动到任意位置直至消失

可以用图片这样描述:

实现思路:使用系统缩放动画ScaleAnimation进行缩放和移动,缩放倍数和移动距离根据移动的view的xy宽高和目标xy计算,任意位置的动画将受到不同的布局限制,但activity有个windows里面包含decorView,decorView里面又包含rootview,decorView不包含通知栏,但包含通知栏的高度,所以选择使用rootview,即xml布局的上一层FrameLayout布局,你可以在rootview(通过getwindows().getdecorview.findViewById(android.R.id.content)或 activity.getWindow().getDecorView().getRootView();获得)添加移动的view,便可以在任意位置移动

代码实现:

public static void animToTagOnWindows (Activity activity,View tagView,View toView,float scale) {

int[] toXY = new int[2];

toView.getLocationOnScreen(toXY);

int centerX = (int) (toXY[0] + toView.getMeasuredWidth()/2f);

int centerY = (int) (toXY[1] + toView.getMeasuredHeight()/2f);

animToTagOnWindows(activity,tagView,centerX,centerY,scale);

}

public static void animToTagOnWindows (Activity activity, View tagView, int toCenterX, int toCenterY, float scale) {

int[] winXY = new int[2];

tagView.getLocationOnScreen(winXY);

float toX = tagView.getMeasuredWidth()*scale;

float toY = tagView.getMeasuredHeight()*scale;

float pivotX = (toCenterX-winXY[0])*1f/tagView.getMeasuredWidth();

float pivotY = (toCenterY-winXY[1])*1f/tagView.getMeasuredHeight();

ScaleAnimation scaleAnimation =new ScaleAnimation(1.0f,toX, 1f, toY, Animation.RELATIVE_TO_SELF,pivotX, Animation.RELATIVE_TO_SELF, pivotY);

final ImageView tempMoveView = new ImageView(activity);

tempMoveView.setScaleType(ImageView.ScaleType.FIT_XY);

Bitmap tempBm = getViewBitmap(tagView);

tempMoveView.setImageBitmap(tempBm);

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(tagView.getMeasuredWidth(), tagView.getMeasuredHeight());

params.setMargins(winXY[0],winXY[1],winXY[0] +tagView.getMeasuredWidth(),winXY[1]+tagView.getMeasuredHeight());

tempMoveView.setLayoutParams(params);

final FrameLayout frameLayout = (FrameLayout) activity.getWindow().getDecorView().getRootView();

frameLayout.addView(tempMoveView);

scaleAnimation.setDuration(1000);

scaleAnimation.setFillAfter(true);

scaleAnimation.setAnimationListener(new Animation.AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationEnd(Animation animation) {

//移除临时显示动画的view

frameLayout.removeView(tempMoveView);

}

@Override

public void onAnimationRepeat(Animation animation) {

}

});

tempMoveView.startAnimation(scaleAnimation);

}

博客出处

最终效果如下:

android 放大消失动画效果,android任意view移动缩放至消失到任何位置的通用动画...相关推荐

  1. android图片消失动画效果,用setAnimationStyle来设置popwindow显示消失的动画效果

    popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果 android:windowEnterAnimation表示进入窗口动画 andro ...

  2. android 圆动画效果,Android实现任意绕圆或椭圆旋转的动画——SatelliteAnimator使用介绍...

    话说实习也就快一个月了,虽然没干什么活,但是这几天总算是有一些可以写的东西. 代码中应该还存在很多问题要修改,大神们请赐教,不胜感激. 开始正题. 关于Android实现任意绕圆或椭圆旋转动画,我称之 ...

  3. android 自定义view 动画效果,Android自定义view实现阻尼效果的加载动画

    效果: 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又 ...

  4. android下雨动画效果,Android 自定义View(二) 下雨效果

    Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...

  5. android绘图拖影效果,Android自定义View绘图实现拖影动画

    前几天在"Android绘图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙,我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...

  6. android 自定义加载动画效果,Android自定义View实现loading动画加载效果

    项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. ...

  7. android app启动图片 加动画效果,Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案...

    Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案 大家在设计APP的末期,都会想给APP搞一些"花里胡哨"的特效来提高APP的B格.博主表示亲测有效 ...

  8. android 点击图片动画效果,Android仿微信图片点击全屏效果

    废话不多说,先看下Android图片点击全屏效果: 先是微信的 再是模仿的 先说下实现原理,再一步步分析 这里总共有2个Activity一个就是主页,一个就是显示我们图片效果的页面,参数通过Inten ...

  9. android图片gif动画效果,android中类似于gif 实现图片的动画效果

    案例:实现gif动画效果,连续播放图片 由于是转载的,也就没必要多说,直接上代码 案例:在android中实现gif动态图片的效果: EarthAnimationActivity.java packa ...

最新文章

  1. Connecting the Dots: 应用于主动单目深度估计的深度学习模型(CVPR2019)
  2. 一位美女博士的人脸识别历程
  3. QT下 cannot find -IGL的解决办法
  4. Html.RenderPartial与Html.RenderAction
  5. 检验例题_高考必考|化学工艺流程之物质的分离提纯及检验鉴别,轻松拿分
  6. python 日期操作【转】
  7. 利用TP-Link+花生壳建立属于自己的网站
  8. Transcad转Ptv Visum的学习之路
  9. 给大家推荐一个经典的ping工具-MTR
  10. 《图论及其应用》学习笔记(树)
  11. Jdk8 中文 api(百度网盘免费下载)
  12. 【SpringBoot】1、创建第一个SpringBoot项目
  13. 进击ReactNative-徐如林-React源码解析
  14. 科学划定“三区三线” 严格保护与合理利用自然资源
  15. GPU跑TensorFlow的各种显卡下的电脑配置(1080ti)
  16. 【CDOJ 1323】柱爷的下凡
  17. 传奇列表获取失败与登录器太老怎么解决
  18. React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念
  19. 国外B端竞品调研网站一网打尽
  20. 在 SQL 中计算两个时间戳相隔的天时分秒

热门文章

  1. 神经网络模型预测控制,神经网络回归预测模型
  2. iOS高仿微信、仪表盘、图片标注图片滤镜、高斯模糊、上拉加载、下拉刷新等源码
  3. Imatest软件的使用
  4. JavaWeb笔记——JDBC
  5. 和亲人相处的时光,就是最美的时光。
  6. OBCP考试经验分享
  7. Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
  8. 怎样给视频配音?三种配音方法来助力,简单又方便
  9. 微信公众号发送红包功能实现源码
  10. Mybatis新版使用foreach标签遍历Set集合