public DrawView(Context context) { super(context); rect = new Rect(0, 0, 100, 100); rect1 = new Rect(0, 0, 500, 200); p = new Paint(Paint.ANTI_ALIAS_FLAG); picture = new Picture(); Canvas canvas = picture.beginRecording(300, 300); p.setColor(Color.GREEN); canvas.drawCircle(150, 100, 80, p); p.setColor(Color.BLUE); canvas.drawRect(20, 70, 150, 200, p); p.setColor(Color.RED); path = new Path(); path.moveTo(170, 80); path.lineTo(240, 210); path.lineTo(100, 210); path.close(); canvas.drawPath(path, p); picture.endRecording(); }
public Picture getContourPicture() { Picture p = new Picture(); Canvas canvas = p.beginRecording(mWidth, mHeight); if (mPath != null) { canvas.drawPath(mPath, mPaint); } p.endRecording(); return p; }
public SampleView(Context context) { super(context); setFocusable(true); setFocusableInTouchMode(true); mPicture = new Picture(); drawSomething(mPicture.beginRecording(200, 100)); mPicture.endRecording(); mDrawable = new PictureDrawable(mPicture); }
private void createCompassRosePicture() { // Paint design of north triangle (it's common to paint north in red color) final Paint northPaint = new Paint(); northPaint.setColor(0xFFA00000); northPaint.setAntiAlias(true); northPaint.setStyle(Style.FILL); northPaint.setAlpha(220); // Paint design of south triangle (black) final Paint southPaint = new Paint(); southPaint.setColor(Color.BLACK); southPaint.setAntiAlias(true); southPaint.setStyle(Style.FILL); southPaint.setAlpha(220); // Create a little white dot in the middle of the compass rose final Paint centerPaint = new Paint(); centerPaint.setColor(Color.WHITE); centerPaint.setAntiAlias(true); centerPaint.setStyle(Style.FILL); centerPaint.setAlpha(220); // final int picBorderWidthAndHeight = (int) ((mCompassRadius + 5) * 2 * mScale); final int picBorderWidthAndHeight = (int) ((mCompassRadius + 5) * 2); final int center = picBorderWidthAndHeight / 2; final Canvas canvas = mCompassRose.beginRecording(picBorderWidthAndHeight, picBorderWidthAndHeight); // Blue triangle pointing north final Path pathNorth = new Path(); pathNorth.moveTo(center, center - (mCompassRadius - 3) * mScale); pathNorth.lineTo(center + 4 * mScale, center); pathNorth.lineTo(center - 4 * mScale, center); pathNorth.lineTo(center, center - (mCompassRadius - 3) * mScale); pathNorth.close(); canvas.drawPath(pathNorth, northPaint); // Red triangle pointing south final Path pathSouth = new Path(); pathSouth.moveTo(center, center + (mCompassRadius - 3) * mScale); pathSouth.lineTo(center + 4 * mScale, center); pathSouth.lineTo(center - 4 * mScale, center); pathSouth.lineTo(center, center + (mCompassRadius - 3) * mScale); pathSouth.close(); canvas.drawPath(pathSouth, southPaint); // Draw a little white dot in the middle canvas.drawCircle(center, center, 2, centerPaint); mCompassRose.endRecording(); }
private void createCompassFramePicture() { // The inside of the compass is white and transparent final Paint innerPaint = new Paint(); innerPaint.setColor(Color.WHITE); innerPaint.setAntiAlias(true); innerPaint.setStyle(Style.FILL); innerPaint.setAlpha(200); // The outer part (circle and little triangles) is gray and transparent final Paint outerPaint = new Paint(); outerPaint.setColor(Color.GRAY); outerPaint.setAntiAlias(true); outerPaint.setStyle(Style.STROKE); outerPaint.setStrokeWidth(2.0f); outerPaint.setAlpha(200); final int picBorderWidthAndHeight = (int) ((mCompassRadius + 5) * 2); final int center = picBorderWidthAndHeight / 2; final Canvas canvas = mCompassFrame.beginRecording(picBorderWidthAndHeight, picBorderWidthAndHeight); // draw compass inner circle and border canvas.drawCircle(center, center, mCompassRadius * mScale, innerPaint); canvas.drawCircle(center, center, mCompassRadius * mScale, outerPaint); // Draw little triangles north, south, west and east (don't move) // to make those move use "-bearing + 0" etc. (Note: that would mean to draw the triangles // in the onDraw() method) drawTriangle(canvas, center, center, mCompassRadius * mScale, 0, outerPaint); drawTriangle(canvas, center, center, mCompassRadius * mScale, 90, outerPaint); drawTriangle(canvas, center, center, mCompassRadius * mScale, 180, outerPaint); drawTriangle(canvas, center, center, mCompassRadius * mScale, 270, outerPaint); mCompassFrame.endRecording(); }
@Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (localName.equals("svg")) { picture.endRecording(); } else if (localName.equals("linearGradient")) { if (gradient.id != null) { if (gradient.xlink != null) { Gradient parent = gradientRefMap.get(gradient.xlink); if (parent != null) { gradient = parent.createChild(gradient); } } int[] colors = new int[gradient.colors.size()]; for (int i = 0; i < colors.length; i++) { colors[i] = gradient.colors.get(i); } float[] positions = new float[gradient.positions.size()]; for (int i = 0; i < positions.length; i++) { positions[i] = gradient.positions.get(i); } LinearGradient g = new LinearGradient( gradient.x1, gradient.y1, gradient.x2, gradient.y2, colors, positions, Shader.TileMode.CLAMP); if (gradient.matrix != null) { g.setLocalMatrix(gradient.matrix); } gradientMap.put(gradient.id, g); gradientRefMap.put(gradient.id, gradient); } } else if (localName.equals("radialGradient")) { if (gradient.id != null) { if (gradient.xlink != null) { Gradient parent = gradientRefMap.get(gradient.xlink); if (parent != null) { gradient = parent.createChild(gradient); } } int[] colors = new int[gradient.colors.size()]; for (int i = 0; i < colors.length; i++) { colors[i] = gradient.colors.get(i); } float[] positions = new float[gradient.positions.size()]; for (int i = 0; i < positions.length; i++) { positions[i] = gradient.positions.get(i); } if (gradient.xlink != null) { Gradient parent = gradientRefMap.get(gradient.xlink); if (parent != null) { gradient = parent.createChild(gradient); } } RadialGradient g = new RadialGradient( gradient.x, gradient.y, gradient.radius, colors, positions, Shader.TileMode.CLAMP); if (gradient.matrix != null) { g.setLocalMatrix(gradient.matrix); } gradientMap.put(gradient.id, g); gradientRefMap.put(gradient.id, gradient); } } else if (localName.equals("g")) { if (boundsMode) { boundsMode = false; } // Break out of hidden mode if (hidden) { hiddenLevel--; // Util.debug("Hidden down: " + hiddenLevel); if (hiddenLevel == 0) { hidden = false; } } // Clear gradient map gradientMap.clear(); popTransform(); } }
private void createScaleBarPicture(final MapView mapView) { // We want the scale bar to be as long as the closest round-number miles/kilometers // to 1-inch at the latitude at the current center of the screen. projection = mapView.getProjection(); if (projection == null) { return; } // Two points, 1-inch apart in x/latitude, centered on screen IGeoPoint p1 = projection.fromPixels((screenWidth / 2) - (xdpi / 2), screenHeight / 2); IGeoPoint p2 = projection.fromPixels((screenWidth / 2) + (xdpi / 2), screenHeight / 2); final int xMetersPerInch = ((GeoPoint) p1).distanceTo(p2); p1 = projection.fromPixels(screenWidth / 2, (screenHeight / 2) - (ydpi / 2)); p2 = projection.fromPixels(screenWidth / 2, (screenHeight / 2) + (ydpi / 2)); final int yMetersPerInch = ((GeoPoint) p1).distanceTo(p2); final Canvas canvas = scaleBarPicture.beginRecording((int) xdpi, (int) ydpi); if (latitudeBar) { final String xMsg = scaleBarLengthText(xMetersPerInch, imperial, nautical); final Rect xTextRect = new Rect(); textPaint.getTextBounds(xMsg, 0, xMsg.length(), xTextRect); final int textSpacing = (int) (xTextRect.height() / 5.0); canvas.drawRect(0, 0, xdpi, lineWidth, barPaint); canvas.drawRect( xdpi, 0, xdpi + lineWidth, xTextRect.height() + lineWidth + textSpacing, barPaint); if (!longitudeBar) { canvas.drawRect(0, 0, lineWidth, xTextRect.height() + lineWidth + textSpacing, barPaint); } canvas.drawText( xMsg, xdpi / 2 - xTextRect.width() / 2, xTextRect.height() + lineWidth + textSpacing, textPaint); } if (longitudeBar) { final String yMsg = scaleBarLengthText(yMetersPerInch, imperial, nautical); final Rect yTextRect = new Rect(); textPaint.getTextBounds(yMsg, 0, yMsg.length(), yTextRect); final int textSpacing = (int) (yTextRect.height() / 5.0); canvas.drawRect(0, 0, lineWidth, ydpi, barPaint); canvas.drawRect( 0, ydpi, yTextRect.height() + lineWidth + textSpacing, ydpi + lineWidth, barPaint); if (!latitudeBar) { canvas.drawRect(0, 0, yTextRect.height() + lineWidth + textSpacing, lineWidth, barPaint); } final float x = yTextRect.height() + lineWidth + textSpacing; final float y = ydpi / 2 + yTextRect.width() / 2; canvas.rotate(-90, x, y); canvas.drawText(yMsg, x, y + textSpacing, textPaint); } scaleBarPicture.endRecording(); }