【问题标题】:How to Drag a bitmap over another Bitmap on Canvas with Surfaceview in Android如何在 Android 中使用 Surfaceview 将位图拖到 Canvas 上的另一个位图上
【发布时间】:2015-05-08 06:10:36
【问题描述】:

我不熟悉在 Android 中使用 CanvasSurfaceView

我正在尝试使用 Surfaceview 实现一个带有 canvas 的应用程序,并且我想在该视图上拖动位图。我可以拖动任意数量的位图.

我在位图中有 2 种不同的尺寸,如下图所示:

IMAGE

要求

  1. 大尺寸 (Bmp1) 位图 - 1

  2. 尺寸/分辨率小且相等的位图(A、B、C、D、E.....) - n(数量无限制)

3.我必须将A/B/C/...拖到Bmp1。当任何小的Bmp到达Bmp1并且它是否在其相关端口(A/B/C/.... ) 应该建立一个连接。

4.所以,我必须将任何 BMP 拖到任何其他 BMP 上

问题

  1. 当我将一个小位图拖动到大位图时,当它们关闭时,它们的小位图在中心大重叠,并且无法单独拖动小位图,直到移动大位图。

  2. 当两个小位图即将关闭时,上位图重叠在下位图上,无法分开。

如何避免这些问题?

【问题讨论】:

    标签: android canvas bitmap surfaceview


    【解决方案1】:

    正常碰撞检测...使用for循环遍历其他位图位置...在此循环中只需检查

    if(Math.abs(draggedBMP.posX-otherBMP.posX)

    或类似的东西......“AABB”

    【讨论】:

    • 但是我有大量的位图。所以,如果我使用 for 循环,它可能会影响性能......
    • 那又怎样?你只需要检查你正在拖动的一个位图是否发生碰撞......而且你不能有那么多的位图老兄......10 000次迭代是好的......我猜不止是好的......顺便说一句,如果你也有许多人有可能遇到 OOM 异常
    • 您的建议对于两个位图是否重叠很有用。但我需要避免重叠的解决方案。这意味着如果BmpA 来到BmpB,那么BmpB 可以拖过BmpA。这是我的要求。
    • ahhh 好的,你的帖子中没有那么清楚......所以给他们一个 z 顺序:两个就足够了......当你拖动一个位图时,给它 1 所有其他人的 z 顺序0 ...所以当您绘制它们时,只需询问它们有哪个 zorder 如果 0 就绘制它们,如果 1 记住它们不要绘制它,而是等到所有其他的都被绘制并作为最后一个绘制它
    • 对不起,我没有告诉你,如果可能的话,你能详细说明一下吗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多