java类android.graphics.Region的实例源码

RegionClickView.java 文件源码 项目:Android-Code-Demos 阅读 22 收藏 0 点赞 0 评论 0
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    mCirclePath.addCircle(w / 2, h / 2, 300, Path.Direction.CW);
    Region globalRegion = new Region(-w, -h, w, h);
    mCircleRegion.setPath(mCirclePath, globalRegion);
}
ShadowParentView.java 文件源码 项目:react-native-andorid-shadow 阅读 31 收藏 0 点赞 0 评论 0
private void drawShadow(Canvas canvas) {
    if (shadowDrawable != null) {

        Rect newRect = canvas.getClipBounds();
        Log.d(TAG,"ShadowParentView has blur! " + newRect);
        newRect.inset(-shadowPadding, -shadowPadding);
        canvas.clipRect (newRect, Region.Op.REPLACE);

        shadowDrawable.draw(canvas);
    }
}
BookPageView.java 文件源码 项目:BookPage 阅读 32 收藏 0 点赞 0 评论 0
/**
 * 绘制A区域左阴影
 * @param canvas
 */
private void drawPathALeftShadow(Canvas canvas, Path pathA){
    canvas.restore();
    canvas.save();

    int left;
    int right;
    int top = (int) e.y;
    int bottom = (int) (e.y+viewHeight);

    GradientDrawable gradientDrawable;
    if (style.equals(STYLE_TOP_RIGHT)) {
        gradientDrawable = drawableLeftTopRight;
        left = (int) (e.x - lPathAShadowDis /2);
        right = (int) (e.x);
    } else {
        gradientDrawable = drawableLeftLowerRight;
        left = (int) (e.x);
        right = (int) (e.x + lPathAShadowDis /2);
    }

    Path mPath = new Path();
    mPath.moveTo(a.x- Math.max(rPathAShadowDis, lPathAShadowDis) /2,a.y);
    mPath.lineTo(d.x,d.y);
    mPath.lineTo(e.x,e.y);
    mPath.lineTo(a.x,a.y);
    mPath.close();
    canvas.clipPath(pathA);
    canvas.clipPath(mPath, Region.Op.INTERSECT);

    float mDegrees = (float) Math.toDegrees(Math.atan2(e.x-a.x, a.y-e.y));
    canvas.rotate(mDegrees, e.x, e.y);

    gradientDrawable.setBounds(left,top,right,bottom);
    gradientDrawable.draw(canvas);
}
BookPageView.java 文件源码 项目:BookPage 阅读 31 收藏 0 点赞 0 评论 0
/**
     * 绘制A区域右阴影
     * @param canvas
     */
    private void drawPathARightShadow(Canvas canvas, Path pathA){
        canvas.restore();
        canvas.save();

        float viewDiagonalLength = (float) Math.hypot(viewWidth, viewHeight);//view对角线长度
        int left = (int) h.x;
        int right = (int) (h.x + viewDiagonalLength*10);//需要足够长的长度
        int top;
        int bottom;

        GradientDrawable gradientDrawable;
        if (style.equals(STYLE_TOP_RIGHT)) {
            gradientDrawable = drawableRightTopRight;
            top = (int) (h.y- rPathAShadowDis /2);
            bottom = (int) h.y;
        } else {
            gradientDrawable = drawableRightLowerRight;
            top = (int) h.y;
            bottom = (int) (h.y+ rPathAShadowDis /2);
        }
        gradientDrawable.setBounds(left,top,right,bottom);

        Path mPath = new Path();
        mPath.moveTo(a.x- Math.max(rPathAShadowDis, lPathAShadowDis) /2,a.y);
//        mPath.lineTo(i.x,i.y);
        mPath.lineTo(h.x,h.y);
        mPath.lineTo(a.x,a.y);
        mPath.close();
        canvas.clipPath(pathA);
        canvas.clipPath(mPath, Region.Op.INTERSECT);

        float mDegrees = (float) Math.toDegrees(Math.atan2(a.y-h.y, a.x-h.x));
        canvas.rotate(mDegrees, h.x, h.y);
        gradientDrawable.draw(canvas);
    }
BookPageView.java 文件源码 项目:BookPage 阅读 33 收藏 0 点赞 0 评论 0
/**
 * 绘制B区域内容
 * @param canvas
 * @param pathA
 */
