问题标签 [android-canvas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
391 浏览

android - 使用矩阵与创建新位图

我正在开发一款安卓游戏,并试图尽可能优化它的速度。我想知道,在画布上绘制时,在 onDraw 之前创建一个新的位图是否比给画布提供位图和矩阵并让它在 onDraw 期间缩放图像更快。

0 投票
1 回答
12589 浏览

android - 如何设置图像以填充画布

我正在尝试设置一个 png 图像来填充画布的背景,同时仍保持其纵横比。我首先将其转换为位图:然后使用 Canvas 类中的 setBitmap 方法设置背景:

http://developer.android.com/reference/android/graphics/Canvas.html#Canvas(android.graphics.Bitmap )

但是,一旦我转到调用此扩展视图类的 Activity,我就会收到一条错误消息,说我的应用程序意外停止。我也尝试过使用 Canvas 和 Bitmap 类中的其他一些函数,但似乎没有任何效果。

请问最好的方法是什么?我在 android 开发者网站上读到有一种方法可以设置图像,使其成为画布,然后可以在其中绘制其他图像,但我无法弄清楚如何做到这一点。

谢谢!

0 投票
16 回答
83554 浏览

android - 如何使用android画布绘制一个只有左上角和右上角的矩形?

我找到了一个所有 4 个角都是圆形的矩形的函数,但我只想让前 2 个角变成圆形。我能做些什么?

0 投票
2 回答
1804 浏览

android - ANDROID - 地图视图

有人可以帮我一些关于我正在尝试构建的 mapview 的事情。我有一个渲染器,它采用画布并在其中绘制位图。我创建了一个视图并在构造函数中创建:

在 onDraw 方法中我有这个:

现在我想实现平移和缩放(目前我在没有保存瓷砖的情况下工作)这是我的 onTouch:

mScaleDetector.onTouchEvent(ev);

这是我想要的和我遇到的问题:

  1. 当我平移时,我想以像素为单位计算距离,这样我就可以告诉我的渲染器何时再次渲染图像。这是如何实现的?通过记住 ACTION_DOWN 上的坐标并与 ACTION_UP 中的新坐标进行比较?
  2. 当平移完成(并且图像被重新渲染)时,我想将画布(图像)设置回其原始位置。目前它保持窗格(因为canvas.translate?)
  3. 如何处理缩放手势?使用此代码用手指进行缩小时,图像被“拖动”到左上角...

我是 android ( 和 java ) 的新手,所以非常感谢任何帮助。

0 投票
3 回答
4504 浏览

android - 为什么 lockCanvas() 慢?

我正在实现一个 SurfaceView 子类,我在其中运行一个单独的线程来绘制到 SurfaceHolders 画布上。我在调用 之前和之后测量时间lockCanvas(),我从大约 70 毫秒到 100 毫秒。有谁可以指出我为什么会得到如此高的时间?这里是代码的相关部分:

0 投票
2 回答
1792 浏览

android - Android 画布旋转:需要旋转 *by* x 度而不是 *to* x 度

Canvas 中旋转方法的文档指出,degrees 参数是“旋转量,以度为单位”。但是,根据我的经验,这是具有误导性的。例如,如果我在位图处于规范直立方向(即 theta = 0,即 12:00)时调用 rotate(45),则位图会尽职地相对于 0 旋转 45 度。如果我再次调用要旋转(45),图像不会[似乎]移动。如果我随后调用 rotate(-45),则位图不会返回其原始方向,而是相对于 0 旋转 -45 度。换句话说,度数参数是绝对的(“旋转到 45 度” ),而不是文档所暗示的相对(“旋转 45 度”)。这正是我不想要的。

从给定的方向,我希望能够将我的位图旋转+/- x 度,其中 + 当然是顺时针旋转。我想,伪造这个的一种方法是在我旋转到“新 0”(即它实际上占据 12:00)的任何地方进行下一次旋转。我的问题是:我该怎么做,或者,有没有更好的方法来完成我想要的?

非常感谢。

0 投票
1 回答
317 浏览

android - 单击多个正确的图纸后如何执行操作?

我正在尝试开发一个应用程序,如下所示。

目前,每次我的画布显示一个圆圈,如果您单击最近显示的圆圈,用户将被引导到下一个级别。如果用户没有点击最近的应用程序关闭。

现在我的要求是,我想每次在画布上的不同位置绘制两个圆圈,用户必须单击最近显示的两个圆圈。单击这两个圆圈后,仅应根据单击的正确或错误执行操作。但是只有在单击一个圆圈后才会执行该操作。但我希望控件等到我完成点击两个圆圈,即两个圆圈,然后采取相应的行动。

任何人都可以在这方面提供帮助....?请。预先感谢您的帮助...!

0 投票
1 回答
8227 浏览

android - 安卓画布背景

我的视图背景中有很多小图像。每个图像的位置取决于屏幕分辨率。还有其他对象在 onToch ivent 之后动态重绘。它在没有背景的情况下工作正常,但是当我尝试在 onDraw() 中绘制它时,我得到 KeyDispatchingTimedOut 错误。当我的应用程序首次启动时,如何在单个位图中构成背景,或者有其他更好的解决方案?

0 投票
2 回答
1386 浏览

android - Android - 如何在没有抖动/抗锯齿的情况下缩放文本 - 我想要像素化文本

对于一个实验,我想在画布上绘制像素化文本。

这是我到目前为止所拥有的:

这达到了我想要的大小,但是文本是抗锯齿和抖动的,这不是我想要的。

我得到的最接近的是这样做:

它以我想要的方式水平缩放文本,但不幸的是没有 text.setTextScaleY-function ...

有任何想法吗?

0 投票
1 回答
816 浏览

java - 使用可调整大小/可重新定位的项目覆盖相机,而不是单击将图像合并在一起

我需要让用户在屏幕上移动图像并调整其大小。

那部分我已经完成了。

我无法弄清楚的部分是如何在拍照时冻结照片图像上的可移动/可调整大小的图像,而不是将两者合并在一起以制作 1 个位图。

我真的没有任何“代码片段”要发布。我只是希望有些人以前可能有过这方面的经验,并且可能会有所了解。

编辑。我知道当我拍照时,图像已经冻结在屏幕上。在那种情况下,我捕获了画布上的项目位置。我需要做的是拿走我已经画了一些东西的画布,并以某种方式将其覆盖到另一个我也分配了照片的画布上。

编辑#2

好的女士们先生们。我想到了。这是为相机制作叠加层的代码(如 mmeyer 所述。)

祝大家好运。我希望这有助于避免很多头痛。

简而言之:为您的图片制作一张位图。
为您的叠加层制作一个画布并将您的东西扔到那里
获取您的叠加层画布的副本
.setBitmap() 该画布并将其设置为您的照片位图。
制作一个 RelativeLayout 并向其中添加一个新的 ImageView。
在 ImageView 上绘制画布。
然后找出RelativeLayout 的布局参数。

现在我想了想,也许您可​​以将顶层画布设置为您的照片位图……然后保存它……您可以自己测试。