Exemplo n.º 1
0
  private void postDrawHeaderThumbnailTransitionRunnable(
      final TaskView tv,
      final int offsetX,
      final int offsetY,
      final TaskViewTransform transform,
      final ActivityOptions.OnAnimationStartedListener animStartedListener) {
    Runnable r =
        new Runnable() {
          @Override
          public void run() {
            // Disable any focused state before we draw the header
            if (tv.isFocusedTask()) {
              tv.unsetFocusedTask();
            }

            float scale = tv.getScaleX();
            int fromHeaderWidth = (int) (tv.mHeaderView.getMeasuredWidth() * scale);
            int fromHeaderHeight = (int) (tv.mHeaderView.getMeasuredHeight() * scale);

            Bitmap b =
                Bitmap.createBitmap(fromHeaderWidth, fromHeaderHeight, Bitmap.Config.ARGB_8888);
            if (Constants.DebugFlags.App.EnableTransitionThumbnailDebugMode) {
              b.eraseColor(0xFFff0000);
            } else {
              Canvas c = new Canvas(b);
              c.scale(tv.getScaleX(), tv.getScaleY());
              tv.mHeaderView.draw(c);
              c.setBitmap(null);
            }
            b = b.createAshmemBitmap();
            int[] pts = new int[2];
            tv.getLocationOnScreen(pts);
            try {
              WindowManagerGlobal.getWindowManagerService()
                  .overridePendingAppTransitionAspectScaledThumb(
                      b,
                      pts[0] + offsetX,
                      pts[1] + offsetY,
                      transform.rect.width(),
                      transform.rect.height(),
                      new IRemoteCallback.Stub() {
                        @Override
                        public void sendResult(Bundle data) throws RemoteException {
                          post(
                              new Runnable() {
                                @Override
                                public void run() {
                                  if (animStartedListener != null) {
                                    animStartedListener.onAnimationStarted();
                                  }
                                }
                              });
                        }
                      },
                      true);
            } catch (RemoteException e) {
              Log.w(TAG, "Error overriding app transition", e);
            }
          }
        };
    mCb.runAfterPause(r);
  }