注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创新改变世界

you changed the world

 
 
 

日志

 
 

android --- surfaceView的代码试验  

2011-11-17 11:24:18|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
google为了程序员在进行开发时可以方便的通过子线程来处理界面,在android中加入了handler和surfaceView两种方式来完成此目的,handler就不多讲了,比较简单,这两天我试验了下surfaceView的使用,以下是操作过程:
(一)重构surfaceView
package com.surface;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder holder = null;
private boolean stop = false;
public MySurfaceView(Context context) {
super(context);
// TODO Auto-generated constructor stub
Log.d("surface", "first create ...");
holder = this.getHolder();
holder.addCallback(this);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Log.d("surfaceRoy", "surface change ...");
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.d("surfaceRoy", "surface create ...");
new Thread(new MyThread()).start();  
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.d("surfaceRoy", "surface destory ...");
stopRun();
}
public void stopRun(){
this.stop = true;
}
class MyThread implements Runnable{  
 
        @Override  
        public void run() { 
        for(int i=0;i<100000;i++){
        if(!stop){
           Canvas canvas = holder.lockCanvas(null);//获取画布  
           Paint mPaint = new Paint();  
           mPaint.setColor(Color.BLUE);  
           i = i + 5;
           canvas.drawRect(new RectF(40 + i,60 + i,80 + i,80 + i), mPaint);  
           holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像  
        }
        }
        }  
          
    }

}

(二)主线程Acitivity ——TestSurfaceView

package com.surface;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class TestSurfaceView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MySurfaceView msv = new MySurfaceView(this);
        msv.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("surfaceRoy", "Hello Google");
}
       
        });
        this.setContentView(msv);
        
    }
}

运行之后就可以看到效果了。

需要注意的地方:
(1)进行界面的复杂处理时,要自己建立子线程来处理,切不可直接放在主线程中,那样会卡死主线程;
(2)在surfaceView的重构类中实现点击、拖动接口好像不起作用,这里我有试过,没有任何相应,但是单独给对象添加单击事件就会起作用,这一点有兴趣的童鞋可以再试试看。
  评论这张
 
阅读(94)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017