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.pswp.cn/news/531661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531661.shtml
英文地址,請注明出處:http://en.pswp.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;同時又分為…