private void drawPathBContent(Canvas canvas, Path pathA){
    canvas.save();
    canvas.clipPath(pathA);//裁剪出A区域
    canvas.clipPath(getPathC(),Region.Op.UNION);//裁剪出A和C区域的全集
    canvas.clipPath(getPathB(), Region.Op.REVERSE_DIFFERENCE);//裁剪出B区域中不同于与AC区域的部分
    canvas.drawBitmap(pathBContentBitmap, 0, 0, null);

    drawPathBShadow(canvas);
    canvas.restore();
}
SectionDecoration.java 文件源码 项目:BaseVLayoutAdapterHelper 阅读 23 收藏 0 点赞 0 评论 0
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
    if (mPinnedHeaderView != null) {
        c.save();

        mClipBounds.top = 0;
        c.clipRect(mClipBounds, Region.Op.UNION);
        c.translate(0, mPinnedHeaderTop);
        mPinnedHeaderView.draw(c);

        c.restore();
    }
}
HighlightView.java 文件源码 项目:XERUNG 阅读 27 收藏 0 点赞 0 评论 0
protected void draw(Canvas canvas) {
    canvas.save();
    Path path = new Path();
    outlinePaint.setStrokeWidth(outlineWidth);
    if (!hasFocus()) {
        outlinePaint.setColor(Color.BLACK);
        canvas.drawRect(drawRect, outlinePaint);
    } else {
        Rect viewDrawingRect = new Rect();
        viewContext.getDrawingRect(viewDrawingRect);

        path.addRect(new RectF(drawRect), Path.Direction.CW);
        outlinePaint.setColor(highlightColor);

        if (isClipPathSupported(canvas)) {
            canvas.clipPath(path, Region.Op.DIFFERENCE);
            canvas.drawRect(viewDrawingRect, outsidePaint);
        } else {
            drawOutsideFallback(canvas);
        }

        canvas.restore();
        canvas.drawPath(path, outlinePaint);

        if (showThirds) {
            drawThirds(canvas);
        }

        if (showCircle) {
            drawCircle(canvas);
        }

        if (handleMode == HandleMode.Always ||
                (handleMode == HandleMode.Changing && modifyMode == ModifyMode.Grow)) {
            drawHandles(canvas);
        }
    }
}
HighlightView.java 文件源码 项目:XERUNG 阅读 25 收藏 0 点赞 0 评论 0
protected void draw(Canvas canvas) {
    canvas.save();
    Path path = new Path();
    outlinePaint.setStrokeWidth(outlineWidth);
    if (!hasFocus()) {
        outlinePaint.setColor(Color.BLACK);
        canvas.drawRect(drawRect, outlinePaint);
    } else {
        Rect viewDrawingRect = new Rect();
        viewContext.getDrawingRect(viewDrawingRect);

        path.addRect(new RectF(drawRect), Path.Direction.CW);
        outlinePaint.setColor(highlightColor);

        if (isClipPathSupported(canvas)) {
            canvas.clipPath(path, Region.Op.DIFFERENCE);
            canvas.drawRect(viewDrawingRect, outsidePaint);
        } else {
            drawOutsideFallback(canvas);
        }

        canvas.restore();
        canvas.drawPath(path, outlinePaint);

        if (showThirds) {
            drawThirds(canvas);
        }

        if (showCircle) {
            drawCircle(canvas);
        }

        if (handleMode == HandleMode.Always ||
                (handleMode == HandleMode.Changing && modifyMode == ModifyMode.Grow)) {
            drawHandles(canvas);
        }
    }
}
BubbleLayout.java 文件源码 项目:HappyBubble 阅读 24 收藏 0 点赞 0 评论 0
@Override
public boolean onTouchEvent(MotionEvent event)
{
    if (event.getAction() == MotionEvent.ACTION_DOWN)
    {
        RectF r = new RectF();
        mPath.computeBounds(r, true);
        mRegion.setPath(mPath, new Region((int) r.left, (int) r.top, (int) r.right, (int) r.bottom));
        if (!mRegion.contains((int) event.getX(), (int) event.getY()))
        {
            mListener.edge();
        }
    }
    return super.onTouchEvent(event);
}
Gauge.java 文件源码 项目:open-rmbt 阅读 34 收藏 0 点赞 0 评论 0
@Override
public void draw(final Canvas canvas)
{
    final Rect r = getBounds();

    final int saveCount = canvas.save();

    canvas.clipRect(r, Region.Op.REPLACE);
    canvas.translate(r.left, r.top);

    canvas.drawBitmap(background, 0, 0, paint);

    drawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    drawCanvas.drawBitmap(dynamic, 0, 0, null);
    final float angle;
    if (maxAngle >= 0)
        angle = -(float) (360d - (maxAngle * value));
    else
        angle = (float) (360d - (-maxAngle * value));
    drawCanvas.drawArc(ovalRect, startAngle, angle, true, erasePaint);

    canvas.drawBitmap(drawBitmap, 0, 0, paint);

    canvas.drawBitmap(foreground, 0, 0, paint);

    // canvas.drawText(formatter.format(value), textX, textY, textPaint);

    canvas.restoreToCount(saveCount);
}


问题


面经


文章

微信
公众号

扫码关注公众号