android.graphics.Canvas#drawRoundRect ( )源码实例Demo

下面列出了android.graphics.Canvas#drawRoundRect ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: IOS11RectProgress   文件: RectProgress.java
@Override
    protected void onDraw(Canvas canvas) {
        int canvasWidth = canvas.getWidth();
        int canvasHeight = canvas.getHeight();
        int layerId = canvas.saveLayer(0, 0, canvasWidth, canvasHeight, null, Canvas.ALL_SAVE_FLAG);
        {
            bgPaint.setColor(bgColor);
            // draw the background of progress
            canvas.drawRoundRect(bgRect, rectRadius, rectRadius, bgPaint);
            // draw progress
            canvas.drawRect(progressRect, progressPaint);
            bgPaint.setXfermode(null);
            if (bitmap != null) {
                //draw icon
                canvas.drawBitmap(bitmap, srcRect, dstRect, bgPaint);
            }
        }
        canvas.restoreToCount(layerId);
        // TODO: 弄明白为什么在xml预览中,canvas.restoreToCount
        // TODO: 会导致后续的canvas对象为空 但canvas.restore方法则不会导致这个问题
//        canvas.restore();
//        canvas.save();

    }
 
源代码2 项目: ENViews   文件: ENScrollView.java
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.save();
    canvas.translate(mFraction * mViewTranslationX, 0);
    canvas.drawRoundRect(mRectF, mCircleRadius, mCircleRadius, mBgPaint);   //嗷~ 在这画背景线
    mDstPath.reset();
    mPathMeasure.getSegment(0 ,mPathLength / 2 * mFraction, mDstPath, true);
    canvas.drawPath(mDstPath, mPaint);  //嗷~ 在这画上半圈
    mDstPath.reset();
    mPathMeasure.getSegment(mPathLength - mPathLength / 2 * mFraction ,mPathLength, mDstPath, true);
    canvas.drawPath(mDstPath, mPaint);  //嗷~ 在这画下半圈
    mColorPaint.setColor(mCurrentColor);
    if (mFraction <= 0.8 && mFraction > 0.2) {  //嗷~ 在这画球
        canvas.drawCircle(mCenterX - mCircleRadius + 2 * mCircleRadius * mFraction , mCenterY , mCircleRadius / 6 / 0.6f * (mFraction - 0.2f) , mColorPaint);
    } else if (mFraction > 0.8) {
        canvas.drawCircle(mCenterX - mCircleRadius + 2 * mCircleRadius * mFraction , mCenterY , mCircleRadius / 6 , mColorPaint);
    }
    canvas.restore();
}
 
源代码3 项目: DMusic   文件: ToggleButton.java
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    float rectRadius = mHeight / 2f;
    mRect.set(0, 0, mWidth, mHeight);
    mRectF.set(mRect);
    canvas.drawRoundRect(mRectF, rectRadius, rectRadius, mIsOpen ? mPaintTrack : mPaintPadding);

    mRect.set((int) mPadding, (int) mPadding, (int) (mWidth - mPadding), (int) (mHeight - mPadding));
    mRectF.set(mRect);
    canvas.drawRoundRect(mRectF, rectRadius, rectRadius, mPaintTrack);

    float c0 = mHeight / 2;
    float c1 = mWidth - mHeight / 2;
    float start = !mIsOpen ? c1 : c0;
    float end = mIsOpen ? c1 : c0;
    float offsetX = start + (end - start) * mFactor; // 通过属性动画因子,计算此瞬间圆心的横坐标

    canvas.drawCircle(offsetX, mHeight / 2, mHeight / 2 - mPadding, mPaintShader);
}
 
