java 如何放大动画图,Android仿微信图片放大动画

#今年三月份直接上手做的android,代码写的不规范,有问题希望指出,谢谢(app数英)

类似于微信 图片浏览的效果,我的做法是在两个activity A\B之间传递图片的位置信息

思路:在activity A的list view上有一张图片,通过方法获取到此image view相对于 window 的坐标(也就是 距离手机屏幕上侧和左侧的距离),然后将这些参数传递给 activity B,此时activity B创建一个 image view,image view的宽高是 activity A 里点击的图片的宽高,然后设置 margin left margin top,此时就造成一种假象(activity a 的图片直接传递到了 activity B),下面就是 缩放代码

注意:根据你的代码 可能 activity a 里边计算出来的 上侧距离可能要减去 活着加上 状态条的高度,具体根据个人代码判断。

上边的 gif 只是粗略的演示,如有疑问,可以留言 一同解决

下边是部分主要代码:

#activity A

//获取上边距,左边距,以及图片宽高

//可能几个人计算出的margintop要减去 状态栏高度

int[] position = new int[2];

headerImageV.getLocationInWindow(position);

int margin_top = position[1];

int margin_left = position[0];

int width = headerImageV.getWidth();

int height = headerImageV.getHeight();

Intent intent = new Intent(getActivity(), EnlargeimagevActivity.class);

intent.putExtra(EnlargeimagevActivity.IMG_URL, personModel.getAvatar_320());startActivity(intent);

//由于是在已发布的项目上更改的代码,我这只是简单的演示, 所以没有做参数传递, 直接在b页面写死的

#activity B

//由于我使用的第三方库 PhotoView(处理图片放大缩小),实际上我的图片并不是正方形(我这边放大的图片和手机的比例一样),所以下边高度及 缩放比例的计算会出现不同

final int width = 495;

final int height = (int)((float)Constant.getScreenHeight(this)/Constant.getScreenWidth(this) * width);

final int mar_left = 45;

final int mar_top = 1030;

RelativeLayout.LayoutParams para = new RelativeLayout.LayoutParams(width, height);

para.leftMargin = mar_left;

para.topMargin = mar_top - (height/2 - width/2);

layout.addView(bigImage, para);

//水平 和 竖直方向上的 偏转量,一定要设置

bigImage.setPivotX(0f);

bigImage.setPivotY(0f);

final float startScale = (float)width / Constant.getScreenWidth(this);

final float startHeightScale = ((float)height / Constant.getScreenHeight(this));

//AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等

//解释,2秒内 bigimage 的x由 mar_left 到0;

//bigimage的y由mar_top到0;

//然后缩放比例

//起初我写的是//with(ObjectAnimator.ofFloat(bigImage,View.SCALE_X,startScale,1f)).

//发现并没有效果, 我一直以为 最大只能1f,后来实验下才知道

//如有错误,请指出

AnimatorSet set = new AnimatorSet();

set.play(ObjectAnimator.ofFloat(bigImage,View.X,mar_left,0)).

with(ObjectAnimator.ofFloat(bigImage, View.Y, mar_top - (height / 2 - width / 2), 0)).

with(ObjectAnimator.ofFloat(bigImage,View.SCALE_X,startScale*(1/startScale),1f*(1/startScale))).

with(ObjectAnimator.ofFloat(bigImage, View.SCALE_Y, startHeightScale * (1 / startHeightScale), 1f * (1 / startHeightScale)));

set.setDuration(2000);

set.setInterpolator(new DecelerateInterpolator());

set.start();

//点击缩小,返回 activity A

Constant.bindImage(bigImage, imgurl, false);

bigImage.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {

@Override

public void onPhotoTap(View view, float x, float y) {

AnimatorSet set = new AnimatorSet();

set.play(ObjectAnimator.ofFloat(bigImage,View.X,0,mar_left)).

with(ObjectAnimator.ofFloat(bigImage,View.Y, 0,mar_top - (height/2 - width/2))).

with(ObjectAnimator.ofFloat(bigImage,View.SCALE_X,1f*(1/startScale),startScale*(1/startScale))).

with(ObjectAnimator.ofFloat(bigImage,View.SCALE_Y,1f*(1/startHeightScale),startHeightScale*(1/startHeightScale)));

set.setDuration(2000);

set.setInterpolator(new DecelerateInterpolator());

set.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

finish();

overridePendingTransition(R.anim.slide_other, R.anim.slide_other);

}

@Override

public void onAnimationCancel(Animator animation) {

super.onAnimationCancel(animation);

}

});

set.start();

}});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014 网选 5012 Dice(bfs模板)

1 /*2 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同!3 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同!4 5 思路&am…

matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究

研究与开发 现代计算机 2019.04 上 文章编号:1007-1423(2019)10-0031-05 DOI:10.3969/j.issn.1007-1423.2019.10.007 基于 DPI 和 BP 神经网络的 P2P 流量识别研究 万建伟,胡勇 (四川大学电子信息学院,成都 610021) 摘要&#xff…

2014 网选 5011 Game(Nim游戏,数学题)

/*题意&#xff1a;Nim游戏&#xff01; 思路&#xff1a;通过异或&#xff0c;判断将n个数表示成二进制的形式之后&#xff0c;是否对应位的数字1 的个数是偶数&#xff01; */ #include<iostream> using namespace std;int main(){int n, x, s;while(cin>>n){s…

汉诺塔实践python,Python练习题11:汉诺塔实践

在终端输出如下信息--python在终端输出如下信息--python ???????????????????????????????????????????????????????????????????????????????????????????????? 描述 练习一…

oracle授权只读用户,Oracle创建只读用户(账号)的方法

