2015-04-19 20 views
0

我來自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; 
    } 
} 

      } 

此外,據我所知沒有什麼錯我的代碼,也許更有經驗的人的威力能夠看到一些東西,這也可能是我的錯模擬器,它昨天工作正常嗎?

+0

@Tom它在活動的'onResume()'中開始。 – alenz316

+0

@Tom是的,我這樣做是爲了能夠在有人點擊屏幕時將它「重新繪製」到新的位置,因爲我不確定android是否有重繪方法。 –

+0

@ alenz316是的,已經注意到了。真的隱藏。 @AlexSmith你的'AnimationThread#pause'方法看起來非常可疑...爲什麼會有一個無限循環? – Tom

回答

0

它看起來不像你設置的觸摸監聽器。你有一個OnTouchListener類和一個getter,但你永遠不會在視圖上setOnTouchListener(listener)

+0

是的,它的工作非常感謝你,現在你有什麼想法爲什麼它只是畫一個新的圖像,而不是重新定位在我的屏幕上現有的一個? –

+0

繪製到畫布上時,它只是繪製您告訴它的任何內容。它不知道你想「移動」該位圖。你可以把它想象成用你的圖像「印章」「蓋印」畫布。爲了獲得所需的行爲,您需要清除畫布。看到http://stackoverflow.com/questions/6956838/how-to-erase-previous-drawing-on-canvas – alenz316

+0

此外,你不應該畫,除非有所改變。例如如果你的x或y已經改變。 ;) – alenz316