源代码4 项目: YCCustomText   文件: ColorPickerView.java
private void createColorTableBitmap() {

        Canvas c = new Canvas(bitmapForColor);
        RectF rf = new RectF(0, 0, bitmapForColor.getWidth(), bitmapForColor.getHeight());

        // 圆角大小
        int r;
        if (orientation == Orientation.HORIZONTAL) {
            r = bitmapForColor.getHeight() / 2;
        } else {
            r = bitmapForColor.getWidth() / 2;
        }
        // 先绘制黑色背景,否则有 alpha 时绘制不正常
        paint.setColor(Color.BLACK);
        c.drawRoundRect(rf, r, r, paint);

        paint.setShader(linearGradient);
        c.drawRoundRect(rf, r, r, paint);
        paint.setShader(null);

        needReDrawColorTable = false;
    }
 
源代码5 项目: InteractiveChart   文件: GridTextMarker.java
@Override public void onMarkerViewDraw(Canvas canvas, String[] markerText) {
  canvas.drawRoundRect(markerInsets, attribute.markerBorderRadius, attribute.markerBorderRadius,
      markerBorderPaint);

  canvas.drawText(markerText[1],
      markerInsets.left + markerInsets.width() / 2,
      markerInsets.top + (markerInsets.height() + textRect.height()) / 2,
      markerTextPaint);
}
 
@Override
public void onDecorateBitmap(final Canvas pCanvas, final Paint pPaint, final TextureAtlasSourceDecoratorOptions pDecoratorOptions) {
	final float left = pDecoratorOptions.getInsetLeft();
	final float top = pDecoratorOptions.getInsetTop();
	final float right = pCanvas.getWidth() - pDecoratorOptions.getInsetRight();
	final float bottom = pCanvas.getHeight() - pDecoratorOptions.getInsetBottom();

	this.mRectF.set(left, top, right, bottom);

	pCanvas.drawRoundRect(this.mRectF, this.mCornerRadiusX, this.mCornerRadiusY, pPaint);
}
 
源代码7 项目: AcgClub   文件: RoundedCornersTransformation.java
private void drawDiagonalFromTopRightRoundRect(Canvas canvas, Paint paint, float right,
    float bottom) {
  canvas.drawRoundRect(new RectF(right - diameter, margin, right, margin + diameter), radius,
      radius, paint);
  canvas.drawRoundRect(new RectF(margin, bottom - diameter, margin + diameter, bottom),
      radius, radius, paint);
  canvas.drawRect(new RectF(margin, margin, right - radius, bottom - radius), paint);
  canvas.drawRect(new RectF(margin + radius, margin + radius, right, bottom), paint);
}
 
源代码8 项目: ButtonProgressBar   文件: ButtonProgressBar.java
/**
 * Draw mProgress on view based on mLoaderType.
 * @param canvas - view canvas object
 */
public void onDrawProgress(Canvas canvas) {
    RectF bgRectf = new RectF(topX, topY, canvas.getWidth(), canvas.getHeight());
    canvas.drawRoundRect(bgRectf, mCornerRadius, mCornerRadius, mBackgroundPaint);
    float progressPoint = (((float) canvas.getWidth()/ MAX) * mProgress);
    RectF progRect = new RectF(topX, topY, progressPoint, canvas.getHeight());
    canvas.drawRoundRect(progRect, mCornerRadius, mCornerRadius, mProgressPaint);
}
 
源代码9 项目: AcgClub   文件: RoundedCornersTransformation.java
private void drawOtherTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
  canvas.drawRoundRect(new RectF(margin, margin, margin + diameter, bottom), radius, radius,
      paint);
  canvas.drawRoundRect(new RectF(margin, bottom - diameter, right, bottom), radius, radius,
      paint);
  canvas.drawRect(new RectF(margin + radius, margin, right, bottom - radius), paint);
}
 
