java 如何放大动画图,Android仿微信图片放大动画
#今年三月份直接上手做的android,代碼寫(xiě)的不規(guī)范,有問(wèn)題希望指出,謝謝(app數(shù)英)
類似于微信 圖片瀏覽的效果,我的做法是在兩個(gè)activity A\B之間傳遞圖片的位置信息
思路:在activity A的list view上有一張圖片,通過(guò)方法獲取到此image view相對(duì)于 window 的坐標(biāo)(也就是 距離手機(jī)屏幕上側(cè)和左側(cè)的距離),然后將這些參數(shù)傳遞給 activity B,此時(shí)activity B創(chuàng)建一個(gè) image view,image view的寬高是 activity A 里點(diǎn)擊的圖片的寬高,然后設(shè)置 margin left margin top,此時(shí)就造成一種假象(activity a 的圖片直接傳遞到了 activity B),下面就是 縮放代碼
注意:根據(jù)你的代碼 可能 activity a 里邊計(jì)算出來(lái)的 上側(cè)距離可能要減去 活著加上 狀態(tài)條的高度,具體根據(jù)個(gè)人代碼判斷。
上邊的 gif 只是粗略的演示,如有疑問(wèn),可以留言 一同解決
下邊是部分主要代碼:
#activity A
//獲取上邊距,左邊距,以及圖片寬高
//可能幾個(gè)人計(jì)算出的margintop要減去 狀態(tài)欄高度
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);
//由于是在已發(fā)布的項(xiàng)目上更改的代碼,我這只是簡(jiǎn)單的演示, 所以沒(méi)有做參數(shù)傳遞, 直接在b頁(yè)面寫(xiě)死的
#activity B
//由于我使用的第三方庫(kù) PhotoView(處理圖片放大縮小),實(shí)際上我的圖片并不是正方形(我這邊放大的圖片和手機(jī)的比例一樣),所以下邊高度及 縮放比例的計(jì)算會(huì)出現(xiàn)不同
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);
//水平 和 豎直方向上的 偏轉(zhuǎn)量,一定要設(shè)置
bigImage.setPivotX(0f);
bigImage.setPivotY(0f);
final float startScale = (float)width / Constant.getScreenWidth(this);
final float startHeightScale = ((float)height / Constant.getScreenHeight(this));
//AnimationSet提供了一個(gè)把多個(gè)動(dòng)畫(huà)組合成一個(gè)組合的機(jī)制,并可設(shè)置組中動(dòng)畫(huà)的時(shí)序關(guān)系,如同時(shí)播放,順序播放等
//解釋,2秒內(nèi) bigimage 的x由 mar_left 到0;
//bigimage的y由mar_top到0;
//然后縮放比例
//起初我寫(xiě)的是//with(ObjectAnimator.ofFloat(bigImage,View.SCALE_X,startScale,1f)).
//發(fā)現(xiàn)并沒(méi)有效果, 我一直以為 最大只能1f,后來(lái)實(shí)驗(yàn)下才知道
//如有錯(cuò)誤,請(qǐng)指出
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();
//點(diǎn)擊縮小,返回 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();
}});
總結(jié)
以上是生活随笔為你收集整理的java 如何放大动画图,Android仿微信图片放大动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 波速尔歼一多少迈?
- 下一篇: 车上放柏木有什么意义