Articles of android canvas

如何在canvasandroid上绘制路径时覆盖总面积?

我使用下面的代码在位图canvas上绘制线条,同时手指触摸移动…这里我发布了部分代码,它工作正常.. 如下图所示,黑色和白色位图在触摸拖动时被擦除。我使canvas透明,因此父版面背景(彩色图像)变得可见。 我想知道,删除了多少区域(比如50%或60%的位图)..有什么方法可以find它吗? //Erasing paint mDrawPaint = new Paint(); mDrawPaint.setAntiAlias(true); mDrawPaint.setDither(true); mDrawPaint.setStyle(Paint.Style.STROKE); mDrawPaint.setStrokeJoin(Paint.Join.ROUND); mDrawPaint.setStrokeCap(Paint.Cap.ROUND); mDrawPaint.setStrokeWidth(50); mDrawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); BlurMaskFilter mBlur = new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL); mDrawPaint.setMaskFilter(mBlur); private void doDraw(Canvas c) { c.drawBitmap(mBitmap, 0, 0,null ); } private float mX, mY; private static final float TOUCH_TOLERANCE = 1; void touch_start(float x, float y) { mPath.reset(); mPath.moveTo(x, y); mX […]

Android Canvas清晰透明

我试图从canvas上“擦除”。 就像清理canvas的非常简单的测试一样,我实现了以下内容: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.argb(140, 0, 0, 0)); canvas.drawColor(0, Mode.CLEAR); } Color.argb(140, 0, 0, 0)将此视图的视图设置为灰色。 drawColor(0, Mode.CLEAR)使屏幕完全变黑,而不是删除之前应用的调光。 这个想法来自这里

拖动并移animation布上绘制的圆圈

我正在开发一个Android应用程序,应该允许用户在canvas上绘制一个圆圈并拖动它。 我已经能够在上面绘制线条和圆圈。但我似乎无法拖动它。 是否可以在Android中拖animation布上绘制的对象?例如,如果我在圆圈内检测到触摸,如何从先前位置删除圆圈并将其移动到当前位置? 我已经尝试过invalidate() 。但是如果用户绘制了多个圆并想要移动所有这些,它就无法工作。

Android – 使用Flood-Fill时的Canvas Black

当我实现我的flood-fill类时,它将整个Bitmap变为黑色。 显然这不是预期的效果。 我查看了以下主题: https://stackoverflow.com/questions/24030858/flood-fill-is-coloring-my-entire-screen 黑色图像导致的洪水填充算法 在android上填充着色 从我所看到的,我正在做他们在这些解决方案中提出的所有内容,但它并没有让我find解决问题的方法。 所以要切入追逐,这里的代码有一些简短的解释。 XML 我正在使用相对布局并将两个ImageViews直接定位(堆叠)在彼此之上。 它们都具有相同的图像,这就产生了能够在图像上绘制的错觉。 但是,您实际上只是在透明覆盖上绘图。 …. … 帆布 然后我使用此代码创建我的Canvas ,并确保正确设置我的图层types。 public void setCanvas() { if(mFile != null && mFile.exists()) { mPictureBitmap = BitmapFactory.decodeFile(mFile.getAbsolutePath()); mBitmap = Bitmap.createScaledBitmap(mPictureBitmap, mImageView.getWidth(), mImageView.getHeight(), false); mPictureBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true); mBitmap = mPictureBitmap.copy(Bitmap.Config.ARGB_8888, true); mSceneBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true); mBlurBitmap = blurImage(mPictureBitmap); mCanvas = new Canvas(mBitmap); […]

如何使用Android Canvas将图像从一个点移动到另一个点

我正在开发一款游戏,在这款游戏中,我必须将Canvas上的图像从一个点移动到另一个点,而不仅仅是垂直或水平。 如何以这种方式移动图像?

Android – 从WebView绘制到PDFcanvas

