zyj7261349 2011-05-10 10:15
浏览 784
已采纳

surfaceview中surfaceHolder.lockCanvas(null)返回为空?

我的一个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]

  • 写回答

3条回答 默认 最新

  • iteye_8576 2011-05-11 09:43
    关注

    这个应该android的框架问题,调用measure方法后,就可以了。
    [code="java"]
    txt = (TextView) findViewById(R.id.txt);
    txt.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    int w = txt.getMeasuredHeight();
    int h = txt.getMeasuredWidth();
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)