源代码10 项目: FilePicker   文件: MaterialCheckbox.java
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (isChecked()) {
        paint.reset();
        paint.setAntiAlias(true);
        bounds.set(minDim / 10, minDim / 10, minDim - (minDim / 10), minDim - (minDim / 10));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            paint.setColor(getResources().getColor(R.color.colorAccent, context.getTheme()));
        } else {
            paint.setColor(getResources().getColor(R.color.colorAccent));
        }
        canvas.drawRoundRect(bounds, minDim / 8, minDim / 8, paint);

        paint.setColor(Color.parseColor("#FFFFFF"));
        paint.setStrokeWidth(minDim / 10);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.BEVEL);
        canvas.drawPath(tick, paint);
    } else {
        paint.reset();
        paint.setAntiAlias(true);
        bounds.set(minDim / 10, minDim / 10, minDim - (minDim / 10), minDim - (minDim / 10));
        paint.setColor(Color.parseColor("#C1C1C1"));
        canvas.drawRoundRect(bounds, minDim / 8, minDim / 8, paint);

        bounds.set(minDim / 5, minDim / 5, minDim - (minDim / 5), minDim - (minDim / 5));
        paint.setColor(Color.parseColor("#FFFFFF"));
        canvas.drawRect(bounds, paint);
    }
}
 
源代码11 项目: FrostyBackgroundTestApp   文件: ImageHelper.java
public static Bitmap getRoundedCornerAndLightenBitmap(Bitmap bitmap, int cornerRadiusInPixels, boolean captureCircle) {
    Bitmap output = Bitmap.createBitmap(
            bitmap.getWidth(),
            bitmap.getHeight(),
            Bitmap.Config.ARGB_4444);
    Canvas canvas = new Canvas(output);

    final int color = 0xffffffff;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0,
            0,
            bitmap.getWidth(),
            bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = cornerRadiusInPixels;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    if (captureCircle) {
        canvas.drawCircle(rectF.centerX(),
                rectF.centerY(),
                bitmap.getWidth() / 2,
                paint);
    } else {
        canvas.drawRoundRect(rectF,
                roundPx,
                roundPx,
                paint);
    }

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    ColorFilter filter = new LightingColorFilter(0xFFFFFFFF, 0x00222222); // lighten
    //ColorFilter filter = new LightingColorFilter(0xFF7F7F7F, 0x00000000);    // darken
    paint.setColorFilter(filter);
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
}
 
源代码12 项目: hintcase   文件: RectangularShape.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void drawRoundRectAfterLollipop(Canvas canvas) {
    canvas.drawRoundRect(getCenterX() - (currentWidth / 2),
            getCenterY() - (currentHeight / 2),
            getCenterX() + (currentWidth / 2),
            getCenterY() + (currentHeight / 2),
            10f,
            10f,
            getShapePaint());
}
 
源代码13 项目: Yahala-Messenger   文件: RoundedImageView.java
public Bitmap getRoundedCornerBitmap(Context context, Bitmap input,
                                     int pixels, int w, int h, boolean squareTL, boolean squareTR,
                                     boolean squareBL, boolean squareBR) {

    Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    final float densityMultiplier = context.getResources()
            .getDisplayMetrics().density;

    final int color = 0xff424242;

    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, w, h);
    final RectF rectF = new RectF(rect);

    // make sure that our rounded corner is scaled appropriately
    final float roundPx = pixels * densityMultiplier;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    // draw rectangles over the corners we want to be square
    if (squareTL) {
        canvas.drawRect(0, 0, w / 2, h / 2, paint);
    }
    if (squareTR) {
        canvas.drawRect(w / 2, 0, w, h / 2, paint);
    }
    if (squareBL) {
        canvas.drawRect(0, h / 2, w / 2, h, paint);
    }
    if (squareBR) {
        canvas.drawRect(w / 2, h / 2, w, h, paint);
    }

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(input, 0, 0, paint);

    return output;
}
 
源代码14 项目: AcgClub   文件: RoundedCornersTransformation.java
private void drawBottomRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
  canvas.drawRoundRect(new RectF(right - diameter, bottom - diameter, right, bottom), radius,
      radius, paint);
  canvas.drawRect(new RectF(margin, margin, right - radius, bottom), paint);
  canvas.drawRect(new RectF(right - radius, margin, right, bottom - radius), paint);
}
 
