【发布时间】:2015-09-14 13:19:32
【问题描述】:
我正在尝试制作一个应用程序,您可以在其中拍摄图像并将“贴纸”(多个位图图像)应用于图像。然后允许用户转换(平移、缩放和旋转)每个单独的“贴纸”。我目前正在使用SurfaceView 和Canvas 将每个位图绘制到Canvas。它允许用户直接转换位图,并将该位图绘制到onDraw() 函数中的Canvas 上。虽然目前,我只能有效地操纵最后绘制的“贴纸”。
我想让它让用户可以直接操作每个单独的“贴纸”。所以我目前的想法是我必须创建多个贴纸图层(即 Photoshop 图层),并在onTouchEvent() 期间确定正在触摸哪个贴纸,将该图层带到堆栈的前面并操作该图层。为此,我认为我必须创建多个Canvas 对象以用作图层,然后将每个“贴纸”绘制到单个Canvas。然后onTouchEvent 将在每个Canvas 上调用getDrawingCache(),通过在该绘图缓存上调用getPixel() 来检测正在触摸哪个贴纸,并确定像素是否透明。
我的问题本质上是如何将所有这些Canvas 对象绘制到SurfaceView?这是获得我想要的效果的最佳方式吗?
我知道SurfaceView 只需要一个Canvas,因此我必须事先将每个Canvas 绘制到一个Canvas 上?如果是这样的话,当我合并它们时,这些Canvas 对象中的每一个是否会保持它们的转换完好无损?或者我是否必须在每个 Canvas 对象中操作位图而不是 Canvas 本身?
【问题讨论】:
标签: android bitmap android-canvas surfaceview layer