Articles of canvas

矩形canvas中的效果阴影

我画了一个带有canvas的矩形,我想知道是否有任何属性或方式给出一个小阴影。 protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint pincel1 = new Paint(); pincel1.setColor(Color.rgb(151, 217, 69)); RectF rectangle = new RectF(30, 20,200,100); canvas.drawRoundRect (rectangle, 6, 6, pincel1); } 谢谢

使用customview获取输入文本而不使用edittext android

我创建了customview。 每当用户双击视图时,它应显示键盘,用户可以绘制新文本。 Holder是一个扩展视图的自定义视图。 但它正在显示键盘。 如何获取文字? public Holder(Context context, AttributeSet attrs) { super(context, attrs); Log.e(TAG,”EXE”); imm = (InputMethodManager) context. getSystemService(Context.INPUT_METHOD_SERVICE); public boolean onDoubleTap(MotionEvent e) { View view = Holder.this.getRootView(); imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); // imm.showSoftInput(Holder.this, InputMethodManager.SHOW_FORCED); not working

Android 4.1.1上的ComposeShader问题

我只是想为我的Android应用程序实现一个颜色选择器,并在Android 4.1.1上遇到了一个奇怪的问题。 以下代码不会在Android 4.1.1上创建预期的渐变,但它在2.3.7上创建: Shader fadeInRight = new LinearGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); Shader blackToWhite = new LinearGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN); Shader blackToColor = new LinearGradient(0, 0, pWidth, 0, 0xFF000000, hue, Shader.TileMode.CLAMP); Shader shader = new ComposeShader(blackToColor, whiteMask, PorterDuff.Mode.SCREEN); paint.setShader(shader); … canvas.drawRect(new Rect(0, […]

Mapbox地图canvas上的自定义绘图

我希望能够使用android sdk在mapbox地图上手动绘制复杂的形状。 我inheritance了地图视图类并重写了ondraw事件,但不幸的是,我绘制的任何内容都被地图本身绘制。 作为一个例子,我需要能够在其他复杂形状中绘制带有菱形边框的多边形。 我可以使用自定义磁贴提供程序并覆盖ondraw在GoogleMaps中没有问题。 这是我到目前为止为mapbox唯一的代码: @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); Paint stroke = new Paint(); stroke.setColor(Color.BLACK); stroke.setStyle(Paint.Style.STROKE); stroke.setStrokeWidth(5); stroke.setAntiAlias(true); canvas.drawLine(0f,0f,1440f,2464f,stroke); }

如何有效地调整位图的大小,并在android中失去质量

我有一个大小为320×480的Bitmap ,我需要在不同的设备屏幕上拉伸它,我尝试使用这个: Rect dstRect = new Rect(); canvas.getClipBounds(dstRect); canvas.drawBitmap(frameBuffer, null, dstRect, null); 它工作,图像像我想要的那样填满整个屏幕,但图像像素化,看起来很糟糕。 然后我尝试了: float scaleWidth = (float) newWidth / width; float scaleHeight = (float) newHeight / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizedBitmap = Bitmap.createBitmap(frameBuffer, 0, 0, width, height, matrix, true); canvas.drawBitmap(resizedBitmap, 0, 0, null); 这次它看起来很完美,漂亮而且流畅,但是这段代码必须在我的主游戏循环中,并且每次迭代创建Bitmap都会让它非常慢。 如何调整图像大小以使其不会像素化并快速完成? find解决方案: Paint paint = […]

如何在canvas android中的onDraw()方法中快速绘制Bitmap

我试图在android中的单击方法上绘制一个标记。 当我绘制标记时它将绘制但是它将需要更多时间来绘制,即30-40毫秒,有时需要2-3秒。 这是我的类的代码,其中我有draw方法。 public class MyItemizedOverlay extends ItemizedOverlay { private ArrayList overlayItemList = new ArrayList(); public MyItemizedOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) { super(pDefaultMarker, pResourceProxy); } @Override public void draw(Canvas canvas, MapView mapView, boolean arg2) { super.draw(canvas, mapView, arg2); // —translate the GeoPoint to screen pixels— Point screenPts = new Point(); mapView.getProjection().toPixels(p, screenPts); // —add the marker— […]

尝试保存图像时,MediaStore.Images.Media.insertImage返回null

我正在使用自定义视图,并且我正在使用canvas,用户可以在其中绘制任何内容,之后我想将该图像保存在SD卡中,但是无法做到这一点。 不知道发生了什么事。 else if(view.getId()==R.id.save_btn){ //save drawing AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); saveDialog.setTitle(“Save drawing”); saveDialog.setMessage(“Save drawing to device Gallery?”); saveDialog.setPositiveButton(“Yes”, new DialogInterface.OnClickListener(){ private FileOutputStream fOut; public void onClick(DialogInterface dialog, int which){ //save drawing drawView.setDrawingCacheEnabled(true); //attempt to save String imgSaved = MediaStore.Images.Media.insertImage( getContentResolver(), drawView.getDrawingCache(), UUID.randomUUID().toString()+”.png”, “drawing”); //feedback if(imgSaved!=null){ Toast savedToast = Toast.makeText(getApplicationContext(), “Drawing saved to Gallery!”, Toast.LENGTH_SHORT); […]

Android绘制animation线

我目前正在使用图形和路径,我可以成功地显示我想要的任何内容。 但是我不想直接在SurfaceView上画一条线,而是想在animation中逐步绘制它。 到目前为止我所做的是创建一个Path,然后使用PathMeasure沿路径逐步检索坐标。 这基本上是我到目前为止所做的 PathMeasure pm = new PathMeasure(myPath, false); float position = 0; float end = pm.getLength(); float[] coord = {0,0,0,0,0,0,0,0,0}; while (position < end){ Matrix m = new Matrix(); // put the current path position coordinates into the matrix pm.getMatrix(position, m, PathMeasure.POSITION_MATRIX_FLAG | PathMeasure.TANGENT_MATRIX_FLAG); // put the matrix data into the coord array […]

在canvas上绘制虚线

如何在canvas上绘制虚线。 我已经尝试过了: Paint dashPaint = new Paint(); dashPaint.setARGB(255, 0, 0, 0); dashPaint.setStyle(Paint.Style.STROKE); dashPaint.setPathEffect(new DashPathEffect(new float[]{5, 10, 15, 20}, 0)); canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint); 而且它给了我一条简单的线条,而不是简单的线条。

在canvas上绘图 – PorterDuff.Mode.CLEAR绘制黑色! 为什么?

我正在尝试创建一个简单的自定义视图:有一个由弧路径显示的位图 – 从0deg到360deg。 学位正在随着一些FPS而变化。 所以我使用重写的onDraw()方法创建了一个自定义视图: @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); canvas.drawArc(arcRectF, -90, currentAngleSweep, true, arcPaint); arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, circleSourceRect, circleDestRect, arcPaint); } arcPaint初始化如下: arcPaint = new Paint(); arcPaint.setAntiAlias(true); arcPaint.setColor(Color.RED); // Color doesn’t matter 现在,一切都很棒,但是…整个视图中的背景是黑色的。 如果我设置canvas.drawColor(…, PorterDuff.Mode.DST)并省略canvas.drawBitmap() – 则在透明背景上正确绘制弧。 我的问题是 – 如何设置PorterDuff模式使其与透明度一起工作? 当然, bitmap是带有alpha通道的32位PNG。