コード例 #1
0
  public static Bitmap capture(
      View view, float width, float height, boolean scroll, Bitmap.Config config) {
    if (!view.isDrawingCacheEnabled()) view.setDrawingCacheEnabled(true);

    Bitmap bitmap = Bitmap.createBitmap((int) width, (int) height, config);
    bitmap.eraseColor(Color.WHITE);

    Canvas canvas = new Canvas(bitmap);
    int left = view.getLeft();
    int top = view.getTop();
    if (scroll) {
      left = view.getScrollX();
      top = view.getScrollY();
    }
    int status = canvas.save();
    canvas.translate(-left, -top);

    float scale = width / view.getWidth();
    canvas.scale(scale, scale, left, top);

    view.draw(canvas);
    canvas.restoreToCount(status);

    Paint alphaPaint = new Paint();
    alphaPaint.setColor(Color.TRANSPARENT);

    canvas.drawRect(0f, 0f, 1f, height, alphaPaint);
    canvas.drawRect(width - 1f, 0f, width, height, alphaPaint);
    canvas.drawRect(0f, 0f, width, 1f, alphaPaint);
    canvas.drawRect(0f, height - 1f, width, height, alphaPaint);
    canvas.setBitmap(null);

    return bitmap;
  }
コード例 #2
0
ファイル: SlidingPaneLayout.java プロジェクト: zezadas/camera
 /*
  * Enabled aggressive block sorting
  */
 @Override
 protected boolean drawChild(Canvas canvas, View view, long l) {
     boolean bl;
     LayoutParams layoutParams = (LayoutParams)view.getLayoutParams();
     int n = canvas.save(2);
     if (this.mCanSlide && !layoutParams.slideable && this.mSlideableView != null) {
         canvas.getClipBounds(this.mTmpRect);
         if (this.isLayoutRtlSupport()) {
             this.mTmpRect.left = Math.max(this.mTmpRect.left, this.mSlideableView.getRight());
         } else {
             this.mTmpRect.right = Math.min(this.mTmpRect.right, this.mSlideableView.getLeft());
         }
         canvas.clipRect(this.mTmpRect);
     }
     if (Build.VERSION.SDK_INT >= 11) {
         bl = super.drawChild(canvas, view, l);
     } else if (layoutParams.dimWhenOffset && this.mSlideOffset > 0.0f) {
         Bitmap bitmap;
         if (!view.isDrawingCacheEnabled()) {
             view.setDrawingCacheEnabled(true);
         }
         if ((bitmap = view.getDrawingCache()) != null) {
             canvas.drawBitmap(bitmap, view.getLeft(), view.getTop(), layoutParams.dimPaint);
             bl = false;
         } else {
             Log.e("SlidingPaneLayout", "drawChild: child view " + view + " returned null drawing cache");
             bl = super.drawChild(canvas, view, l);
         }
     } else {
         if (view.isDrawingCacheEnabled()) {
             view.setDrawingCacheEnabled(false);
         }
         bl = super.drawChild(canvas, view, l);
     }
     canvas.restoreToCount(n);
     return bl;
 }
コード例 #3
0
  @Override
  public boolean onLongClick(View view) {
    if (((BrickAdapter) getAdapter()).getActionMode() != BrickAdapter.ActionModeEnum.NO_ACTION) {
      return true;
    }

    ((BrickAdapter) getAdapter()).isDragging = true;
    ((BrickAdapter) getAdapter()).setSpinnersEnabled(false);

    int itemPosition = calculateItemPositionAndTouchPointY(view);
    boolean drawingCacheEnabled = view.isDrawingCacheEnabled();

    view.setDrawingCacheEnabled(true);
    view.measure(
        MeasureSpec.makeMeasureSpec(ScreenValues.SCREEN_WIDTH, MeasureSpec.EXACTLY),
        MeasureSpec.makeMeasureSpec(
            Utils.getPhysicalPixels(WIDTH_OF_BRICK_PREVIEW_IMAGE, getContext()),
            MeasureSpec.AT_MOST));
    view.layout(0, 0, ScreenValues.SCREEN_WIDTH, view.getMeasuredHeight());
    view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);

    view.buildDrawingCache(true);

    Bitmap bitmap;
    if (view.getDrawingCache() == null) {
      view.setDrawingCacheEnabled(drawingCacheEnabled);
      bitmap = getBitmapFromView(view, getMeasuredWidth(), view.getHeight());
    } else {
      bitmap = Bitmap.createBitmap(view.getDrawingCache());
    }

    view.setDrawingCacheEnabled(drawingCacheEnabled);

    startDragging(bitmap, touchPointY);

    if (!dragNewBrick) {
      setDragViewAnimation(0);
      dragNewBrick = false;
    }

    dragAndDropListener.drag(itemPosition, itemPosition);
    dimBackground = true;

    previousItemPosition = itemPosition;

    return true;
  }
