600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java 如何放大动画图 Android仿微信图片放大动画

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

时间:2024-08-05 00:06:35

相关推荐

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();

}});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。