List of usage examples for android.graphics Canvas save
public int save()
From source file:android.support.design.widget.CoordinatorLayout.java
@Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { final LayoutParams lp = (LayoutParams) child.getLayoutParams(); if (lp.mBehavior != null) { final float scrimAlpha = lp.mBehavior.getScrimOpacity(this, child); if (scrimAlpha > 0f) { if (mScrimPaint == null) { mScrimPaint = new Paint(); }/*from ww w. ja v a 2s . co m*/ mScrimPaint.setColor(lp.mBehavior.getScrimColor(this, child)); mScrimPaint.setAlpha(MathUtils.constrain(Math.round(255 * scrimAlpha), 0, 255)); final int saved = canvas.save(); if (child.isOpaque()) { // If the child is opaque, there is no need to draw behind it so we'll inverse // clip the canvas canvas.clipRect(child.getLeft(), child.getTop(), child.getRight(), child.getBottom(), Region.Op.DIFFERENCE); } // Now draw the rectangle for the scrim canvas.drawRect(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom(), mScrimPaint); canvas.restoreToCount(saved); } } return super.drawChild(canvas, child, drawingTime); }
From source file:com.telerik.examples.primitives.ExampleViewPagerBase.java
@Override public void draw(Canvas canvas) { super.draw(canvas); boolean needsInvalidate = false; final int overScrollMode = ViewCompat.getOverScrollMode(this); if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS || (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS && mAdapter != null && mAdapter.getCount() > 1)) { if (!mLeftEdge.isFinished()) { if (this.orientation == LinearLayout.HORIZONTAL) { final int restoreCount = canvas.save(); final int height = getHeight() - getPaddingTop() - getPaddingBottom(); final int width = getWidth(); canvas.rotate(270);// w ww. j av a2s . co m canvas.translate(-height + getPaddingTop(), mFirstOffset * width); mLeftEdge.setSize(height, width); needsInvalidate |= mLeftEdge.draw(canvas); canvas.restoreToCount(restoreCount); } else { final int restoreCount = canvas.save(); final int height = getHeight(); final int width = getWidth() - getPaddingLeft() - getPaddingRight(); canvas.translate(getPaddingLeft(), mFirstOffset * height); mLeftEdge.setSize(width, height); needsInvalidate |= mLeftEdge.draw(canvas); canvas.restoreToCount(restoreCount); } } if (!mRightEdge.isFinished()) { if (this.orientation == LinearLayout.HORIZONTAL) { final int restoreCount = canvas.save(); final int width = getWidth(); final int height = getHeight() - getPaddingTop() - getPaddingBottom(); canvas.rotate(90); canvas.translate(-getPaddingTop(), -(mLastOffset + 1) * width); mRightEdge.setSize(height, width); needsInvalidate |= mRightEdge.draw(canvas); canvas.restoreToCount(restoreCount); } else { final int restoreCount = canvas.save(); final int width = getWidth() - getPaddingLeft() - getPaddingRight(); final int height = getHeight(); canvas.rotate(180); canvas.translate(-getPaddingLeft() - width, -height); mRightEdge.setSize(width, height); needsInvalidate |= mRightEdge.draw(canvas); canvas.restoreToCount(restoreCount); } } } else { mLeftEdge.finish(); mRightEdge.finish(); } if (needsInvalidate) { // Keep animating ViewCompat.postInvalidateOnAnimation(this); } }
From source file:com.appunite.list.HorizontalListView.java
void drawOverscrollHeader(Canvas canvas, Drawable drawable, Rect bounds) { final int width = drawable.getMinimumWidth(); canvas.save(); canvas.clipRect(bounds);//from w w w .jav a2 s . c o m final int span = bounds.right - bounds.left; if (span < width) { bounds.left = bounds.right - width; } drawable.setBounds(bounds); drawable.draw(canvas); canvas.restore(); }
From source file:com.appunite.list.HorizontalListView.java
void drawOverscrollFooter(Canvas canvas, Drawable drawable, Rect bounds) { final int width = drawable.getMinimumWidth(); canvas.save(); canvas.clipRect(bounds);// w w w. j av a 2 s .com final int span = bounds.right - bounds.left; if (span < width) { bounds.right = bounds.left + width; } drawable.setBounds(bounds); drawable.draw(canvas); canvas.restore(); }
From source file:org.bangbang.support.v4.widget.HListView.java
/** * Draws a divider for the given child in the given bounds. *//from ww w . j a va2s .c o m * @param canvas The canvas to draw to. * @param bounds The bounds of the divider. * @param childIndex The index of child (of the View) above the divider. * This will be -1 if there is no child above the divider to be * drawn. */ void drawDivider(Canvas canvas, Rect bounds, int childIndex) { // This widget draws the same divider for all children final Drawable divider = mDivider; final boolean clipDivider = mClipDivider; if (!clipDivider) { divider.setBounds(bounds); } else { canvas.save(); canvas.clipRect(bounds); } divider.draw(canvas); if (clipDivider) { canvas.restore(); } }
From source file:com.appunite.list.ListView.java
void drawOverscrollHeader(Canvas canvas, Drawable drawable, Rect bounds) { final int height = drawable.getMinimumHeight(); canvas.save(); canvas.clipRect(bounds);/*from w w w . j a va 2 s . co m*/ final int span = bounds.bottom - bounds.top; if (span < height) { bounds.top = bounds.bottom - height; } drawable.setBounds(bounds); drawable.draw(canvas); canvas.restore(); }
From source file:com.appunite.list.ListView.java
void drawOverscrollFooter(Canvas canvas, Drawable drawable, Rect bounds) { final int height = drawable.getMinimumHeight(); canvas.save(); canvas.clipRect(bounds);//from w ww . ja v a 2 s .c o m final int span = bounds.bottom - bounds.top; if (span < height) { bounds.bottom = bounds.top + height; } drawable.setBounds(bounds); drawable.draw(canvas); canvas.restore(); }
From source file:cn.androidy.materialdesignsample.ryanharterviewpager.ViewPager.java
@Override public void draw(Canvas canvas) { super.draw(canvas); boolean needsInvalidate = false; final int overScrollMode = ViewCompat.getOverScrollMode(this); if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS || (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS && mAdapter != null && mAdapter.getCount() > 1)) { if (!mLeftEdge.isFinished()) { final int restoreCount = canvas.save(); final int width = isOrientationHorizontal() ? getHeight() - getPaddingTop() - getPaddingBottom() : getWidth() - getPaddingLeft() - getPaddingRight(); final int height = isOrientationHorizontal() ? getWidth() - getPaddingLeft() - getPaddingRight() : getHeight() - getPaddingTop() - getPaddingBottom(); if (isOrientationHorizontal()) { canvas.rotate(270);/*from w w w . j a v a 2 s . c om*/ canvas.translate(-width + getPaddingTop(), mFirstOffset * height); } mLeftEdge.setSize(width, height); needsInvalidate |= mLeftEdge.draw(canvas); canvas.restoreToCount(restoreCount); } if (!mRightEdge.isFinished()) { final int restoreCount = canvas.save(); final int width = isOrientationHorizontal() ? getHeight() - getPaddingTop() - getPaddingBottom() : getWidth() - getPaddingLeft() - getPaddingRight(); final int height = isOrientationHorizontal() ? getWidth() - getPaddingLeft() - getPaddingRight() : getHeight() - getPaddingTop() - getPaddingBottom(); if (isOrientationHorizontal()) { canvas.rotate(90); canvas.translate(-getPaddingTop(), -(mLastOffset + 1) * height); } else { canvas.rotate(180); canvas.translate(-width, -(mLastOffset + 1) * height); } mRightEdge.setSize(width, height); needsInvalidate |= mRightEdge.draw(canvas); canvas.restoreToCount(restoreCount); } } else { mLeftEdge.finish(); mRightEdge.finish(); } if (needsInvalidate) { // Keep animating ViewCompat.postInvalidateOnAnimation(this); } }
From source file:gl.android.widget.viewpager.ViewPagerEx.java
@Override public void draw(Canvas canvas) { try {/*from www .j a v a2 s.c o m*/ super.draw(canvas); } catch (Exception e) { // System.out.println(e.getMessage()); //FIXME the nullpoint Exception at super.Draw(canvas) in viewPager; if (mFirstLayout) { Log.e("ViewPagerEx", "line 2305,.draw(Canvas canvas) NullPointException"); } } boolean needsInvalidate = false; final int overScrollMode = ViewCompat.getOverScrollMode(this); if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS || (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS && mAdapter != null && mAdapter.getCount() > 1)) { if (!mLeftEdge.isFinished()) { final int restoreCount = canvas.save(); final int height = getHeight() - getPaddingTop() - getPaddingBottom(); final int width = getWidth(); canvas.rotate(270); canvas.translate(-height + getPaddingTop(), mFirstOffset * width); mLeftEdge.setSize(height, width); needsInvalidate |= mLeftEdge.draw(canvas); canvas.restoreToCount(restoreCount); } if (!mRightEdge.isFinished()) { final int restoreCount = canvas.save(); final int width = getWidth(); final int height = getHeight() - getPaddingTop() - getPaddingBottom(); canvas.rotate(90); canvas.translate(-getPaddingTop(), -(mLastOffset + 1) * width); mRightEdge.setSize(height, width); needsInvalidate |= mRightEdge.draw(canvas); canvas.restoreToCount(restoreCount); } } else { mLeftEdge.finish(); mRightEdge.finish(); } if (needsInvalidate) { // Keep animating ViewCompat.postInvalidateOnAnimation(this); } }
From source file:com.klinker.android.launcher.launcher3.Workspace.java
/** * Draw the View v into the given Canvas. * * @param v the view to draw// ww w. ja v a 2 s. c om * @param destCanvas the canvas to draw on * @param padding the horizontal and vertical padding to use when drawing */ private static void drawDragView(View v, Canvas destCanvas, int padding) { final Rect clipRect = sTempRect; v.getDrawingRect(clipRect); boolean textVisible = false; destCanvas.save(); if (v instanceof TextView) { Drawable d = getTextViewIcon((TextView) v); Rect bounds = getDrawableBounds(d); clipRect.set(0, 0, bounds.width() + padding, bounds.height() + padding); destCanvas.translate(padding / 2 - bounds.left, padding / 2 - bounds.top); d.draw(destCanvas); } else { if (v instanceof FolderIcon) { // For FolderIcons the text can bleed into the icon area, and so we need to // hide the text completely (which can't be achieved by clipping). if (((FolderIcon) v).getTextVisible()) { ((FolderIcon) v).setTextVisible(false); textVisible = true; } } destCanvas.translate(-v.getScrollX() + padding / 2, -v.getScrollY() + padding / 2); destCanvas.clipRect(clipRect, Op.REPLACE); v.draw(destCanvas); // Restore text visibility of FolderIcon if necessary if (textVisible) { ((FolderIcon) v).setTextVisible(true); } } destCanvas.restore(); }