关于SurfaceView类

 

关于SurfaceView类:

SurfaceView 可以直接访问一个画布,提供给需要直接画像素而不是使用窗体部件的应用使用的。每一个SurfaceView创建一个Canvas对象,用来管理View在SurfaceView的绘图操作。

使用SurfaceView时需要实现SurfaceHolder.Callback接口。一下是这个接口的方法:

surfaceChange:在Surface的大小改变时激发。

surfaceCreate:在创建Surface时激发。

surfaceDestroy:在销毁Surface时激发。

addCallback:给SurfaceView添加一个回调函数

lockCanvas:锁定画布,绘图之前必须锁定画布才能得到当前画布对象。

unlockCanvasAndPost:绘制完成之后解锁画布。

RemoveCallback:从SurfaceView中移除回调函数。

 

****SurfaceView和view明显的不同是:Surface不需要通过线程来更新视图,但在绘制之前必须使用lockCanvas方法来锁定画布,并得到画布,然后在画布上绘制,当绘制完成之后,使用unlockCanvasAndPost方法来解锁画布。这样才能显示在屏幕上。

附上一个例子:

public class TestSurfaceViewActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

      //  setContentView(R.layout.main);

        setContentView(new Myview(this));

    }

    //内部类

    class Myview extends SurfaceView implements SurfaceHolder.Callback{

    SurfaceHolder surfaceHolder;

       public Myview(Context context) {

           super(context);

           surfaceHolder=this.getHolder();

           surfaceHolder.addCallback(this);

       }

 

       public void surfaceChanged(SurfaceHolder holder, int format, int width,

              int height) {

           // TODO Auto-generated method stub

          

       }

 

       public void surfaceCreated(SurfaceHolder holder) {

           new Thread(new Mythread()).start();

          

       }

 

      

       public void surfaceDestroyed(SurfaceHolder holder) {

           // TODO Auto-generated method stub

          

       }

       //内部类的内部类实现

       class Mythread implements Runnable{

 

           public void run() {

              Canvas canvas=surfaceHolder.lockCanvas();

              Paint paint=new Paint();

              paint.setColor(Color.RED);

              canvas.drawRect(new Rect(40, 60, 80, 80), paint);

              surfaceHolder.unlockCanvasAndPost(canvas);

           }

          

       }

   

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值