繁体   English   中英

使用Android进行2D绘图

[英]2D drawing with Android

我试图了解Android绘图的工作原理。

我希望有人可以解释绘图组件如何相互关联(视图,可绘制,画布,位图)

这一切看起来都很混乱,文档也没有很好地解释它。

您通过onDraw()在View中注入的Canvas对象中的位图是代表整个显示,还是只是视图绘制的块?

drawable做了什么,它们只是将一组命令封装到Canvas对象的对象吗?

我希望有人可以帮助我基本了解它是如何工作的,我没有eny java背景只有Action脚本和C#(silverlight)。

这是一个非常模糊的问题,但我会试一试。 这是我在这个网站上的第一个答案,我绝不是专家,但我发现自己在Android中做了很多修补。

根据我的阅读和经验,每个视图都有一个位图,用于在屏幕上绘制视图。 每个视图也有一个画布。 画布允许程序员控制绘制到该位图上的内容。

每个View对象都有一个onDraw(Canvas c)方法,用于绘制它。 如果你想自己绘制一些东西,你可以通过扩展View来创建View类的子类,你可以覆盖onDraw(Canvas c)方法来绘制你想要的任何东西。 您使用作为onDraw()方法的参数提供的Canvas对象绘制到视图上。

drawable只是一个可以绘制的对象。 这可以是静止图像(bmp,png,jpg等),图标,动画gif等。通常可以从要绘制到屏幕上的现有图像创建可绘制图像。 这分两步完成:将图像包含到项目中,然后绘制图像。

要将图像包含到项目中,只需将其拖到Eclipse中项目目录中的res / drawable文件夹之一即可。

将图像文件包含到项目中后,将使用该图像文件的唯一ID自动更新R.java文件。 要在代码中将图像文件作为drawable加载,您可以执行类似Drawable d = getResources().getDrawable(R.id.imagefile); 要在画布上绘制它,可以使用d.setBounds()方法设置大小和位置,并且可以在onDraw()方法中使用d.draw(canvas)在视图中绘制它。

onDraw()方法提供的canvas对象具有许多用于绘制到视图的有用函数。 玩弄它,这是了解如何使用它的最佳方式。 另外,请不要忘记查看Android开发者网站以查看所有方法的完整列表。

你究竟想要绘画什么? 如果你想尝试做类似游戏的东西,你应该考虑使用SurfaceView类。

以下是自定义视图类的示例:

public class CustomView extends View{
   public void onDraw(Canvas c){
      c.drawColor(Color.RED);
   }
}

这个视图在创建时应该只绘制自己的红色。

View是用户与之交互的GUI对象。 它与Canvas相关联。 你可以在onSizeChanged()方法中获得它的尺寸(你需要在自定义视图中覆盖它),然后在它的onDraw()方法中绘制它的Canvas(同样,你需要覆盖它)

Canvas是您用于绘图的对象。 Canvas对象绘制到Bitmap对象上。 Canvas通常代表整个屏幕,所有视图可能共享相同的Canvas。 当调用onDraw()时,Canvas将应用一个变换矩阵,并设置了剪裁区域,以便渲染调用将使用0,0作为视图的左上角,并且您的绘图将是被限制在视图内。

注意:不要使用canvas.getWidth / Height()从view.onDraw()中获取可绘制区域; 这将返回整个屏幕的大小,而不是你想要的。 请改用view.onSizeChanged()。

您还需要一个Paint对象,该对象将传递给大多数Canvas绘图方法。 Paint对象包含颜色,字体,填充样式和用于渲染的其他数据。

Bitmap是可以绘制的东西。 它是物理屏幕或内存,是Canvas的基础。 我相信Canvases和Bitmaps之间存在一对一的对应关系。 canvas.setDevice()方法可用于将Canvas绑定到Bitmap,或者绑定可以在Canvas的构造函数中完成。 我不相信有一种方法可以从Canvas中检索Bitmap。

Bitmap也可以用作源并呈现给Canvas。

Drawable对象不是可以绘制到(目标)的东西,而是渲染到Canvas(源)的东西。 通常,Drawables取自您应用程序的资源,但也可以从网络下载或从您的图库等中检索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM