2
A
回答
9
的想法很簡單:
- 保存活動爲您提供爲位圖
- 分割位分爲兩個部分
- 動畫位圖向外(上下)
爲了讓活動的位圖:
View root = currActivity.getWindow().getDecorView().findViewById(android.R.id.content);
root.setDrawingCacheEnabled(true);
Bitmap bmp = root.getDrawingCache();
爲了分割位:
int splitYCoord = (splitYCoord != -1 ? splitYCoord : bmp.getHeight()/2);
if (splitYCoord > bmp.getHeight())
throw new IllegalArgumentException("Split Y coordinate [" + splitYCoord + "] exceeds the activity's height [" + bmp.getHeight() + "]");
Bitmap mBmp1 = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), splitYCoord);
Bitmap mBmp2 = Bitmap.createBitmap(bmp, 0, splitYCoord, bmp.getWidth(), bmp.getHeight() - splitYCoord);
private static int[] mLoc1;
private static int[] mLoc2;
mLoc1 = new int[]{0, root.getTop()};
mLoc2 = new int[]{0, root.getTop() + splitYCoord};
private static ImageView mTopImage;
private static ImageView mBottomImage;
mTopImage = createImageView(destActivity, mBmp1, mLoc1);
mBottomImage = createImageView(destActivity, mBmp2, mLoc2);
private static ImageView createImageView(Activity destActivity, Bitmap bmp, int loc[]) {
ImageView imageView = new ImageView(destActivity);
imageView.setImageBitmap(bmp);
WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.TOP;
windowParams.x = loc[0];
windowParams.y = loc[1];
windowParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
windowParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
windowParams.flags =
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;
destActivity.getWindowManager().addView(imageView, windowParams);
return imageView;
}
我們創建位圖後,動畫應用
AnimatorSet mSetAnim = new AnimatorSet();
mTopImage.setLayerType(View.LAYER_TYPE_HARDWARE, null);
mBottomImage.setLayerType(View.LAYER_TYPE_HARDWARE, null);
mSetAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
clean(destActivity);
}
@Override
public void onAnimationCancel(Animator animation) {
clean(destActivity);
}
...
});
Animator anim1 = ObjectAnimator.ofFloat(mTopImage, "translationY", mTopImage.getHeight() * -1);
Animator anim2 = ObjectAnimator.ofFloat(mBottomImage, "translationY", mBottomImage.getHeight());
mSetAnim.setDuration(duration);
mSetAnim.playTogether(anim1, anim2);
mSetAnim.start();
private void clean(Activity activity) {
if (mTopImage != null) {
mTopImage.setLayerType(View.LAYER_TYPE_NONE, null);
try {
activity.getWindowManager().removeViewImmediate(mBottomImage);
} catch (Exception ignored) {}
}
if (mBottomImage != null) {
mBottomImage.setLayerType(View.LAYER_TYPE_NONE, null);
try {
activity.getWindowManager().removeViewImmediate(mTopImage);
} catch (Exception ignored) {}
}
mBmp1 = null;
mBmp2 = null;
}
上面的代碼只是爲參考目的。你可以從下面的鏈接找到完整的演示。
相關問題
- 1. UIView垂直翻轉動畫
- 2. 圓形菜單與動畫/轉換的垂直切換
- 3. 動畫垂直ViewPager
- 4. UIView的垂直翻轉動畫
- 5. ScrollViewer垂直偏移動畫
- 6. css3/jquery動畫/轉換/:如何使圖像垂直向後移動?
- 7. Viewpager Transform動畫爲垂直滑動
- 8. 動畫:水平和垂直移動ImageButton
- 9. 在畫布中垂直旋轉圖像
- 10. iOS上的垂直滾動動畫'跳轉'
- 11. Android:垂直畫廊?
- 12. 垂直居中全屏div滾動條
- 13. Android - 使畫廊垂直滾動
- 14. jQuery垂直動畫欄教程
- 15. Android動畫垂直圖像視圖
- 16. jQuery:動畫到垂直位置
- 17. J2ME畫布上的垂直滾動條
- 18. iPhone垂直視圖控制器動畫
- 19. iPhone dev:UIWebview在轉動設備時轉換垂直位置
- 20. jQuery slideDown函數垂直跳轉動畫結束
- 21. 如何反轉此CSS3垂直下拉動畫?
- 22. 轉換垂直參考水平參考
- 23. 轉換垂直列表陣列
- 24. 轉換水平臺垂直在Oracle
- 25. 如何垂直/向上轉換?
- 26. 轉換下拉菜單到垂直
- 27. 將水平表轉換爲垂直Postgres
- 28. 垂直畫廊在Android
- 29. 畫一條垂直線
- 30. 畫布垂直指向線
+1哇!太棒了!非常感謝! :)我現在就試試! – Roylee 2013-04-20 04:31:37
那麼它支持API 8? – Roylee 2013-04-20 07:08:11
@Roylee實際上,我們需要編寫我們自己的代碼,以便在代碼中使用上層android api。 – 2013-04-20 09:11:09