源代码15 项目: AcgClub   文件: RoundedCornersTransformation.java
private void drawBottomRoundRect(Canvas canvas, Paint paint, float right, float bottom) {
  canvas.drawRoundRect(new RectF(margin, bottom - diameter, right, bottom), radius, radius,
      paint);
  canvas.drawRect(new RectF(margin, margin, right, bottom - radius), paint);
}
 
源代码16 项目: OXChart   文件: PieChartLableView.java
/**绘制图表*/
    @Override
    public void drawChart(Canvas canvas) {

        int topY = top + mMoveLen;

        paintLabel.setTextSize(textSize);
        int lableH =(int) FontUtil.getFontHeight(paintLabel);
        int lableL =(int) FontUtil.getFontLeading(paintLabel);

        paint.setStyle(Paint.Style.FILL);

        int index = -1;
        for(int i = 0; i < dataList.size(); i++){
            PieChartBean bean = dataList.get(i);
            if(bean.getNum() == 0 && !showZeroPart){
                continue;
            }
            index++;
            paint.setARGB(255, arrColorRgb[index%arrColorRgb.length][0], arrColorRgb[index%arrColorRgb.length][1], arrColorRgb[index%arrColorRgb.length][2]);
            paintLabel.setARGB(255, arrColorRgb[index%arrColorRgb.length][0], arrColorRgb[index%arrColorRgb.length][1], arrColorRgb[index%arrColorRgb.length][2]);

            int rectTop = topY+(oneLableHeight-rectH)/2;
            RectF rect = new RectF(leftSpace, rectTop, leftSpace+rectW, rectTop+rectH);
            canvas.drawRoundRect(rect, rectRaidus, rectRaidus, paint);


            if(textColor!=0) {
                paintLabel.setColor(textColor);
            }
            rectTop = topY+(oneLableHeight-lableH)/2;
            canvas.drawText(bean.getName(), leftSpace+rectW+leftSpace , rectTop+lableL , paintLabel);
            float textW = FontUtil.getFontlength(paintLabel, bean.getName());
            /**5、绘制指示标签*/
            if(MODUL_LABLE == tagModul){
                String tagText = "";
                if (tagType == PieChartLayout.TAG_TYPE.TYPE_NUM) {
                    tagText = bean.getNum() + "";
                } else if (tagType == PieChartLayout.TAG_TYPE.TYPE_PERCENT) {
                    DecimalFormat decimalFormat = new DecimalFormat("0.0%");
                    tagText = decimalFormat.format(((float) bean.getNum() / (float) total));
                }
                float tagW = FontUtil.getFontlength(paintLabel, tagText);
                canvas.drawText(tagText, getMeasuredWidth()-tagW- DensityUtil.dip2px(getContext(),3), rectTop+lableL , paintLabel);

            /*    DashPathEffect dashPathEffect = new DashPathEffect(new float[]{8,10,8,10}, 0);
                paint.setColor(Color.RED);
//                paint.setPathEffect(dashPathEffect);
                paint.setStrokeWidth(4);
                Path path = new Path();
                path.moveTo(leftSpace+rectW+leftSpace+textW, rectTop);
                path.lineTo(getMeasuredWidth()-tagW- DensityUtil.dip2px(getContext(),3), rectTop);
                LogUtil.i(TAG, "绘制虚线"+path);
                canvas.drawPath(path,paint);*/
            }
            topY += oneLableHeight + rectSpace;
        }

    }
 
