公告
财富商城
积分规则
提问
发文
2019-01-18 15:55发布
Anthone
The animation should do the following:
The idea is fairly simple:
In order to get a bitmap of the Activity:
View root = currActivity.getWindow().getDecorView().findViewById(android.R.id.content); root.setDrawingCacheEnabled(true); Bitmap bmp = root.getDrawingCache();
In order to split the bitmap:
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; }
After we created the bitmaps, Apply Animation
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; }
Above code is just for reference purpose. You can find full demo from below link.
Ref Link: ActivitySplitAnimation
最多设置5个标签!
The idea is fairly simple:
In order to get a bitmap of the Activity:
In order to split the bitmap:
After we created the bitmaps, Apply Animation
Above code is just for reference purpose. You can find full demo from below link.
Ref Link: ActivitySplitAnimation