第一步&#xff1a;创建用户(需要使用有dba管理员权限的用户创建一个新的用户&#xff0c;比如system)create user 用户名 identified by 密码 default tablespace 表空间;第二步&#xff1a;赋连接权限grant connect to 用户名;grant Resource to 用户名;权限分类&#xff1a;…

java中图片文件的传输及显示(Socket以及ServerSocket演示)

//客户端部分 package testSix;import java.awt.Graphics; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.util.Iterator;import javax.imageio.ImageIO; import …

oracle 表约束非空,oracle--约束(主键、非空、检查)

问题1:学号重复了&#xff0c;数据还可以插入成功使用主键约束&#xff1a;学号是唯一标识一条数据的&#xff0c;所以必须唯一且不能为空---(1)、在确定为主键的字段后添加 primary key关键字---(2)、在创建表的后面使用&#xff1a;constraints pk_表名_字段名 primary key(字…

先序,中序,后序线索二叉树

//后序线索&#xff0c;这种方法不容易想到 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 #include<algorithm>5 6 using namespace std;7 8 struct TREE{9 int val; 10 TREE *ch[2]; 11 TREE *thread;//该节点的线索的…

cdp备份适合oracle吗,备份系统建设中的四个认识误区,你有吗?

【摘要】本文总结了企业在备份建设中常见的四个认识误区。【作者】李志刚企业在备份建设中&#xff0c;主要的认识误区有以下几个&#xff1a;一、用双机、阵列复制等系统冗余替代数据备份双机双柜可实现服务器和存储的高可用性&#xff0c;保障业务持续运行&#xff0c;但绝不…

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art

1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 #include<algorithm>5 #define N 10000056 using namespace std;7 8 int c[35];9 int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色&#xff0c;-1表示的是非纯色 10 int n, m; …

oracle的todate函数 不用英文,关于在mybaties 和 oracle的to_date函数的问题?

ITMISSD)TO_DATE使用详解时常使用to_date函数来查询特定时间内的数据。语法&#xff1a;TO_DATE(x [, format])用于将字符串x转换为时间值&#xff0c;该函数可以指定一个可选的字符串format参数来说明x的格式。如果没有指定format参数&#xff0c;日期就使用默认的数据库格式(…

2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

1 /*2 这是我做过的一道新类型的搜索题&#xff01;从来没想过用四维数组记录状态&#xff01;3 以前做过的都是用二维的&#xff01;自己的四维还是太狭隘了.....4 5 题意&#xff1a;悟空救师傅 &#xff01; 在救师父之前要先把所有的钥匙找到&#xff01;6…

oracle move 换用户,Oracle move方法释放delete后的表空间

在新增记录时,高水位线会慢慢往上移,但是在删除记录后,高水位线却不会往下移。在使用delete from命令删除大量数据时会导致因HWM引起的性能问题。删除高水位的最直接的方法是truncate Table。-----Oracle 频繁delete表空间无法释放&#xff0c;释放表空间方法&#xff0c;清除…

oracle 字段除以1000,ORACLE常用}1000(之一)_oracle

大家在oracle的r候可能龅胶芏嗫雌聿浑y的}, 特eπ率碚f, 今天我伟阉Y一下, l布o大家, 希望Υ蠹矣助! 和大家一起探, 共同M步!     ORACLE高手碚f是不用看的. 1. Oracle安b完成后的初始口令?   internal/oracle   sys/change_on_install   system/manager   scott/…

java中图片文件的判断

javax.imageio 类 ImageIO BufferedImage bi ImageIO.read(resFile);//resFile --- InputStreamif(bi null){ System.out.println(此文件不为图片文件); }try {//判断是否为图片文件并且返回图片的格式&#xff01;ImageInputStream iis ImageIO.createImageInputStream(o)…

oracle 查看数据库性能,oracle 11G使用statspack查看数据库的性能

1.安装Statspack工具(statspack工具的脚本在$ORACLE_HOME/rdbms/admin目录下,全是以sp开头的文件)[oracleoracle ~]$ sqlplus / as sysdbasql> select file_name,tablespace_name from dba_data_files;FILE_NAMETABLESPACE_NAME-------------------------------------------…

java中JTextPane使输出字符到指定的宽度换行,并将垂直滚动条的位置移动到输出的最后位置...

SimpleAttributeSet set new SimpleAttributeSet();Document doc tp.getStyledDocument(); FontMetrics fm tp.getFontMetrics(tp.getFont());//得到JTextPane 的当前字体尺寸int paneWidth tp.getWidth();//面板的宽度String text new String(bt, 0, len);  try{for(int…

oracle 10g rac 修改sga_target不生效,Oracle Rac 修改SGA_TARGET值无变化

Oracle Rac 修改SGA_TARGET值无变化发布时间&#xff1a;2020-08-13 23:02:13来源&#xff1a;ITPUB博客阅读&#xff1a;93作者&#xff1a;dmcatding系统&#xff1a;Red Hat Enterprise Linux Server release 6.4 (Santiago)数据库&#xff1a;Oracle 11.2.0.4.1710171、 al…

codeforces George and Job

1 /*2 题意&#xff1a;给一个长度为n的序列&#xff0c; 从中选择长度为m的k个区间&#xff08;任意两个区间不会有公共部分&#xff09;3 使得所选择的区间的和最大&#xff01;4 思路&#xff1a;这是一种很常见的dp5 6 dp[i][j] 表示的是前 i 个数选择…

oracle表空间 设置,Oracle表空间怎么设置和管理

前言表空间是 Oracle 特有的一种逻辑结构&#xff0c;是管理和组织 Oracle 数据文件一种方式&#xff0c;一个Oracle 数据库能够有一个或多个表空间&#xff0c;而一个表空间则对应一个或多个物理的数据库文件。Oracle 的表空间分为永久空间和临时表空间&#xff0c;同时又分为…