`

Android SurfaceView onDraw()绘图问题

 
阅读更多

 

在继承SurfaceView的类中即使重写了onDraw()方法也是没有用的,因为SurfaceView虽然继承自View,但并没
重写onDraw(),其子类可以重写onDraw()但并不能自动调用。
解决办法:
首先SurfaceView的子类XXX要 implements SurfaceHolder.Callback,然后定义private SurfaceHolder sh = null;
在其构造函数中:
public XXX(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
sh = getHolder();
sh.addCallback(this);
}
//自定义绘制函数
public void doDraw(){
Paint p = new Paint(); // 笔触
p.setAntiAlias(true); // 反锯齿
p.setColor(Color.RED);
p.setStyle(Style.STROKE);
Canvas canvas = sh.lockCanvas();
canvas.drawColor(Color.WHITE);//背景
canvas.drawRect(10, 10, 100, 100, p);
sh.unlockCanvasAndPost(canvas); //提交绘制内容

}
在需要绘制的地方调用doDraw()即可。
//继承自view的onDraw方法
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint p = new Paint(); // 笔触
p.setAntiAlias(true); // 反锯齿
p.setColor(Color.RED);
p.setStyle(Style.STROKE);
canvas = sh.lockCanvas();
canvas.drawColor(Color.WHITE);//背景色
canvas.drawRect(10, 10, 200, 200, p);
sh.unlockCanvasAndPost(canvas); //提交绘制内容
}
在需要绘制的地方调用onDraw(null)即可。
注:重写SurfaceView的draw(),最终还是调用的onDraw(),但是调用draw(null)时会有异常。

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Android SurfaceView实现动画效果

    7. **兼容性问题**: 虽然SurfaceView提供了高效绘制的能力,但它在不同版本的Android系统中可能有不同的行为。因此,进行跨版本测试是必要的,以确保动画在各种设备上表现一致。 通过以上知识点,开发者可以构建出...

    android View、SurfaceView Demo

    它提供了基本的绘图功能,通过onDraw()方法来绘制内容。View的操作通常在主线程中进行,因此受到UI线程同步限制,不适合处理复杂的、耗时的图形操作,以免阻塞UI更新,导致应用无响应(ANR)。 **SurfaceView** ...

    SurfaceView实现图片缩放,移动加标记

    总的来说,这个项目涵盖了Android开发中的多个关键知识点,包括`SurfaceView`的使用、手势识别、图片处理、自定义绘图以及邮件发送。通过这个项目,开发者可以学习到如何在Android应用中实现类似地图应用的交互功能...

    android surfaceView实现的触屏产生烟花程序

    开发者通常会在SurfaceView的子类中重写`onDraw()`方法,进行绘图操作,并通过`Canvas`对象绘制图形。 在这个触屏烟花程序中,我们可以推测以下几个关键知识点: 1. **SurfaceHolder**: SurfaceView有一个内部类...

    Android SurfaceView抽奖转盘

    首先,`SurfaceView`是Android视图系统的一部分,它提供了一个独立于主线程的绘制环境,允许开发者在单独的线程中进行高效率的图像处理,避免了UI线程阻塞导致的卡顿问题。这使得`SurfaceView`特别适合用来创建动态...

    Android surfaceview实现幸运大抽奖.zip

    总的来说,这个压缩包提供了一个很好的学习机会,可以帮助开发者深入理解Android的SurfaceView以及如何利用它来创建复杂的动画效果,对于想要涉足游戏开发或需要高性能绘图功能的Android开发者来说,这是一个非常...

    Android SurfaceView添加组件view不被组件覆盖.rar

    SurfaceView通过创建一个单独的SurfaceHolder来处理绘图操作,这个holder提供了回调方法,如`surfaceCreated()`, `surfaceChanged()`, 和 `surfaceDestroyed()`,开发者可以在这些方法中进行初始化、调整和清理工作...

    使用surfaceview实现自由手绘

    这通常通过`postInvalidate()`或者`holder.unlockCanvasAndPost(canvas)`来实现,它们会触发`onDraw()`方法,然后在该方法中使用`canvas`进行实际的绘图操作。 总的来说,使用`SurfaceView`实现自由手绘是一个涉及...

    android surface 背景透明,图片拖拉

    5. **Canvas与绘图**:SurfaceView的`onDraw()`方法中,我们可以获取到一个Canvas对象,通过这个对象我们可以绘制Bitmap以及其他图形元素。在拖动操作中,我们需要清除Canvas(`canvas.drawColor()`),然后根据新的...

    surfaceview实现抽奖转盘

    SurfaceView在Android开发中是一种特殊的View,主要用于处理高性能、低延迟的图形绘制,例如游戏、视频播放或像抽奖转盘这样的复杂动画。SurfaceView通过创建一个独立的Surface,并将其渲染到窗口上,允许UI更新与...

    安卓头像制作图片圆角剪裁相关-Android圆形相机预览窗口圆形SurfaceView.zip

    这个"安卓头像制作图片圆角剪裁相关-Android圆形相机预览窗口圆形SurfaceView.zip"的压缩包,就包含了实现这一功能的相关代码示例。下面我们将深入探讨这个主题。 首先,我们来理解"圆形SurfaceView"的概念。在...

    surfaceView用法例子

    5. **自定义绘图**: SurfaceView可以重写其子类的`onDraw()`方法来自定义绘图逻辑,从而实现各种复杂的动画效果或游戏场景。 下面是一个简单的SurfaceView使用例子: 首先,创建一个继承自SurfaceView的类,并实现...

    surfaceView实现手写板重播绘制轨迹,保存为Bitmap

    `SurfaceView`是Android系统提供的一种特殊的视图,它的主要特点是拥有自己的独立绘图表面,并且绘图操作是在一个单独的线程中进行的,这使得`SurfaceView`非常适合处理高频率、低延迟的图形绘制,比如手写板、游戏...

    Android 构建游戏框架View与SurFaceView的区别

    View提供了绘制功能,通过onDraw()方法进行自定义绘图。然而,由于View的渲染机制,它并不适合进行频繁的、高性能的图形更新。因为View的绘制过程发生在UI线程中,当进行复杂的图形操作时,可能导致UI线程阻塞,从而...

    基于android studio的SurfaceView应用设计

    在Android开发中,SurfaceView是一个重要的视图组件,它提供了在主线程之外进行绘图的能力,使得复杂的动画或视频播放等高性能图形操作得以流畅执行。本项目实例将深入探讨如何在Android Studio环境下利用...

    mini-bird-android-surfaceview

    《迷你小鸟Android SurfaceView游戏开发详解》 在Android游戏编程领域,SurfaceView是开发者们常用的一个组件,尤其对于初学者来说,它是一个很好的起点。本文将深入探讨如何使用SurfaceView来构建一个简单的“迷你...

    Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果.rar

    本示例代码"Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果"着重展示了如何利用SurfaceView来创建动态、交互式的UI组件,尤其是模拟墨迹天气应用中的风车动画效果。SurfaceView是Android中用于处理...

    surfaceview

    - 一个自定义的SurfaceView类,继承自SurfaceView,并重写相关的方法,如onDraw(),用于执行实际的绘图逻辑。 - SurfaceHolder.Callback接口的实现,用于监听Surface的状态变化。 - 在Activity或Fragment中添加...

    android 自定义控件 小球圆周运动

    这个过程涉及到Canvas绘图、动画处理以及Android帧率控制等多个核心知识点。 首先,我们要理解Android中的自定义控件。自定义控件通常是通过继承`View`或`ViewGroup`类来实现的。在这个案例中,我们可以选择直接...

Global site tag (gtag.js) - Google Analytics