private void drawTimeAndBackground(@NonNull final Canvas canvas,
                                   @NonNull final String hour,
                                   @NonNull final String minute,
                                   @NonNull final String second) {
    // background
    canvas.save();
    canvas.translate(paddingLeft, paddingTop);
    canvas.drawRoundRect(backgroundRectF, rectRadius, rectRadius, backgroundPaint);
    // border
    this.drawRectBorder(canvas, backgroundRectF, rectRadius, rectBorderPaint);
    canvas.drawText(hour, backgroundRectF.centerX(), timePaintBaseLine, timePaint);
    canvas.restore();

    // colon
    canvas.save();
    canvas.translate(firstTranslateColonX, paddingTop);
    canvas.drawText(COLON, 0, timePaintBaseLineFixed, colonPaint);
    canvas.restore();

    // background
    canvas.save();
    canvas.translate(firstTranslateX, paddingTop);
    canvas.drawRoundRect(backgroundRectF, rectRadius, rectRadius, backgroundPaint);
    // border
    this.drawRectBorder(canvas, backgroundRectF, rectRadius, rectBorderPaint);
    canvas.drawText(minute, backgroundRectF.centerX(), timePaintBaseLine, timePaint);
    canvas.restore();

    // colon
    canvas.save();
    canvas.translate(secondTranslateColonX, paddingTop);
    canvas.drawText(COLON, 0, timePaintBaseLineFixed, colonPaint);
    canvas.restore();

    // background
    canvas.save();
    canvas.translate(secondTranslateX, paddingTop);
    canvas.drawRoundRect(backgroundRectF, rectRadius, rectRadius, backgroundPaint);
    // border
    this.drawRectBorder(canvas, backgroundRectF, rectRadius, rectBorderPaint);
    canvas.drawText(second, backgroundRectF.centerX(), timePaintBaseLine, timePaint);
    canvas.restore();
}
 
public void draw(Canvas canvas) {
    Paint indexbarPaint = new Paint();
    indexbarPaint.setColor(Color.parseColor(indexbarBackgroudColor));
    indexbarPaint.setAlpha(indexbarBackgroudAlpha);
    indexbarPaint.setAntiAlias(true);
    canvas.drawRoundRect(mIndexbarRect, setIndexBarCornerRadius * mDensity, setIndexBarCornerRadius * mDensity, indexbarPaint);

    if (mSections != null && mSections.length > 0) {
        // Preview is shown when mCurrentSection is set
        if (mCurrentSection >= 0) {
            Paint previewPaint = new Paint();
            previewPaint.setColor(Color.BLACK);
            previewPaint.setAlpha(96);
            previewPaint.setAntiAlias(true);
            previewPaint.setShadowLayer(3, 0, 0, Color.argb(64, 0, 0, 0));

            Paint previewTextPaint = new Paint();
            previewTextPaint.setColor(Color.WHITE);
            previewTextPaint.setAntiAlias(true);
            previewTextPaint.setTextSize(50 * mScaledDensity);
            previewTextPaint.setTypeface(setTypeface);

            float previewTextWidth = previewTextPaint.measureText(mSections[mCurrentSection]);
            float previewSize = 2 * mPreviewPadding + previewTextPaint.descent() - previewTextPaint.ascent();
            RectF previewRect = new RectF((mListViewWidth - previewSize) / 2
                    , (mListViewHeight - previewSize) / 2
                    , (mListViewWidth - previewSize) / 2 + previewSize
                    , (mListViewHeight - previewSize) / 2 + previewSize);

            canvas.drawRoundRect(previewRect, 5 * mDensity, 5 * mDensity, previewPaint);
            canvas.drawText(mSections[mCurrentSection], previewRect.left + (previewSize - previewTextWidth) / 2 - 1
                    , previewRect.top + mPreviewPadding - previewTextPaint.ascent() + 1, previewTextPaint);
            fade(300);
        }

        Paint indexPaint = new Paint();
        indexPaint.setColor(Color.parseColor(indexbarTextColor));
        indexPaint.setAntiAlias(true);
        indexPaint.setTextSize(setIndexTextSize * mScaledDensity);
        indexPaint.setTypeface(setTypeface);

        float sectionHeight = (mIndexbarRect.height() - 2 * mIndexbarMargin) / mSections.length;
        float paddingTop = (sectionHeight - (indexPaint.descent() - indexPaint.ascent())) / 2;
        for (int i = 0; i < mSections.length; i++) {
            float paddingLeft = (mIndexbarWidth - indexPaint.measureText(mSections[i])) / 2;
            canvas.drawText(mSections[i], mIndexbarRect.left + paddingLeft
                    , mIndexbarRect.top + mIndexbarMargin + sectionHeight * i + paddingTop - indexPaint.ascent(), indexPaint);
        }
    }
}
 
