编码surface android,【代码】通过 getHolder()方法可以得到这个 SurfaceHolder对象

原理(来自Android的SDk文档):

访问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);

}

}

希望大家看到这篇文章能觉得有用,谢谢已阅者。更多安卓技术问题欢迎加群探讨:314230976,验证码:qy88,不写验证不予通过哟~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值