在Android中绘制漂浮在另一个上的图像

时间:2011-09-17 16:41:48

标签: android android-layout android-imageview android-image android-canvas

我希望能够在我的应用中动态地将图像放在另一个图像上。 将第一个图像视为背景,将其他图像视为顶层,我还需要通过代码移动那些顶级图像(在屏幕上更改它们的x和y)。

想象一下,例如,一个用户放置鱼类和海洋动物的大海,然后那些海洋动物开始在屏幕上移动:它就像那样。

我该怎么做?如果您不知道但记住任何简单的程序或演示,那么也非常欢迎!

谢谢!

1 个答案:

答案 0 :(得分:2)

当然,有多种方法可以做到这一点,但我想说最好的方法是创建一个自定义的View(来自View的类)并处理您的位图绘图和所有触摸事件。

要加载Bitmap并跟踪所有位置(然后将它们绘制到onDraw中的画布中),需要编写很多代码,但是如果你开始真的很小的话只需允许在屏幕上绘制和拖动一个图像,您就可以在此基础上构建并保持代码的有序化。

您需要在自定义onDraw(Canvas)中覆盖onTouchEvent(MotionEvent)View。如果您将图片作为资源包含在项目中,则会使用BitmapFactorydecodeResource方法加载位图,并且您需要记得在位图上调用recycle时你不再使用它们了。

onDraw中,使用Canvas.drawBitmap将位图绘制到特定位置的画布上。您可以选择此方法的两个重载,一个将位图的顶部和左侧坐标作为float s(因此不执行缩放或拉伸),另一个采用目标和源矩形执行缩放,拉伸和放置。

我总是使用后者,因为它给了我更精细的控制。如果选择此路线,则需要为每个正在绘制的图像保留两个Rect个实例和一个Bitmap实例,在触摸事件中更新它们并将它们绘制到绘图事件中的画布上。

当视图中的某些内容发生变化时(如触摸事件的情况),请调用invalidate()方法,框架将知道重绘所有触发onDraw方法的内容。