canvas教程

android下画图不显示的问题(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-26 10:48 我要评论( )

可以看一下view的源代码, publicclassViewimplementsDrawable.Callback,KeyEvent.Callback,AccessibilityEventSource{ //.... publicvoiddraw(Canvascanvas){ //.... onDraw(canvas); //.... } /** *Implementthis

可以看一下view的源代码,
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
    //....
    public void draw(Canvas canvas) {
         //....
         onDraw(canvas);
         //....
    }

    /**
     * Implement this to do your drawing.
     *
     * @param canvas the canvas on which the background will be drawn
     */
    protected void onDraw(Canvas canvas) {
    }
}

我们在自己的继承类中多态实现了onDraw()
这样流程就清楚了,我们知道view只有在onMeasure和onLayout调用,或者手动调用invalidate方法时才会开始重绘。来说一说楼主的逻辑吧
如果将drawLine方法直接放在onDraw里面,此时在第一次加载view或者手动调用invalidate()时都会发生绘制,如楼主所说可以看到线条,
但是如果按照楼主第二种方法手动调用drawLine(),此时没有发生重绘操作,即父view的draw()根本就没有发生回调,怎么可能有图形出现呢。
绘图不是只要在canvas中画一下就能完事儿的,每次绘图都涉及到背景重绘,图层等很多元素,所以单独drawLine一下是没有用的

2012-10-19 10:12:56 AlecVon 3楼

...你在ondraw()里面调用drawLine再试试

2012-10-18 17:02:24 IThink_88 1楼

onDraw()里面调用drawLine之前我试过是可以的。但是让外部类调用就是不行,不知道为什么。难道android画图就非得在onDraw()里面一次性画完?

2012-10-19 08:48:31 yxz329130952 2楼

引用 3 楼  的回复:可以看一下view的源代码,
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
    //....
    public void draw(Canvas canvas) {
         //....
         onDraw(canv……
嗯,听了你的解释,我觉得你说得对。android每次必须回调onDraw才能画出图形。但是有没有动态绘图的方法呢?即,如果我需要可以直接在原来的canvas上再绘制一个图形,而原来的图形保持不变?望指教。

2012-10-19 16:02:52 yxz329130952 4楼

每次调用onDraw都会重绘,所以要想累加绘制,我们必须要有一个全局的东西保存已经绘制的内容。但是楼主使用了Canvas来保存旧数据是不行的,因为每次绘制的canvas是新生成的,你保存的canvas根本没用上。
提供给你两种方法,一种是用数组保存每次绘制的线条,这种方法一般对单调的绘图比较有效,比如只绘制线段,只要在数组中保存各个线段的起始点就OK,每次在onDraw中全部在绘制一次,或者就使用一个bitmap对象保存内容,
//先绘制到bitmap上
Canvas tmp = new Canvas(mBitmap);  
tmp.drawLine(mFirstX, mFirstY, mSecondX, mSecondY, mPaint);  
//再把bitmap画到canvas上  
canvas.drawBitmap(mBitmap, 0, 0, mPaint); 
mBitmap就是我们保存绘制内容的全局对象

2012-10-19 16:59:54 AlecVon 5楼

引用 5 楼  的回复:每次调用onDraw都会重绘,所以要想累加绘制,我们必须要有一个全局的东西保存已经绘制的内容。但是楼主使用了Canvas来保存旧数据是不行的,因为每次绘制的canvas是新生成的,你保存的canvas根本没用上。
提供给你两种方法,一种是用数组保存每次绘制的线条,这种方法一般对单调的绘图比较有效,比如只绘制线段,只要在数组中保存各个线段的起始点就OK,每次在onDraw中全部在绘制一次,或者就……
嗯,谢谢!

2012-10-19 21:03:50 yxz329130952 6楼

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Canvas与ValueAnimator

    Canvas与ValueAnimator

    2017-04-28 18:00

  • Android Bitmap和Canvas学习笔记(转)

    Android Bitmap和Canvas学习笔记(转)

    2017-04-28 17:00

  • HTML5 canvas 作画板画图 可以做电子白板

    HTML5 canvas 作画板画图 可以做电子白板

    2017-04-27 12:02

  • 21天学习android开发教程之SurfaceView与多线程的混搭

    21天学习android开发教程之SurfaceView与多线程的混搭

    2017-04-27 12:00

网友点评
8