這個image控件時有大小的,他的大小是不變的,旋轉了以后要完全顯示在這個image中,當然會稍微變小點
創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比豐順網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式豐順網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋豐順地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
你打開該圖片,點選項,編輯,然后輕觸圖片,會出來15個小標志,點第六個,旋轉,然后選項,儲存。OK
圖片旋轉使用動畫,設置動畫時間,旋轉完成后,設置另一張圖片
RotateAnimation 動畫,
RotateAnimation (float fromDegrees, float toDegrees, int
pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數(shù)說明:
float fromDegrees:旋轉的開始角度。
float toDegrees:旋轉的結束角度。
int
pivotXType:X軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotXValue:X坐標的伸縮值。
int
pivotYType:Y軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotYValue:Y坐標的伸縮值。
1、定義一個ImageView
定義一個ImageView是為了裝載圖片,其中的圖片將被rotate用來進行旋轉,其他View亦可。
資源文件為
Java代碼
?xml version="1.0" encoding="utf-8"?
LinearLayout
xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
ImageView
android:id="@+id/infoOperating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/operating"
android:scaleType="center"
/ImageView
/LinearLayout
其中的android:src為圖片內容,可使用附件中的圖片。
java代碼為
Java代碼
ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);
2、定義rotate旋轉效果
在res/anim文件夾下新建tip.xml文件,內容如下
Java代碼
?xml version="1.0" encoding="utf-8"?
set xmlns:android=""
rotate
android:fromDegrees="0"
android:toDegrees="359"
android:duration="500"
android:repeatCount="-1"
android:pivotX="50%"
android:pivotY="50%" /
/set
含義表示從0到359度開始循環(huán)旋轉,0-359(若設置成360在停止時會出現(xiàn)停頓現(xiàn)象)度旋轉所用時間為500ms,旋轉中心距離view的左頂點為50%距離,距離view的上邊緣為50%距離,即正中心,具體每個含義見下面的具體屬性介紹。
java代碼為
Java代碼
Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);
setInterpolator表示設置旋轉速率。LinearInterpolator為勻速效果,Accelerateinterpolator為加速效果、DecelerateInterpolator為減速效果,具體可見下面android:interpolator的介紹。
a. 關于其中的屬性意義如下(紅色部分加以注意):
android:fromDegrees 起始的角度度數(shù)
android:toDegrees 結束的角度度數(shù),負數(shù)表示逆時針,正數(shù)表示順時針。如10圈則比android:fromDegrees大3600即可
android:pivotX 旋轉中心的X坐標
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的左邊緣,如5; 百分比表示相對于Object的左邊緣,如5%; 另一種百分比表示相對于父容器的左邊緣,如5%p; 一般設置為50%表示在Object中心
android:pivotY 旋轉中心的Y坐標
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的上邊緣,如5; 百分比表示相對于Object的上邊緣,如5%; 另一種百分比表示相對于父容器的上邊緣,如5%p; 一般設置為50%表示在Object中心
android:duration 表示從android:fromDegrees轉動到android:toDegrees所花費的時間,單位為毫秒??梢杂脕碛嬎闼俣?。
android:interpolator表示變化率,但不是運行速度。一個插補屬性,可以將動畫效果設置為加速,減速,反復,反彈等。默認為開始和結束慢中間快,
android:startOffset 在調用start函數(shù)之后等待開始運行的時間,單位為毫秒,若為10,表示10ms后開始運行
android:repeatCount 重復的次數(shù),默認為0,必須是int,可以為-1表示不停止
android:repeatMode 重復的模式,默認為restart,即重頭開始重新運行,可以為reverse即從結束開始向前重新運行。在android:repeatCount大于0或為infinite時生效
android:detachWallpaper 表示是否在壁紙上運行
android:zAdjustment 表示被animated的內容在運行時在z軸上的位置,默認為normal。
normal保持內容當前的z軸順序
top運行時在最頂層顯示
bottom運行時在最底層顯示
b. 運行速度
運行速度為運行時間(android:duration)除以運行角度差(android:toDegrees-android:fromDegrees),比如android:duration為1000,android:toDegrees為360,android:fromDegrees為0就表示1秒轉1圈。
c. 循環(huán)運行
Java代碼
android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="-1"
android:repeatCount="-1"即表示循環(huán)運行,配合上android:fromDegrees="0" android:toDegrees="360"表示不間斷
3、開始和停止旋轉
在操作開始之前調用
Java代碼
if (operatingAnim != null) {
infoOperatingIV.startAnimation(operatingAnim);
}
在操作完成時調用
Java代碼
infoOperatingIV.clearAnimation();
許多朋友不知道如何停止旋轉animation,所以強制設置rotate轉動多少圈表示操作,但卻無法與操作實際的進度匹配上,實際上只要如上代碼所示清除animation即可。
方法只有一種。
步驟:
1、畫布平移坐標原點
2、旋轉畫布
示例代碼
canvas.save();//保存當前畫布狀態(tài)
canvas.translate(x,?y);?//將坐標中心平移到要圍繞的坐標點x,y
canvas.rotate(90);//旋轉角度,這里比如90度
canvas.restore();//恢復畫圖狀態(tài)到保存前
先上效果圖
源碼
單點拖動圖片對圖片進行平移操作。雙手縮放圖片大小和旋轉圖片到一定的角度。圖片縮放的時候 不能大于最大的縮放因子和小于最小的縮放因子。大于最大縮放因子或者小于最小縮放因子需要對圖像進行回彈。圖片旋轉的角度只能為90度的倍數(shù),不滿足90度要進行回彈。圖片回彈要一個漸變的效果。
大體思路: 首先,Android中提供了Matrix類可以對圖像進行處理。其次,要顯示一張圖片最容易想到的就是ImageView?;貜椧鬂u變的過程,可以通過屬性動畫進行設置。所以大體的思路是:繼承ImageView,重寫onTouchEvent()方法,判斷事件類型,在對應的事件使用Matrix對圖像進行變換。
Matrix是一個已經封裝好的矩陣,最重要的作用就是對坐標點進行變換。
舉個栗子:
1.某個點(x0,y0,1)通過單位矩陣E映射得到的點還是(x0,y0,1)。
3.點(x0,y0,1)通過矩陣T映射得到的點就會做如下的變換
可以看到點(x0,y0,1)經過T矩陣在x軸方向上平移了dx,在y軸方向上平移了dy。
通過以上的變換可以得到具體的思路: 我們維護一個圖像對應的矩陣mCurrentMatrix,該矩陣主要是對ImageView中的圖像的各個點進行映射。ImageView在容器位置擺放完成之后,置mCurrentMatrix矩陣為單位矩陣。當onTouchEvent()方法中觸發(fā)單點觸控并且手指進行平移的時候,調用矩陣mCurrentMatrix的postTranslate(dx,dy),對mCurrentMatrix進行變換。當手指抬起,利用變換結束后的矩陣對圖像的各個點進行映射,從而得到平移變換后的圖像。同理可得,在兩只手指進行縮放旋轉的時候,我們對矩陣mCurrentMatrix進行各種變換,當縮放旋轉的事件結束再利用變換完的矩陣去映射圖像的各個點,從而得到縮放、旋轉后的圖像。
安卓自定義View進階 - Matrix原理
安卓自定義View進階 - Matrix詳解
首先理清事件的邏輯:
初始化圖像大小和位置
縮放圖像大小和控件大小自適應,平移圖像中心和控件中心重合
onTouchEvent()函數(shù)
平移操作
將圖像對應的矩陣進行變換。
縮放操作
mBoundRectF為記錄圖像邊界的矩形??s放的時候選取圖像的中心進行縮放。
旋轉操作
旋轉的時候旋轉的旋轉中心也是圖像的中心
圖像中各個點的映射
調用ImageView的setImageMatrix(Matrix matrix)會讓ImageView根據(jù)設置的matrix去重新繪制圖像。
更新圖像的矩形邊界
獲得圖像的矩形,并根據(jù)矩陣映射矩形各個點的坐標。
縮放回彈
旋轉回彈
一些計算方法
要求圖像的變換是一個漸變的過程,很容易想到的就是屬性動畫。因為屬性動畫本身就是對值進行不斷set的過程。而我們維護的矩陣也是一個值,所以很自然可以想到,如果得到回彈之前的矩陣的值以及回彈之后矩陣的值,就可以根據(jù)動畫監(jiān)聽器中動畫當前的系數(shù)值去改變矩陣的值。
對animator對象設置完監(jiān)聽器之后,就可以在手指抬起的時候調用屬性動畫的start()方法開啟動畫。
自定義可平移、縮放、旋轉的控件主要點有兩個方面:一是onTouchEvent()中判斷平移、旋轉、縮放的觸發(fā)條件,平移位移量、縮放比例因子、旋轉角度的計算。二是Matrix矩陣的應用。
文章標題:android圖片旋轉,android圖片旋轉動畫效果
網頁鏈接:http://chinadenli.net/article28/dsdgccp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站策劃、企業(yè)建站、響應式網站、做網站、網站設計公司、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)