0
我想编写一个程序,通过SurfaceView在屏幕上移动一个球,并更改drawCircle()方法的X参数,但程序不会在屏幕上显示任何内容,只会显示一个黑色页面。球没有在与SurfaceView的页面中显示。为什么?
这是我的代码。
TestsSurface.java:
public class TestSurface extends SurfaceView implements SurfaceHolder.Callback{
SurfaceHolder surfaceHolder;
public TestSurface(Context context) {
super(context);
// TODO Auto-generated constructor stub
getHolder().addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Thread thread=new Thread();
thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public void drawing(Canvas canvas){
drawingShape(canvas);
}
int x=100;
public void drawingShape(Canvas canvas){
canvas.drawColor(Color.BLACK);
Paint paint=new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(x, 100, 50, paint);
x+=2;
}
public void run(){
Canvas canvas;
while(true){
canvas=null;
try{
synchronized(surfaceHolder){
canvas=getHolder().lockCanvas();
drawing(canvas);
}
}finally{
if(canvas!=null)
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}
MainActivity.java:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TestSurface test=new TestSurface(this);
setContentView(test);
}
}
什么是我的问题吗?
感谢快速回复。我添加surfaceHolder = getHolder();给我的构造函数,但是当我运行程序时,程序再次显示黑屏。 – 2013-04-08 19:11:28
@NiceNICE您应该尝试在该循环中放置一个'Thread.Sleep()'调用,以确保其执行速度不会太快。如果迭代速度比实际看到的要快,并将x放入大于屏幕的范围内,则看起来会变黑。 – Grambot 2013-04-08 20:47:39
我在run()方法中的drawing()调用下面写了Thread.sleep(1000),但程序没有正确运行。我切割run()方法并粘贴到新类中,新类扩展了Thread。现在程序运行正确,但我想知道什么是问题?为什么我在TestSurface类中编写run()方法,程序没有运行?谢谢 – 2013-04-08 21:42:07