首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android Canvas让小弟我很困惑

2012-09-14 
android Canvas让我很困惑这篇文章请大家仔细看,多动手试试,多想想了 因为可能有些地方 有点说不清楚。大家

android Canvas让我很困惑
      这篇文章请大家仔细看,多动手试试,多想想了 因为可能有些地方 有点说不清楚。

      大家都知道在我们要显示一个自己定义的View有2中方法,第一种:是直接new 一个我们的View对象并且setContentView(myView); 假如我们自己定义的View对象叫myView  其实我们在Activity里边就2行代码就搞定了





就是 一个图像旋转的例子 我们上代码吧。
testActivity我们的Activity类
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<testView.moandroid.testView
android:id="@+id/testView"
android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     tileSize="12"/>
</FrameLayout>

testView类 这个类就是我们自己定义的View类了 这里我们把它放在布局文件中加载进来

Bitmap的源码里有这样一个变量


  所以我觉得那个onDraw(Canvas canvas)方法里边的那个Canvas对象和我们自己new的是有区别的,大家可以在试试 直接 用onDraw方法里边的 Canvas对象 调用 宽度和高度试试
canvas.getWidth   canvas.getHeight  得到的 是 320 和 480 也就是我屏幕的高和宽。如果你自己定义 new 一个 Canvas  这样 Canvas canvas = new Canvas()  你在用这个canvas调用高度和宽度 试试看, 我试了一下我发现者 调用高度和宽度后边的代码都不会执行了,很是奇怪呵呵,下面在来一点 关于UI的说明,参考了Android native draw 这篇文章点击这里可以查看这篇文章 http://hi.baidu.com/xxw8393/blog/item/308a841e89b1fbfe1bd5769a.html
  
   在 Android 上,有一個 graphic engine ,称为 Skia 。 Skia 的功能约等于 Cairo ,功能上相似,但 Skia 没有支持 Cairo, Android 的 Java Code 都是透過 Skia 进行绘图,而 Skia 主要的 class type 是 SkCanvas ,所的有绘图功能都建立在这个 class 上。因此,如果我們能在 native code 取得 Android 所建立的 SkCanvas ,能直接使用 Skia 对画面做輸出。

     在 Android 的 UI 设计里,每一個 UI component 都是一個 view ;例如: button 、 label 等等,全是 view 。当Android 要画一个view 時,会呼叫 view 的 onDraw() 画出 component 的外觀。而 Android 会将一個 android.graphics.Canvas type 的物件,当成参数給 onDraw() 。 onDraw() 就在这个 canvas 上输出 component 的外观,例如画一个button 。这个 canvas 其实就对映到一个 SkCanvas ,我们只要在这个 canvas 上作画,就等于画到画面上的一个区域。 不知道 能不能是大家理解的更深刻一点。 还有这篇文章大家一定看看吧 CSDN 一醉千年大哥的 有深度,http://blog.csdn.net/yili_xie/archive/2009/11/12/4803565.aspx 在它的文章中也提到这件事情,大家可以仔细阅读一下。

  今天又正好看到杨丰盛老师的 双缓冲的例子 我在这里把那个自定义的View类贴出来
/* 将mBitQQ绘制到mSCBitmap上 */mCanvas.drawBitmap(mBitQQ, 0, 0, mPaint);


这句 为什么 又跑到 onDraw方法 指定位图然后显示到屏幕上。 呵呵。发现论坛上也有一些人 困惑这里。 希望高手能表达一下观点,最好整理一篇文章出来 呵呵,让我们这些新学的菜鸟 更明白些。期待大家自由表达自己的观点。 1 楼 gaogaf 2011-01-19   如果你写过框架一类的东西,你就不会晕了。


把文字画到屏幕上了吗 ?为什么还要到 onDraw里边在指定位图再画一次 ? 刚开始晕的不行 我不知道这是为什么 在这里我就不贴代码了 其实大家可以试试的 比如我自己定义一方法 我把所有的画图操作都放到我自己定义的方法里边来,我在自己 new 一个Canvas对象 并且调用它的drawBitmap 绘制位图 试试看。我就不用onDraw方法来画图。我也不用onDraw方法提供的 canvas对象。这里我就不演示了 大家 尽管自己疯狂的试试吧。 我想结果肯定是 不是异常,就是图画不出来 前提是你得用 自己 new 一个Canvas对象。就是你得用自己new 的Canvas对象去调用drawBitmap方法。


看了这一段,觉得你根本就没明白是怎么回事。
除了onDraw参数里的canvas,自己定义的一切Canvas都是浮云。
之所以自己定义,完全是为了得到一个Bitmap,然后再Draw到onDraw里的Canvas上。 2 楼 forecle 2011-10-18   1,楼说得有理!

热点排行