Android 中的轉場動畫及相容處理
Android 中的動畫有很多,除了在一個介面上使用幀動畫、屬性動畫將一個或多個 View 進行動畫處理以外,還可以用於兩個介面之間過渡、跳轉。在 Android 5.0 之前,我們已經有了 overridePendingTransition() 方法來實現一些轉場效果。然而,在 Android 5.0 以後,轉場效果更加炫酷。 比如下面的動畫:
本篇文章,主要就是解說如何實現上述的效果。主要內容包括:
Android 5.0+ 的轉場動畫
Android 4.X 模擬實現 Android 5.0+ 轉場效果。
來檢視。private void initial() { // 獲取上一個介面傳入的資訊
mRect = getIntent().getSourceBounds();
mRescourceId = getIntent().getExtras().getInt(EXTRA_IMAGE); // 獲取上一個介面中,圖片的寬度和高度
mOriginWidth = mRect.right - mRect.left;
mOriginHeight = mRect.bottom - mRect.top; // 設定 ImageView 的位置,使其和上一個介面中圖片的位置重合
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(mOriginWidth, mOriginHeight);
params.setMargins(mRect.left, mRect.top - getStatusBarHeight(), mRect.right, mRect.bottom);
mImageView.setLayoutParams(params); // 設定 ImageView 的圖片和縮放型別
mImageView.setImageResource(mRescourceId);
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // 根據上一個介面傳入的圖片資源 ID,獲取圖片的 Bitmap 物件。
BitmapDrawable bitmapDrawable = (BitmapDrawable) getResources().getDrawable(mRescourceId);
Bitmap bitmap = bitmapDrawable.getBitmap(); // 計算圖片縮放比例和位移距離
getBundleInfo(bitmap); // 建立一個 Pallette 物件
mImagePalette = Palette.from(bitmap).generate(); // 使用 Palette 設定背景顏色
mContainer.setBackgroundColor(
mImagePalette.getVibrantColor(ContextCompat.getColor(this, android.R.color.black)));
}
在12行,透過設定 Margin 的形式來確定圖片的位置,需要注意的是,由於狀態列是在父控制元件 FramLayout 之外的,因此我們要將 Rect.top 的值減去狀態列的高度,這樣才是相對於螢幕的絕對位置。然後,getBundleInfo() 方法的程式碼如下:
private void getBundleInfo(Bitmap bitmap) { // 計算圖片縮放比例,並儲存在 bundle 中 if (bitmap.getWidth() >= bitmap.getHeight()) { mScaleBundle.putFloat(SCALE_WIDTH, (float) mScreenWidth / mOriginWidth); mScaleBundle.putFloat(SCALE_HEIGHT, (float) bitmap.getHeight() / mOriginHeight); } else { mScaleBundle.putFloat(SCALE_WIDTH, (float) bitmap.getWidth() / mOriginWidth); mScaleBundle.putFloat(SCALE_HEIGHT, (float) mScreenHeight / mOriginHeight); } // 計算位移距離,並將資料儲存到 bundle 中 mTransitionBundle.putFloat(TRANSITION_X, mScreenWidth / 2 - (mRect.left + (mRect.right - mRect.left) / 2)); mTransitionBundle.putFloat(TRANSITION_Y, mScreenHeight / 2 - (mRect.top + (mRect.bottom - mRect.top) / 2)); }
http://www.apkbus.com/blog-856294-76889.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4686/viewspace-2812654/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 轉場動畫Android動畫
- Android轉場動畫一說Android動畫
- Android Reveal圓形Activity轉場動畫Android動畫
- Android5.0Activity的轉場動畫和共享元素Android動畫
- 高逼格Android轉場動畫,輕鬆實現掘金使用者頭像轉場動畫Android動畫
- 影象中的畫素處理
- 人形動畫常見IK的處理動畫
- 資料處理及跳轉
- [Android P] Android P版本 新功能介紹和相容性處理(一)Android
- Flutter 手勢處理 & Hero 動畫Flutter動畫
- Android事件傳遞、多點觸控及滑動衝突的處理Android事件
- TransitionAnimation自定義轉場動畫NaN動畫
- SpringMVC:資料處理及跳轉SpringMVC
- 使用Avro處理不相容的架構變動 - ElliotVR架構
- [轉] Scala 中的非同步事件處理非同步事件
- 直播電商原始碼,android設定輪播圖轉場動畫特效原始碼Android動畫特效
- 自定義事件相容處理物件事件物件
- 鴻蒙HarmonyOS實戰-ArkUI動畫(頁面轉場動畫)鴻蒙UI動畫
- 鴻蒙HarmonyO實戰-ArkUI動畫(元件內轉場動畫)鴻蒙UI動畫元件
- 超酷炫的轉場動畫?CSS 輕鬆拿下!動畫CSS
- Android動畫Android動畫
- android 動畫Android動畫
- Android中的非同步訊息處理機制Android非同步
- [譯] React Native 中使用轉場動畫!React Native動畫
- flutter中的路由過場動畫 PageTransitionsThemeFlutter路由動畫
- 如何在 duxapp 中開發一個相容 RN 的動畫庫UXAPP動畫
- Android SeekBar 自定義thumb,thumb旋轉動畫效果Android動畫
- Android 動畫之屬性動畫Android動畫
- webgl 影像處理2---影像畫素處理Web
- 系統學習iOS動畫之四:檢視控制器的轉場動畫iOS動畫
- Android 動畫初探Android動畫
- Android之動畫Android動畫
- 遊戲場景渲染中的PostProcessing(後處理)遊戲
- Android動畫:行雲流水的向量圖示動畫Android動畫
- 影像行畫素處理
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- 企業級應用場景中,LLM 的資料特性剖析及處理對策
- 【Android 動畫】動畫詳解之補間動畫(一)Android動畫