源代码19 项目: DS4Android   文件: LinkedView.java
/**
 * 绘制表结构
 *
 * @param canvas
 */
private void dataView(Canvas canvas) {
    mPaint.setColor(Color.BLUE);
    mPaint.setStyle(Paint.Style.FILL);
    mPath.reset();
    for (int i = 0; i < mArrayBoxes.size(); i++) {
        LinkedNode box = mArrayBoxes.get(i);

        mPaint.setColor(box.color);
        canvas.drawRoundRect(
                box.x, box.y, box.x + Cons.BOX_WIDTH, box.y + Cons.BOX_HEIGHT,
                BOX_RADIUS, BOX_RADIUS, mPaint);

        mPath.moveTo(box.x, box.y);
        mPath.rCubicTo(Cons.BOX_WIDTH / 2, Cons.BOX_HEIGHT / 2,
                Cons.BOX_WIDTH / 2, Cons.BOX_HEIGHT / 2, Cons.BOX_WIDTH, 0);

        if (i < mArrayBoxes.size() - 1 ) {
            LinkedNode box_next = mArrayBoxes.get(i + 1);
            LinkedNode box_now = mArrayBoxes.get(i);

            if (i % LINE_ITEM_NUM == LINE_ITEM_NUM - 1) {//边界情况
                mPath.rLineTo(0, Cons.BOX_HEIGHT);
                mPath.lineTo(box_next.x + Cons.BOX_WIDTH, box_next.y);
                mPath.rLineTo(Cons.ARROW_DX, -Cons.ARROW_DX);

                mPath.moveTo(box_next.x, box_next.y);
                mPath.lineTo(box_now.x, box_now.y+Cons.BOX_HEIGHT);
                mPath.rLineTo(-Cons.ARROW_DX, Cons.ARROW_DX);

            } else {
                mPath.rLineTo(0, Cons.BOX_HEIGHT / 2.2f);
                mPath.lineTo(box_next.x+Cons.BOX_WIDTH * 0.2f, box_next.y + Cons.BOX_HEIGHT / 2f);
                mPath.rLineTo(-Cons.ARROW_DX, -Cons.ARROW_DX);

                mPath.moveTo(box_next.x, box_next.y);
                mPath.rLineTo(0, Cons.BOX_HEIGHT / 1.2f);
                mPath.lineTo(box_now.x + Cons.BOX_WIDTH * 0.8f, box_now.y + Cons.BOX_HEIGHT * 0.8f);
                mPath.rLineTo(Cons.ARROW_DX, Cons.ARROW_DX);
            }
        }
        canvas.drawPath(mPath, mPathPaint);

        canvas.drawText(box.index + "",
                box.x + Cons.BOX_WIDTH / 2,
                box.y + 3 * OFFSET_OF_TXT_Y, mTxtPaint);

        canvas.drawText(box.data + "",
                box.x + Cons.BOX_WIDTH / 2,
                box.y + Cons.BOX_HEIGHT / 2 + 3 * OFFSET_OF_TXT_Y, mTxtPaint);
    }
}
 
源代码20 项目: BigApp_Discuz_Android   文件: BitmapUtils.java
/**
 * 获得圆角图片的方法
 */
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {

    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap

            .getHeight(), Config.ARGB_8888);

    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;

    final Paint paint = new Paint();

    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

    final RectF rectF = new RectF(rect);

    paint.setAntiAlias(true);

    canvas.drawARGB(0, 0, 0, 0);

    paint.setColor(color);

    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;

}