访问SurfaceView的底层图形是通过SurfaceHolder接口来实现的,通过getHolder()方法可以得到这个SurfaceHolder对象。你应该实现surfaceCreated(SurfaceHolder)和surfaceDestroyed(SurfaceHolder)方法来知道在这个Surface在窗口的显示和隐藏过程中是什么时候创建和销毁的。
SurfaceView可以在多线程中被访问。
注意:一个SurfaceView只在SurfaceHolder.Callback.surfaceCreated() 和 SurfaceHolder.Callback.surfaceDestroyed()调用之间是可用的,其他时间是得不到它的Canvas对象的(null)。
我的访问过程:
创建一个SurfaceView的子类,实现SurfaceHolder.Callback接口。
得到这个SurfaceView的SurfaceHolder对象holder。
holder.addCallback(callback),也就是实现SurfaceHolder.Callback接口的类对象。
在SurfaceHolder.Callback.surfaceCreated()调用过后holder.lockCanvas()对象就可以得到SurfaceView对象对应的Canvas对象canvas了。
用canvas对象画图。
画图结束后调用holder.unlockCanvasAndPost()就把图画在窗口中了。
SurfaceView可以多线程访问,在多线程中画图。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements
SurfaceHolder.Callback {
private Context mContext;
private SurfaceHolder mHolder;
public TouchScreenAdjusterSurfaceView(Context context,) {
super(context);
mContext = context;
mHolder = TouchScreenAdjusterSurfaceView.this.getHolder();
mHolder.addCallback(TouchScreenAdjusterSurfaceView.this);
this.setFocusableInTouchMode(true); // to make sure that we can get
// touch events and key events,and
// "setFocusable()" to make sure we
// can get key events
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//now you can get the Canvas and draw something here
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public void drawMyShape(PointPostion ps) {
mCanvas = mHolder.lockCanvas();
// draw anything you like
mHolder.unlockCanvasAndPost(mCanvas);
}
}
最近碰到以怪事,surfaceView.callback的surfaceCreated死活不能执行,不知道怎么搞,到处搜搜,把东西贴上来,慢慢研究,不知哪位高手能介绍下surfaceview回调函数的运行原理,什么时候加载,什么时候结束,郁闷,搞这个回调现在只能碰运气,烦死了
分享到:
相关推荐
Android游戏开发, SurfaceView!
surfaceView 网页surfaceView 网页surfaceView 网页surfaceView 网页surfaceView 网页surfaceView 网页
android使用双缓冲辨析及surfaceview使用例子
这是在上网收集的,能够截取当前Activity中surfaceView中图片。本人亲测可以通过。
android MediaPlayer SurfaceView
SurfaceView一般用于游戏中,但是有时候我们自定义View的时候,自定义View现有的功能区不能达到我们预期的效果,所以surfaceview也是一个不错的选择.这个demo是一个surfaceview的基础应用,适合新手.
surfaceview进行屏幕截图demo
Android中使用surfaceview开发的Camera相机,内容含有注释,非常清楚
android之surfaceview游戏开发
SurfaceView画图实例。模版代码,可正常运行。可以很好的学习使用SurfaceView
一个使用SurfaceView的Demo
安卓看视频的时候,视频画面局部放大和缩小插件,基于SurfaceView修改的。
Android中SurfaceView的使用
android之surfaceview学习示例
Android下使用SurfaceView播放视频文件,详细参见博客:http://www.cnblogs.com/plokmju/p/android_SurfaceView.html