我的一个activity里面有个surfaceView用于画数据图 此外我定义了一个Thread用于接受数据 在activity中我开启这个线程用activity里面的Handler来处理线程返回来的数据并调用画图方法 在surfaceView上画图 但是现在android surfaceHolder.lockCanvas(null)返回值为空 我不知道是为什么 急切求解中..
[code="java"]
dlThread=new DrawLineThread(this);
dlThread.start();
/**
* 绘制图线的方法
* @author ZH
* @param ylist
* 是当前点在Y轴上的坐标值
*/
void deDraw(List ylist){
oldX=0f;
oldY=Float.parseFloat(ylist.get(0).toString());
oldY=height-(height/(Ymax-Ymin)*(oldY-Ymin)+1);
Canvas canvas = sfh.lockCanvas(new Rect(0, 0,width
,height));// 关键:获取画布
canvas.drawColor(Color.WHITE);
Paint mPaint = new Paint();
mPaint.setColor(Color.GREEN);// 画笔为绿色
mPaint.setStrokeWidth(1);// 设置画笔粗细
// //如果x超出了控件宽度,跳转到开始位置重新画
// if(currentX>width){
// Log.v("tag", "back to the head");
// oldX=0;//把坐标转到最初位置
// currentX=oldX+(width/10);
// canvas.drawColor(Color.WHITE);
// }
//初始化oldY为控件高度
if(oldY==-1){
oldY=height;
canvas.drawColor(Color.WHITE);
}
for(int i=1;i
float y=Float.parseFloat(ylist.get(i).toString());
y=height-(height/(Ymax-Ymin)*(y-Ymin)+1);//根据控件大小缩放Y轴对应的比例
currentX=oldX+(width/Xrate);
System.out.println("oldX-->"+oldX+"oldY-->"+oldY+"currentX--->"+currentX+"--currentY--->"+y);
canvas.drawLine(oldX, oldY, currentX, y, mPaint);
oldX=currentX;
oldY=y;
}
sfh.unlockCanvasAndPost(canvas);
}
/**
* 清楚画布内容
*/
void ClearDraw() {
Canvas canvas = sfh.lockCanvas(null); //就是在这个地方报NULLPOINTEXCEPTION,我log了一下是因为canvas==null
canvas.drawColor(Color.WHITE);// 清除画布
sfh.unlockCanvasAndPost(canvas);
}
public Handler graphhandler = new Handler()
{
public void handleMessage(Message msg)
{
float point=(float)msg.arg1;
width=sfv.getWidth();
height=sfv.getHeight();
if(pointList.size()<=Xrate){
pointList.add(point);
}else{
pointList.remove(0);
pointList.add(point);
}
ClearDraw();
deDraw(pointList);
}
};
[/code]
问题处在这一句
[color=red]Canvas canvas = sfh.lockCanvas(null); //就是在这个地方报NULLPOINTEXCEPTION,我log了一下是因为canvas==null [/color]