Java Code Examples for android.graphics.Path#addArc()
The following examples show how to use
android.graphics.Path#addArc() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: PathMeasureView.java From zone-sdk with MIT License | 6 votes |
private void testArc(Canvas canvas) { Path path=new Path(); int minWidth=400; int br = minWidth / 2; RectF bigCircle = new RectF(-br, -br, br, br); int sr = minWidth / 4; RectF smallCircle = new RectF(-sr, -sr, sr, sr); float bigSweepAngle = 84; float smallSweepAngle = -80; path.addArc(bigCircle, 50, bigSweepAngle); path.arcTo(smallCircle, 130, smallSweepAngle); path.close(); canvas.drawPath(path, mDeafultPaint); logRegion(); }
Example 2
Source File: FilterMenuLayout.java From FilterMenu with Apache License 2.0 | 6 votes |
/** * calculate and set position to menu items */ private void calculateMenuItemPosition() { float itemRadius = (expandedRadius + collapsedRadius) / 2, f; RectF area = new RectF( center.x - itemRadius, center.y - itemRadius, center.x + itemRadius, center.y + itemRadius); Path path = new Path(); path.addArc(area, (float) fromAngle, (float) (toAngle - fromAngle)); PathMeasure measure = new PathMeasure(path, false); float len = measure.getLength(); int divisor = getChildCount(); float divider = len / divisor; for (int i = 0; i < getChildCount(); i++) { float[] coords = new float[2]; measure.getPosTan(i * divider + divider * .5f, coords, null); FilterMenu.Item item = (FilterMenu.Item) getChildAt(i).getTag(); item.setX((int) coords[0] - item.getView().getMeasuredWidth() / 2); item.setY((int) coords[1] - item.getView().getMeasuredHeight() / 2); } }
Example 3
Source File: PXPie.java From pixate-freestyle-android with Apache License 2.0 | 6 votes |
@Override public Path newPath() { Path path = ObjectPool.pathPool.checkOut(); float startingRadians = (float) Math.toRadians(this.startingAngle); float endingRadians = (float) Math.toRadians(this.endingAngle); path.moveTo(this.center.x, this.center.y); // Android arc is defined differently than the iOS arc. // TODO - Test this visually. Not so sure if the given angles are good, // or need a conversion. RectF oval = new RectF(center.x - radius, center.y + radius, center.x + radius, center.y - radius); // We keep those in degrees, not radians. path.addArc(oval, startingRadians, endingRadians); path.close(); return path; }
Example 4
Source File: DashboardView.java From Android_UE with Apache License 2.0 | 6 votes |
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mRect = new RectF(getWidth() / 2 - RADIUS, PADDING, getWidth() / 2 + RADIUS, getHeight() - PADDING); // 刻度的数量 Path arcPath = new Path(); arcPath.addArc(mRect, START_ANAGLE, 360 - (START_ANAGLE - 45)); PathMeasure pathMeasure = new PathMeasure(arcPath, false); float pathMeasureLength = pathMeasure.getLength(); // 短刻度 mShortEffect = new PathDashPathEffect(mShortDash, (pathMeasureLength - Utils.dp2px(2)) / 50,// 每个间距为多少 0,// 第一个从什么地方开始 PathDashPathEffect.Style.ROTATE); // 长刻度 mLongEffect = new PathDashPathEffect(mLongDash, (pathMeasureLength - Utils.dp2px(2)) / 10,// 每个间距为多少 0,// 第一个从什么地方开始 PathDashPathEffect.Style.ROTATE); }
Example 5
Source File: DrawableFactory.java From LaunchEnr with GNU General Public License v3.0 | 6 votes |
private Path getPreloadProgressPath(Context context) { if (AndroidVersion.isAtLeastOreo()) { try { // Try to load the path from Mask Icon Drawable icon = context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper); icon.setBounds(0, 0, PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE); return (Path) icon.getClass().getMethod("getIconMask").invoke(icon); } catch (Exception e) { e.printStackTrace(); } } // Create a circle static from top center and going clockwise. Path p = new Path(); p.moveTo(PreloadIconDrawable.PATH_SIZE / 2, 0); p.addArc(0, 0, PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE, -90, 360); return p; }
Example 6
Source File: RxRotateBarBasic.java From RxTools-master with Apache License 2.0 | 6 votes |
protected void drawTitle(Canvas canvas, int alpha) { if (alpha > 0 && isShowTitle) { Path path = new Path(); float circumference = (float) (Math.PI * (outlineOval.right - outlineOval.left)); float textAngle = (360 / circumference) * titlePaint.measureText(getTitle()); float startAngle = mStartAngle + mSweepAngle / 2 - textAngle / 2; if (isSingle) { // when single, draw 360 the path will be a circle path.addArc(outlineOval, startAngle - mSweepAngle / 2, mSweepAngle / 2); } else { path.addArc(outlineOval, startAngle, mSweepAngle); } titlePaint.setAlpha(alpha); canvas.drawTextOnPath(mTitle, path, 0, textWidth / 3, titlePaint); } }
Example 7
Source File: SearchPathBuilder.java From AndroidWallet with GNU General Public License v3.0 | 5 votes |
private void initPaths() { float r = mR * 0.4f; mPath = new Path(); mPath.addArc(new RectF(getViewCenterX() - mR, getViewCenterY() - mR, getViewCenterX() + mR, getViewCenterY() + mR), 45, 359.9f); mPathMeasure.setPath(mPath, false); float[] pos = new float[2]; mPathMeasure.getPosTan(0, pos, null); mPathZoom = new Path(); mPathZoom.addArc(new RectF(getViewCenterX() - r, getViewCenterY() - r, getViewCenterX() + r, getViewCenterY() + r), 45, 359.9f); mPathZoom.lineTo(pos[0], pos[1]); }
Example 8
Source File: WheelItem.java From Android-Music-Player with MIT License | 5 votes |
@Override protected void onDraw(Canvas canvas) { //super.onDraw(canvas); canvas.save(); canvas.translate(0,-Ui.cd.getHt(10)); canvas.save(); bass.draw(canvas); float radius = 10; final RectF oval = new RectF(); oval.set(0, 0, bass.width, bass.height); Path ph = new Path(); ph.setFillType(Path.FillType.WINDING); ph.moveTo(bass.width/2, bass.width/2); if(angle > 110 - 1){ ph.addArc(oval,-(200) + 110,angle - 110); }else{ ph.addArc(oval,-(90) - (110 - angle),(110 - angle)); } ph.lineTo(bass.width/2,bass.width/2); canvas.clipPath(ph); basstop.draw(canvas); canvas.restore(); canvas.save(); canvas.rotate(-(90+20),XX,YY); canvas.rotate(angle,XX,YY); bassdot.draw(canvas); canvas.restore(); int val = (angle - 110); val = (int) ((100f / 110) * val); levelText.setText(val+"",true); levelText.draw(canvas); canvas.restore(); super.drawShape(canvas); //canvas.drawPath(ph,bass.img.maskPaint); }
Example 9
Source File: CircularSeekBar.java From Melophile with Apache License 2.0 | 5 votes |
/** * Initialize the {@code Path} objects with the appropriate values. */ private void initPaths() { mCirclePath = new Path(); mCirclePath.addArc(mCircleRectF, mStartAngle, mTotalCircleDegrees); mCircleProgressPath = new Path(); mCircleProgressPath.addArc(mCircleRectF, mStartAngle, mProgressDegrees); }
Example 10
Source File: SearchPathBuilder.java From ZLoading with MIT License | 5 votes |
private void initPaths() { float r = mR * 0.4f; mPath = new Path(); mPath.addArc(new RectF(getViewCenterX() - mR, getViewCenterY() - mR, getViewCenterX() + mR, getViewCenterY() + mR), 45, 359.9f); mPathMeasure.setPath(mPath, false); float[] pos = new float[2]; mPathMeasure.getPosTan(0, pos, null); mPathZoom = new Path(); mPathZoom.addArc(new RectF(getViewCenterX() - r, getViewCenterY() - r, getViewCenterX() + r, getViewCenterY() + r), 45, 359.9f); mPathZoom.lineTo(pos[0], pos[1]); }
Example 11
Source File: WinSearch.java From stynico with MIT License | 5 votes |
private void init() { mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(15); mPaint.setColor(WinSearch.this.getResources().getColor(R.color.colorPrimary)); //设置画笔为园笔 mPaint.setStrokeCap(Paint.Cap.ROUND); //抗锯齿 mPaint.setAntiAlias(true); mPath = new Path(); RectF rect = new RectF(-150,-150,150,150); mPath.addArc(rect,-90,359.9f); mPathMeasure = new PathMeasure(mPath,false); valueAnimator = ValueAnimator.ofFloat(0f,1f).setDuration(3000); valueAnimator.setRepeatCount(-1); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { t = (float) animation.getAnimatedValue(); invalidate(); } }); }
Example 12
Source File: PXArc.java From pixate-freestyle-android with Apache License 2.0 | 5 votes |
public Path newPath() { Path path = ObjectPool.pathPool.checkOut(); // Android arc is defined differently than the iOS arc. // TODO - Test this visually. Not so sure if the given angles are good, // or need a conversion. RectF oval = new RectF(center.x - radius, center.y + radius, center.x + radius, center.y - radius); // For Android, we need to keep those in degrees, not radians. path.addArc(oval, startingAngle, endingAngle); return path; }
Example 13
Source File: FloatingActionMenu.java From UltimateAndroid with Apache License 2.0 | 5 votes |
/** * Calculates the desired positions of all items. */ private void calculateItemPositions() { // Create an arc that starts from startAngle and ends at endAngle // in an area that is as large as 4*radius^2 Point center = getActionViewCenter(); RectF area = new RectF(center.x - radius, center.y - radius, center.x + radius, center.y + radius); Path orbit = new Path(); orbit.addArc(area, startAngle, endAngle - startAngle); PathMeasure measure = new PathMeasure(orbit, false); // Prevent overlapping when it is a full circle int divisor; if(Math.abs(endAngle - startAngle) >= 360 || subActionItems.size() <= 1) { divisor = subActionItems.size(); } else { divisor = subActionItems.size() -1; } // Measure this path, in order to find points that have the same distance between each other for(int i=0; i<subActionItems.size(); i++) { float[] coords = new float[] {0f, 0f}; measure.getPosTan((i) * measure.getLength() / divisor, coords, null); // get the x and y values of these points and set them to each of sub action items. subActionItems.get(i).x = (int) coords[0] - subActionItems.get(i).width / 2; subActionItems.get(i).y = (int) coords[1] - subActionItems.get(i).height / 2; } }
Example 14
Source File: CircularSeekBar.java From Muzesto with GNU General Public License v3.0 | 5 votes |
/** * Initialize the {@code Path} objects with the appropriate values. */ private void initPaths() { mCirclePath = new Path(); mCirclePath.addArc(mCircleRectF, mStartAngle, mTotalCircleDegrees); mCircleProgressPath = new Path(); mCircleProgressPath.addArc(mCircleRectF, mStartAngle, mProgressDegrees); }
Example 15
Source File: FloatingActionMenu.java From android-open-project-demo with Apache License 2.0 | 5 votes |
/** * Calculates the desired positions of all items. */ private void calculateItemPositions() { // Create an arc that starts from startAngle and ends at endAngle // in an area that is as large as 4*radius^2 Point center = getActionViewCenter(); //内切弧形路径 RectF area = new RectF(center.x - radius, center.y - radius, center.x + radius, center.y + radius); Path orbit = new Path(); orbit.addArc(area, startAngle, endAngle - startAngle); PathMeasure measure = new PathMeasure(orbit, false); // Prevent overlapping when it is a full circle int divisor; if(Math.abs(endAngle - startAngle) >= 360 || subActionItems.size() <= 1) { divisor = subActionItems.size(); } else { divisor = subActionItems.size() -1; } // Measure this path, in order to find points that have the same distance between each other for(int i=0; i<subActionItems.size(); i++) { float[] coords = new float[] {0f, 0f}; measure.getPosTan((i) * measure.getLength() / divisor, coords, null); // get the x and y values of these points and set them to each of sub action items. subActionItems.get(i).x = (int) coords[0] - subActionItems.get(i).width / 2; subActionItems.get(i).y = (int) coords[1] - subActionItems.get(i).height / 2; } }
Example 16
Source File: MultiLevelPie.java From numAndroidCharts with GNU General Public License v3.0 | 5 votes |
private void createArc(Path p, RectF mRectF, float currentSweep, float startAngle, float sweepAngle) { if (currentSweep == 360) { p.addArc(mRectF, startAngle, sweepAngle); } else { p.arcTo(mRectF, startAngle, sweepAngle); } }
Example 17
Source File: CarUserSwitchingDialog.java From android_9.0.0_r45 with Apache License 2.0 | 5 votes |
public CircleFramedDrawable(Bitmap icon, int size) { super(); mSize = size; mBitmap = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(mBitmap); final int width = icon.getWidth(); final int height = icon.getHeight(); final int square = Math.min(width, height); final Rect cropRect = new Rect((width - square) / 2, (height - square) / 2, square, square); final RectF circleRect = new RectF(0f, 0f, mSize, mSize); final Path fillPath = new Path(); fillPath.addArc(circleRect, 0f, 360f); canvas.drawColor(0, PorterDuff.Mode.CLEAR); // opaque circle mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLACK); mPaint.setStyle(Paint.Style.FILL); canvas.drawPath(fillPath, mPaint); // mask in the icon where the bitmap is opaque mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(icon, cropRect, circleRect, mPaint); // prepare paint for frame drawing mPaint.setXfermode(null); mScale = 1f; mSrcRect = new Rect(0, 0, mSize, mSize); mDstRect = new RectF(0, 0, mSize, mSize); }
Example 18
Source File: Compat.java From ProjectX with Apache License 2.0 | 4 votes |
@Override public void addArc(Path path, float left, float top, float right, float bottom, float startAngle, float sweepAngle) { path.addArc(left, top, right, bottom, startAngle, sweepAngle); }
Example 19
Source File: PieChart.java From OXChart with Apache License 2.0 | 4 votes |
/**计算各种绘制坐标*/ private void evaluatorData(float animPre){ paintLabel.setTextSize(tagTextSize); float tagTextLead = FontUtil.getFontLeading(paintLabel); float tagTextHeight = FontUtil.getFontHeight(paintLabel); float oneStartAngle = startAngle; for(int i = 0; i < dataList.size(); i++) { PieChartBean bean = dataList.get(i); /* if(bean.getNum() == 0 && !showZeroPart){ continue; }*/ /**1、绘制扇形*/ float arcLeft = centerPoint.x - chartRaidus; //扇形半径 float arcTop = centerPoint.y - chartRaidus; float arcRight = centerPoint.x + chartRaidus; float arcBottom = centerPoint.y + chartRaidus; // float percentage = 360.0f / total * bean.getNum(); float percentage = (bean.getNum()==0?0:(360.0f / total * bean.getNum())*animPre); bean.setArcRect(new RectF(arcLeft, arcTop, arcRight, arcBottom)); bean.setStartAngle(oneStartAngle); bean.setSweepAngle(percentage); /**2、计算扇形区域*/ arcLeft = centerPoint.x - chartSize; arcTop = centerPoint.y - chartSize; arcRight = centerPoint.x + chartSize; arcBottom = centerPoint.y + chartSize; Path allPath = new Path(); allPath.moveTo(centerPoint.x, centerPoint.y);//添加原始点 float ovalX = centerPoint.x + (float) (chartRaidus * Math.cos(Math.toRadians(oneStartAngle))); float ovalY = centerPoint.y + (float) (chartRaidus * Math.sin(Math.toRadians(oneStartAngle))); allPath.lineTo(ovalX, ovalY); RectF touchOval = new RectF(arcLeft, arcTop, arcRight, arcBottom); allPath.addArc(touchOval, oneStartAngle, percentage); allPath.lineTo(centerPoint.x, centerPoint.y); allPath.close(); RectF r = new RectF(); allPath.computeBounds(r, true); Region region = new Region(); region.setPath(allPath, new Region((int) r.left, (int) r.top, (int) r.right, (int) r.bottom)); bean.setRegion(region); if(MODUL_CHART == tagModul) { /**3、绘制直线*/ //确定直线的起始和结束的点的位置 float startX = centerPoint.x + (float) (chartRaidus * Math.cos(Math.toRadians(oneStartAngle + percentage / 2))); float startY = centerPoint.y + (float) (chartRaidus * Math.sin(Math.toRadians(oneStartAngle + percentage / 2))); float endX = centerPoint.x + (float) ((chartRaidus + lineLenth - 20) * Math.cos(Math.toRadians(oneStartAngle + percentage / 2))); float endY = centerPoint.y + (float) ((chartRaidus + lineLenth - 20) * Math.sin(Math.toRadians(oneStartAngle + percentage / 2))); boolean isRight = true; float lineAngle = oneStartAngle + percentage / 2; if (lineAngle > 90 && lineAngle < 270) { isRight = false; } // LogUtil.i(TAG, "直线坐标:start=("+startX+","+startY +") end=("+endX+","+endY+")"+" lineAngle="+lineAngle+" isRight="+isRight); List<PointF> tagLinePoints = new ArrayList<>(); tagLinePoints.add(new PointF(startX, startY)); tagLinePoints.add(new PointF(endX, endY)); float textX = isRight ? (endX + 20) : (endX - 20); tagLinePoints.add(new PointF(textX, endY)); bean.setTagLinePoints(tagLinePoints); /**3、绘制指示标签*/ String tagText = ""; paintLabel.setTextSize(tagTextSize); 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 = (total==0?"/":decimalFormat.format(((float) bean.getNum() / (float) total))); } float textW = FontUtil.getFontlength(paintLabel, tagText); textX = isRight ? textX + textSpace : (textX - textW - textSpace); float textY = endY - tagTextHeight / 2 + tagTextLead; bean.setTagStr(tagText); bean.setTagTextPoint(new PointF(textX, textY)); } /*开始角度累加*/ oneStartAngle += percentage; } }
Example 20
Source File: PathParser.java From UltimateAndroid with Apache License 2.0 | 4 votes |
private static void drawArc(Path path, double x0, double y0, double x, double y, double rx, double ry, double angle, boolean largeArcFlag, boolean sweepFlag) { double dx2 = (x0 - x) / 2.0; double dy2 = (y0 - y) / 2.0; angle = Math.toRadians(angle % 360.0); double cosAngle = Math.cos(angle); double sinAngle = Math.sin(angle); double x1 = (cosAngle * dx2 + sinAngle * dy2); double y1 = (-sinAngle * dx2 + cosAngle * dy2); rx = Math.abs(rx); ry = Math.abs(ry); double Prx = rx * rx; double Pry = ry * ry; double Px1 = x1 * x1; double Py1 = y1 * y1; // check that radii are large enough double radiiCheck = Px1 / Prx + Py1 / Pry; if (radiiCheck > 1) { rx = Math.sqrt(radiiCheck) * rx; ry = Math.sqrt(radiiCheck) * ry; Prx = rx * rx; Pry = ry * ry; } // Step 2 : Compute (cx1, cy1) double sign = (largeArcFlag == sweepFlag) ? -1 : 1; double sq = ((Prx * Pry) - (Prx * Py1) - (Pry * Px1)) / ((Prx * Py1) + (Pry * Px1)); sq = (sq < 0) ? 0 : sq; double coef = (sign * Math.sqrt(sq)); double cx1 = coef * ((rx * y1) / ry); double cy1 = coef * -((ry * x1) / rx); double sx2 = (x0 + x) / 2.0; double sy2 = (y0 + y) / 2.0; double cx = sx2 + (cosAngle * cx1 - sinAngle * cy1); double cy = sy2 + (sinAngle * cx1 + cosAngle * cy1); // Step 4 : Compute the angleStart (angle1) and the angleExtent (dangle) double ux = (x1 - cx1) / rx; double uy = (y1 - cy1) / ry; double vx = (-x1 - cx1) / rx; double vy = (-y1 - cy1) / ry; double p, n; // Compute the angle start n = Math.sqrt((ux * ux) + (uy * uy)); p = ux; // (1 * ux) + (0 * uy) sign = (uy < 0) ? -1.0 : 1.0; double angleStart = Math.toDegrees(sign * Math.acos(p / n)); // Compute the angle extent n = Math.sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy)); p = ux * vx + uy * vy; sign = (ux * vy - uy * vx < 0) ? -1.0 : 1.0; double angleExtent = Math.toDegrees(sign * Math.acos(p / n)); if (!sweepFlag && angleExtent > 0) { angleExtent -= 360f; } else if (sweepFlag && angleExtent < 0) { angleExtent += 360f; } angleExtent %= 360f; angleStart %= 360f; RectF oval = new RectF((float) (cx - rx), (float) (cy - ry), (float) (cx + rx), (float) (cy + ry)); path.addArc(oval, (float) angleStart, (float) angleExtent); }