[英]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.