コード例 #4
0
  /**
   * 功能简述:创建一张当前的view的bitmap截图 功能详细描述:根据指定的缩放比例,对当前view进行截图,并返回截图bitmap 注意:
   *
   * @param view:待画的view
   * @param scale:缩放比例
   * @return:view的截图,若当前view为null或宽高<=0,则返回null。
   */
  public static final Bitmap createBitmap(View view, float scale) {
    Bitmap pRet = null;
    if (null == view) {
      Log.i(TAG, "create bitmap function param view is null");
      return pRet;
    }

    int scaleWidth = (int) (view.getWidth() * scale);
    int scaleHeight = (int) (view.getHeight() * scale);
    if (scaleWidth <= 0 || scaleHeight <= 0) {
      Log.i(TAG, "create bitmap function param view is not layout");
      return pRet;
    }

    boolean bViewDrawingCacheEnable = view.isDrawingCacheEnabled();
    if (!bViewDrawingCacheEnable) {
      view.setDrawingCacheEnabled(true);
    }
    try {
      Bitmap viewBmp = view.getDrawingCache(true);
      // 如果拿到的缓存为空
      if (viewBmp == null) {
        pRet =
            Bitmap.createBitmap(
                scaleWidth, scaleHeight, view.isOpaque() ? Config.RGB_565 : Config.ARGB_8888);
        Canvas canvas = new Canvas(pRet);
        canvas.scale(scale, scale);
        view.draw(canvas);
        canvas = null;
      } else {
        pRet = Bitmap.createScaledBitmap(viewBmp, scaleWidth, scaleHeight, true);
      }
      viewBmp = null;
    } catch (OutOfMemoryError e) {
      pRet = null;
      Log.i(TAG, "create bitmap out of memory");
    } catch (Exception e) {
      pRet = null;
      Log.i(TAG, "create bitmap exception");
    }
    if (!bViewDrawingCacheEnable) {
      view.setDrawingCacheEnabled(false);
    }

    return pRet;
  }
コード例 #5
0
  @Override
  public void onClick(final View view) {
    if (!viewSwitchLock.tryLock()) {
      return;
    }

    animatedBricks.clear();
    final int itemPosition = calculateItemPositionAndTouchPointY(view);
    final List<CharSequence> items = new ArrayList<CharSequence>();

    if (brickList.get(itemPosition) instanceof ScriptBrick) {
      int scriptIndex = getScriptIndexFromProject(itemPosition);
      ProjectManager.getInstance().setCurrentScript(sprite.getScript(scriptIndex));
    }

    if (!(brickList.get(itemPosition) instanceof DeadEndBrick)
        && !(brickList.get(itemPosition) instanceof ScriptBrick)) {
      items.add(context.getText(R.string.brick_context_dialog_move_brick));
    }
    if ((brickList.get(itemPosition) instanceof UserBrick)) {
      items.add(context.getText(R.string.brick_context_dialog_show_source));
    }
    if (brickList.get(itemPosition) instanceof NestingBrick) {
      items.add(context.getText(R.string.brick_context_dialog_animate_bricks));
    }
    if (!(brickList.get(itemPosition) instanceof ScriptBrick)) {
      items.add(context.getText(R.string.brick_context_dialog_copy_brick));
      items.add(context.getText(R.string.brick_context_dialog_delete_brick));
    } else {
      items.add(context.getText(R.string.brick_context_dialog_delete_script));
    }
    if (brickHasAFormula(brickList.get(itemPosition))) {
      items.add(context.getText(R.string.brick_context_dialog_formula_edit_brick));
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    boolean drawingCacheEnabled = view.isDrawingCacheEnabled();
    view.setDrawingCacheEnabled(true);
    view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);
    view.buildDrawingCache(true);

    if (view.getDrawingCache() != null) {
      Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
      view.setDrawingCacheEnabled(drawingCacheEnabled);

      ImageView imageView = dragAndDropListView.getGlowingBorder(bitmap);
      builder.setCustomTitle(imageView);
    }

    builder.setItems(
        items.toArray(new CharSequence[items.size()]),
        new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int item) {
            CharSequence clickedItemText = items.get(item);
            if (clickedItemText.equals(context.getText(R.string.brick_context_dialog_move_brick))) {
              view.performLongClick();
            } else if (clickedItemText.equals(
                context.getText(R.string.brick_context_dialog_show_source))) {
              launchAddBrickAndSelectBrickAt(context, itemPosition);
            } else if (clickedItemText.equals(
                context.getText(R.string.brick_context_dialog_copy_brick))) {
              copyBrickListAndProject(itemPosition);
            } else if (clickedItemText.equals(
                    context.getText(R.string.brick_context_dialog_delete_brick))
                || clickedItemText.equals(
                    context.getText(R.string.brick_context_dialog_delete_script))) {
              showConfirmDeleteDialog(itemPosition);
            } else if (clickedItemText.equals(
                context.getText(R.string.brick_context_dialog_animate_bricks))) {
              int itemPosition = calculateItemPositionAndTouchPointY(view);
              Brick brick = brickList.get(itemPosition);
              if (brick instanceof NestingBrick) {
                List<NestingBrick> list = ((NestingBrick) brick).getAllNestingBrickParts(true);
                for (NestingBrick tempBrick : list) {
                  animatedBricks.add((Brick) tempBrick);
                }
              }
              notifyDataSetChanged();
            } else if (clickedItemText.equals(
                context.getText(R.string.brick_context_dialog_formula_edit_brick))) {
              clickedEditFormula(brickList.get(itemPosition), view);
            }
          }
        });
    alertDialog = builder.create();

    if ((selectMode == ListView.CHOICE_MODE_NONE)) {
      alertDialog.show();
    }
  }