Articles of android canvas

缩放canvas以在Android中调整SVG的大小

我没有太多运气包围我的头,所以我希望有人可以帮助我。 我使用svg-android从SVG获得了一个drawable,但是drawable没有扩展到视图。 我能够find的所有内容都说我应该直接绘制到canvas并重新缩放canvas,但是当我尝试它时,它似乎只是改变边界而不是缩放图像。 这是我到目前为止所尝试的: ImageView testview = (ImageView)findViewById(R.id.testview); //Get SVG and convert to drawable SVG vector = SVGParser.getSVGFromResource(getResources(),R.drawable.testvector); Drawable test = vector.createPictureDrawable(); testview.setBackground(test); //displays fine, but won’t scale to the dimensions of //the View //function that clips the image but doesn’t scale: Drawable testTwo = new CustomPictureDrawable(vector.getPicture(), (float)0.5, (float)0.5); testView.setBackground(testTwo); class CustomPictureDrawable extends PictureDrawable { […]

当Path的观点偏离视图时,Android Canvas没有绘制Path

在绘制路径时,我遇到了Android Canvas的一些问题。 我的情况是我有一个相对布局工作像地图视图(不使用谷歌API或类似的东西)。 我必须在该视图上绘制一条路径。 canvas.drawPath(polyPath, borderPaint); 我还必须使用canvas绘制其他types,如圆形,多边形。 每次我们放大或缩小时,我们都会重新计算路径点以匹配缩放级别。 当使用像Android 2.3.3这样的旧api时,根本没有问题。 但是对于像android 4.x这样的新api,当我们放大时,有一些点具有可见视图之外的位置(例如-300,-300)。 放大一段时间后,可见区域只显示我路径的一小部分。 然后突然整条路径消失了。 如果我们缩小,它会再次出现。 它就像canvas停止渲染那些(其他对象仍然显示像图标)同样的东西去圆形,椭圆形或多边形。 所以我不确定帆布画的东西是否有任何改变? 关于使用canvas绘画,我有什么遗漏吗?

如何在android中填充不透明的矩形

我可以用canvas绘制矩形填充矩形: Rect rt = new Rect(0, 0, getWidth(), getHeight()); myPaint.setColor(myColor); myPaint.setStyle(Style.FILL); canvas.drawRect(rt, myPaint); 但是我需要用不透明度填充矩形的方法(百分比,0%是TRANSPARENT)。 我怎样才能做到这一点?

Androidcanvas保存总是java.io.IOException:打开失败:ENOENT(没有这样的文件或目录)

我有一个canvas应用程序。 我正在尝试使用Canvas + onTouchListener创建一个签名应用程序。 这是我的保存方法,我尝试将签名保存到图像: private void save() { hideMenuBar(); View content = this; content.setDrawingCacheEnabled(true); content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = content.getDrawingCache(); String path = Environment.getExternalStorageDirectory().getAbsolutePath(); String imgPath = path+”/imotax/capture/spop/ttd/image” + “temp” + “.jpg”; File file = new File(imgPath); FileOutputStream ostream; try { file.createNewFile(); ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 100, ostream); ostream.flush(); ostream.close(); Toast.makeText(getContext(), “image saved”, 5000).show(); […]

Android应用程序 – 如何将canvas上的位图绘制保存为图像? 检查代码?

我尝试使用以下代码 画在canvas上 将canvas保存在Image上 问题 – 当我尝试保存图像时,它显示空指针错误,并且没有保存任何内容。 请帮助我find代码的问题或建议我一个替代方案,这是非常相似的。 提前致谢。 在canvas上绘制的代码: package com.example.draw2; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class MyDrawView extends View { private Bitmap mBitmap; private Canvas mCanvas; private Path mPath; private Paint mBitmapPaint; private Paint mPaint; public MyDrawView(Context c, AttributeSet attrs) […]

自定义视图drawArc,检测用户触摸弧的绘制路径

我正在创建一个自定义视图,这是一种圆弧滑块进度视图。我可以根据用户触摸的位置(在x轴上)通过计算扫描来绘制更多或更少的弧,我通过首先计算百分比来做到这一点用户沿x轴触摸的位置.0%将一直向左,100%将一直向右。 我想更进一步,而不是根据用户按下的x坐标绘制弧形,我想只在用户触摸实际弧形绘制路径时才移动它,因此它更加逼真。 我仍然是新的自定义视图,我的数学是有限的,但如果我得到一些提示,我将不胜感激 class ArcProgress extends View { Context cx; float width; float height; float center_x, center_y; final RectF oval = new RectF(); final RectF touchArea = new RectF(); float sweep = 0; float left, right; int percent = 0; public ArcProgress(Context context) { super(context); cx = context; } public int getPercentage() { return percent; […]

Android SweepGradient

我有一个SweepGradient定义为 circle_paint.setShader(new SweepGradient(getWidth()/2, getHeight()/2, new int[] { circle_start_color, circle_end_color}, new float[] { 0f, 1f})) 应用于定义为的拱门 canvas.drawArc(circle_bounds, circle_start_perc*360f, circle_end_perc*360f, true, circle_paint); 这很好用,但我需要拱门从屏幕顶部开始绘图,即 canvas.drawArc(circle_bounds, ((circle_start_perc*360f)-90f)%360, circle_end_perc*360f, true, circle_paint); 问题是SweepGradient似乎仍然从0度开始,我需要它从270度开始(类似于绘制弧的平移)。 换句话说,如果我有一个从白色到蓝色的渐变,我需要将弧的顶部涂成白色,并将弧的最后部分涂成蓝色。 我怎样才能做到这一点?

从WebView获取位图会导致OutOfMemory崩溃

我有一个自定义WebView ,我想获得其内容的位图(包括屏幕外)。 我使用了这段代码,我从这里得到了 : public static Bitmap getBitmapFromWebviewV2(WebView webView) { webView.measure(View.MeasureSpec.makeMeasureSpec( View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight()); webView.setDrawingCacheEnabled(true); webView.buildDrawingCache(); Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(), webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas bigcanvas = new Canvas(bm); Paint paint = new Paint(); int iHeight = bm.getHeight(); bigcanvas.drawBitmap(bm, 0, iHeight, paint); webView.draw(bigcanvas); return bm; } 当我放大很多时,它工作正常,在这种情况下,我得到OutOfMemory Crash。 我用相同的图片(稍微放大并缩放到最大值)测试了它,它的行为与我上面提到的相同。 我试图通过添加来解决这个问题 while(webView.canZoomOut()){ webView.zoomOut(); […]

在圆形位图上添加圆框圆

我想在我的位图周围创建一个圆形框架! 使用此代码,我可以使我的位图圆形: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff4242DB; 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 = bitmap.getWidth()/2; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, […]

Android在canvas中创建图层

我想学习如何在我的Android应用程序中创建图层(如在photoshop中)。 我想要实现一个基本的东西:当我在canvas中添加一个图像时,这将是一些图形,例如,我希望能够绘制canvas,但画面不能影响图形的线条。 然后我需要将该图像保存在我的SD卡上。 有什么建议/意见/例子吗? 我可以用什么来达到这个目的?