我來自Java,它不會「重畫」,因此我的意思是它不會將我的位圖移動到某個人點擊屏幕的位置。我的代碼沒有問題,logcat並沒有告訴我什麼,奇怪的是它昨天工作正常,但現在出於某種原因,它不會工作。我的程序不會「repaint()」
Activity.class
package com.example.alex.something;
import android.app.Activity;
import android.os.Bundle;
public class Animation extends Activity {
private AnimationThread a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
a = new AnimationThread(this);
setContentView(a);
}
@Override
protected void onPause() {
super.onPause();
a.pause();
}
@Override
protected void onResume() {
super.onResume();
a.resume();
}
}
AnimationThread.class
package com.example.alex.something;
import android.content.Context;
import android.view.*;
import android.graphics.*;
public class AnimationThread extends SurfaceView implements Runnable{
private Thread thread = null;
private SurfaceHolder holder;
private Boolean runnable = false;
private Bitmap ball;
private float x,y;
public AnimationThread(Context context) {
super(context);
ball = BitmapFactory.decodeResource(getResources(),R.drawable.redball);
x=0; y=0;
holder = getHolder();
}
@Override
public void run() {
while(runnable==true){
if(!holder.getSurface().isValid()){
continue;
}
Canvas c = holder.lockCanvas();
c.drawBitmap(ball,x-ball.getWidth()/2,y-ball.getHeight()/2,null);
holder.unlockCanvasAndPost(c);
}
}
public void pause(){
runnable=false;
while(true){
try{
thread.join();
}
catch(InterruptedException e){
e.getStackTrace();
}
}
}
public void resume(){
runnable=true;
thread = new Thread(this);
thread.start();
}
public MotionListener getListener(){MotionListener a = new MotionListener(); return a;}
private class MotionListener implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
x= event.getX();
y= event.getY();
return false;
}
}
}
此外,據我所知沒有什麼錯我的代碼,也許更有經驗的人的威力能夠看到一些東西,這也可能是我的錯模擬器,它昨天工作正常嗎?
@Tom它在活動的'onResume()'中開始。 – alenz316
@Tom是的,我這樣做是爲了能夠在有人點擊屏幕時將它「重新繪製」到新的位置,因爲我不確定android是否有重繪方法。 –
@ alenz316是的,已經注意到了。真的隱藏。 @AlexSmith你的'AnimationThread#pause'方法看起來非常可疑...爲什麼會有一個無限循環? – Tom