2016-04-13 3 views
0

drawLineメソッドを使用して下から開始し、画面サイズの半分になる線を作成しました。 これまでのところとても良いです。今度は、画面が押されたときに、線を左右に傾けたいと思っていました。絵でこのよう 何か:onDraw()で移動する線のアニメーションを作成するのに助けが必要です - JAVA

enter image description here

そして押されたときに再びように、それは他の側に倒しています。 私が今問題を抱えているのは、私がdrawLineメソッドを複数回呼び出すので、私がラインを傾けると、その "トレイル"が見えるということです。

これは私のコードです:私はすべてのアイデアを

public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback { 
private static final String TAG = MainGamePanel.class.getSimpleName(); 

private MainThread thread; 
private Paint paint; 
private GameLine gameLine; 

public MainGamePanel(Context context){ 
    super(context); 

    getHolder().addCallback(this); 

    setFocusable(true); 
    paint = new Paint(); 
    paint.setStrokeWidth(50); 
    paint.setColor(Color.WHITE); 
    gameLine = new GameLine(getWidth()/2,getHeight(),getWidth()/2, getHeight()/2,paint); 

    thread = new MainThread(getHolder(), this); 
} 
@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    thread.setRunning(true); 
    thread.start(); 
    gameLine = new GameLine(getWidth()/2,getHeight(),getWidth()/2, getHeight()/2,paint); 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    ...} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction() == MotionEvent.ACTION_DOWN){ 
     gameLine.setTapped(true); 
    } 
    return super.onTouchEvent(event); 
} 

public void render(Canvas canvas) { 
    gameLine.drawTheLine(canvas); 
} 
public void update(){ 
    gameLine.update(); 
}} 

public class MainThread extends Thread { 

private boolean running; 
private MainGamePanel gamePanel; 
private SurfaceHolder surfaceHolder; 

public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel){ 
    super(); 
    this.gamePanel=gamePanel; 
    this.surfaceHolder = surfaceHolder; 
} 

public void setRunning(boolean running){ 
    this.running = running; 
} 
@Override 
public void run(){ 
    Canvas canvas; 
    while (running){ 
     canvas = null; 
     try { 
      canvas = this.surfaceHolder.lockCanvas(); 
      synchronized (surfaceHolder){ 
       this.gamePanel.update(); 
       this.gamePanel.render(canvas); 
      } 
     }finally { 
      if(canvas != null){ 
       surfaceHolder.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 
}} 
public class GameLine { 

private float startX; 
private float startY; 
private float stopX; 
private float stopY; 
private Paint paint; 
private boolean tapped = false; 


public GameLine(float startX, float startY, float stopX, float stopY, Paint paint) { 
    Normal Constructor 
} 
public boolean getTapped(){ 
    return tapped; 
} 
public void setTapped(boolean tapped){ 
    this.tapped = tapped; 
} 
public void update(){ 
    if(tapped){ 
     this.stopX -=1; 
    } 
} 
public void drawTheLine(Canvas canvas){ 

    canvas.drawLine(startX, startY,stopX, stopY,paint); 
}} 

探しています。私はこれを間違った方法で試みましたか? トレイルを見えなくするにはどうしたらいいですか? 私はどんな助けにも感謝しています。ありがとうございました。

+1

@NaNリンクは好ましい方法である彼らのためになるよう、<10の担当者は、彼らの質問に直接画像を投稿することができませんで新しいユーザーを画像を含める。 – beaker

答えて

0

トレイルを削除するには、古いキャンバス(正確には古いビットマップ)を破棄して新しいキャンバスを作成する必要があります。 あなたの例では、私がお勧めします:

@Override 
public void run(){ 
    Canvas canvas; 
    while (running){ 
     canvas = null; 
     try { 
      canvas = this.surfaceHolder.lockCanvas(); 
      synchronized (surfaceHolder){ 
       this.gamePanel.update(); 
       canvas = gameLine.drawTheLine(); 
      } 
     }finally { 
      if(canvas != null){ 
       surfaceHolder.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 
} 

public Canvas drawTheLine(){ 
    Canvas canvas = new Canvas(); 
    canvas.drawLine(startX, startY,stopX, stopY,paint); 
    return canvas; 
} 
関連する問題