问题标签 [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 投票
5 回答
24178 浏览

android - 在 Android 中平滑滚动画布

我是安卓新手。

我正在视图的 OnDraw(Canvas canvas) 方法内的 Canvas 上绘制位图、线条和形状。我正在寻求有关如何实现平滑滚动以响应用户拖动的帮助。我已经搜索但没有找到任何教程来帮助我。

Canvas 的参考似乎是说,如果 Canvas 是从 Bitmap(例如称为 bmpBuffer)构造的,那么在 Canvas 上绘制的任何内容也会在 bmpBuffer 上绘制。是否可以使用 bmpBuffer 来实现滚动......也许将它复制回 Canvas 一次移动几个像素?但是如果我使用 Canvas.drawBitmap 将 bmpBuffer 绘制回移动了几个像素的 Canvas,bmpBuffer 不会被破坏吗?因此,也许我应该将 bmpBuffer 复制到 bmpBuffer2 然后将 bmpBuffer2 绘制回画布。

一种更直接的方法是将线条、形状等直接绘制到缓冲区位图中,然后将该缓冲区(带有移位)绘制到画布上,但据我所知,有各种方法:drawLine()、drawShape()等等不可用于绘制到位图......只能绘制到画布上。

我可以有 2 个画布吗?其中一个将从缓冲区位图构造并仅用于绘制线条、形状等,然后将缓冲区位图绘制到另一个画布上以在视图中显示?

我应该欢迎任何建议!

此处(以及其他网站上)类似问题的答案是指“blitting”。我理解这个概念,但在 Android 文档中找不到任何关于“blit”或“bitblt”的信息。Canvas.drawBitmap 和 Bitmap.Copy Android 的等价物吗?

0 投票
14 回答
58695 浏览

android - Android:如何检测滚动何时结束

我正在使用 GestureDetector.SimpleOnGestureListener 的 onScroll 方法在画布上滚动大位图。当滚动结束时,我想重新绘制位图,以防用户想要进一步滚动......离开位图的边缘,但我看不到如何检测滚动何时结束(用户抬起手指从屏幕上)。

e2.getAction() 似乎总是返回值 2 所以这没有帮助。e2.getPressure 似乎返回相当恒定的值(大约 0.25),直到最后一次 onScroll 调用,此时压力似乎下降到大约 0.13。我想我可以检测到压力的降低,但这远非万无一失。

必须有更好的方法:有人可以帮忙吗?

0 投票
3 回答
49824 浏览

android - 画布上的图像到 JPEG 文件

我正在画布上绘制 2D 图像。

我想将画布上显示的图像保存为 JPEG 文件,我该怎么做?

0 投票
3 回答
39589 浏览

android - Android View.onDraw() 总是有一个干净的画布

我正在尝试绘制动画。为此,我扩展了 View 并覆盖了 onDraw() 方法。我期望的是,每次调用 onDraw() 时,画布都会处于我留下的状态,我可以选择清除它或只绘制它的一部分(这就是我使用 SurfaceView 时的工作方式) 但每次画布回来时都已经清除了。有没有办法我不能清除它?或者也许将之前的状态保存到一个位图中,这样我就可以绘制那个位图然后在它上面绘制?

0 投票
3 回答
4718 浏览

java - Android Canvas 中的复合操作

我刚开始进行 Android 开发,我来自 JavaScript/HTML 世界,所以我目前正在研究 Android SDK 的可能性。

HTML 5 画布支持复合操作(参见此处)。

这在 Android Canvas 中可行吗?我扫描了 Canvas 类的 API,但找不到任何有用的东西。我至少需要复合操作“source-in”或(如果不可能的话)“source-atop”。

0 投票
2 回答
17315 浏览

android - 在 Android 中以一定角度(例如倒置)绘制文本

我正在尝试在 Android 中构建自定义时钟视图。见图片http://twitpic.com/1devk7

到目前为止,为了绘制时间和小时标记,我一直在使用 Canvas.rotate 方法来获得所需的效果。但是,请注意,由于绘制角度的原因,很难解释时钟下半部分的数字(例如 6 还是 9?)。

使用 drawText 时,是否可以以 45/90/180 度绘制文本,以便在我的 onDraw 方法完成后所有文本都显示为直立?

0 投票
3 回答
7750 浏览

android - Android 绘画/画布问题;绘制平滑曲线

在 Android 中,当我用手指在触摸屏上绘图时,如何获得平滑的曲线而不是圆点或圆?我正在使用以下代码-

0 投票
2 回答
204410 浏览

android - Android Canvas.drawText

我有一个视图,我正在使用 onDraw(Canvas canvas) 方法中的 Canvas 对象进行绘制。我的代码是:

问题是文本没有通过背景显示,我做错了什么?如果我删除 canvas.drawPaint(paint) 和 paint.setColor(android.R.color.black) 你可以在屏幕上看到文字.....

0 投票
7 回答
80998 浏览

android - 测量要在 Canvas 上绘制的文本宽度(Android)

是否有一种方法可以根据用于绘制它的 Paint 使用 drawText() 方法返回要在 Android 画布上绘制的文本的宽度(以像素为单位)?

0 投票
1 回答
14936 浏览

android - lockCanvas 是什么意思(详解)

我已经开始在 Android 中绘制图形了。那里有很多示例应用程序,但我经常看到的一件事是 lockCanvas。有人可以更详细地解释一下,因为我真的不明白,而且我认为理解未来的编程很重要?

一个例子:

这就是我现在所拥有的。我应该如何解释这个正确的?同步有什么作用?为什么将画布对象分配给 getHolder 和 lockCanvas 很重要?

这部分也令人困惑:

为什么这是必要的?我真的需要更详细的解释。:)