我一直在Android上进行PDF打印工作时遇到麻烦。 我要做的是在WebView中渲染一些HTML,然后在PDFcanvas上绘制WebView内容,最后将PDF写入文件。 我遇到的问题是,当我绘制到PDFcanvas时,即使有足够的canvas,内容也会被剪裁。 我已经尝试使用.clipRect(Rect rect, Op op)调整canvas大小,这种方式有效,但不如我.clipRect(Rect rect, Op op) 。 我也不知道如何将HTML px测量值可靠地转换为PDF PostScript 1/72英寸测量值。 这是我正在使用的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView) this.findViewById(R.id.webView1); wv.loadUrl(“file:///android_asset/temp.html”); } public void button1onClick(View v) { //Create PDF document PdfDocument doc = new PdfDocument(); //Create A4 sized PDF page PageInfo pageInfo = new PageInfo.Builder(595,842,1).create(); Page […]

SurfaceHolder.setFormat(PixelFormat.RGBA_8888)在某些设备上失败,而在其他设备上失败

我有一个具有以下视图结构的游戏应用程序。 首先,我有一个空的FrameLayout,如下所示: FrameLayout game_frame_layout = new FrameLayout(getApplicationContext()); 然后我像这样添加两个视图: game_frame_layout.addView(customView); game_frame_layout.addView(butView); customView用于显示各种移动的游戏图形,而butView在移动的图形上显示一些ImageButtons。 customView是一个扩展SurfaceView的类CustomView的实例。 CustomView包含以下代码 void updateView() { final SurfaceHolder holder = getHolder(); holder.setFormat(PixelFormat.RGBA_8888); try { Canvas canvas = holder.lockCanvas(); if (canvas != null) { onDraw(canvas); holder.unlockCanvasAndPost(canvas); } } catch (Exception e) { e.printStackTrace(); } } line holder.setFormat(PixelFormat.RGBA_8888); 是最近添加的(见这里 )。 没有那条线,我的animation图形看起来是一种颜色太少的格式(通过实验我推断它是“RGB_565”),所以我得到了一些条带文物。 当我添加setFormat线时,我的三星Galaxy Tab 10.1(Android 3.1)上的图形显示完美(没有条带)……但是在其他三个设备上:三星GT-l9100(4.1.2),一个Nexus 7 ME370T […]

Android动态壁纸 – OpenGL与Canvas

我是一个相当“新手”的Android开发人员,我希望我的第一个项目之一是动态壁纸,但是我是否应该关注Canvas或OpenGL是否存在冲突。 作为新手,我知道我应该首先掌握Canvas,因为它更容易使用,但我更喜欢从我感兴趣的现实世界项目中学习,即使它有时有点倒退。 我之前以非常基本的方式使用过这两种方式,并且我理解它们的一般概念,但我不确定它们是如何转移到动态壁纸的领域。 我认为在动态壁纸上不需要OpenGL的全速运行,因为以最大FPS运行它会比电池耗尽更多,但与此同时我担心使用Canvas会导致滞后和在做更换主屏幕等事情时会口吃。 我一直倾向于使用OpenGL ES 2.0,以保持性能最佳,因为我对壁纸的初步想法涉及很多分层,我不确定Canvas是否有能力,但我想要一个更有经验的开发人员意见是否或者不是所有与使用OpenGL相关的额外工作(特别是关于动态壁纸,从我读过的内容)是值得的。

在android中查看onDraw(Canvas c)与draw(Canvas c)的对比?

我是android开发新手,我正在探索View 。 我遇到了两个方法onDraw(Canvas c)和draw(Canvas c) 。 请解释一下这两种方法的区别和用法? 使用图像更新canvas时,哪种方法可以提供更好的性能(FPS)?

获取Android视图上包含支持Bitmap的Canvas的点的像素颜色值

我试图找出在视图上给定点获取像素颜色值的最佳方法。 我有三种方式写入视图: 我用View.setBackgroundDrawable(…)设置了一个背景图片。 我使用Canvas.drawText(…) , Canvas.drawLine(…)等将文本,绘制线等写入支持Bitmap的Canvas 。 我通过将它们写入传递给View的onDraw(Canvascanvas)方法的Canvas来绘制子对象(精灵)。 这是我的类中的onDraw()方法,它扩展了View: @Override public void onDraw(Canvas canvas) { // 1. Redraw the background image. super.onDraw(canvas); // 2. Redraw any text, lines, etc. canvas.drawBitmap(bitmap, 0, 0, null); // 3. Redraw the sprites. for (Sprite sprite : sprites) { sprite.onDraw(canvas); } } 获得像素的颜色值以考虑所有这些来源的最佳方法是什么?