gpt4 book ai didi

android - 在 Android 中平滑滚动 Canvas

转载 作者:IT老高 更新时间:2023-10-28 22:18:11 25 4
gpt4 key购买 nike

我是 Android 新手。

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

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

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

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

我应该欢迎任何建议!

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

最佳答案

我似乎找到了答案。我已将大部分绘图代码(以前在 onDraw() 中)放在一个新的 doDrawing() 方法中。此方法首先创建一个比屏幕大的新位图(大到足以容纳完整的绘图)。然后它会创建第二个 Canvas 来进行详细绘图:

    BufferBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888);
Canvas BufferCanvas = new Canvas(BufferBitmap);

doDrawing() 方法的其余部分用于详细绘制到 BufferCanvas。

整个 onDraw() 方法现在如下所示:

    @Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(BufferBitmap, (float) -posX, (float) -posY, null);
}

位置变量 posX 和 posY 在应用程序的 onCreate() 方法中初始化为 0。应用程序实现 OnGestureListener 并使用 OnScroll 通知中返回的 distanceX 和 distanceY 参数来增加 posX 和 posY。

这似乎是实现平滑滚动所需的全部内容。还是我忽略了什么!?

关于android - 在 Android 中平滑滚动 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com