2016-11-29 16 views
0

私のキャンバスと安全なボタンをきれいにするボタンを作る必要があります。 私は活動がそのままであることを望みます。そして描かれたものだけが削除されるでしょう。どんな助けでも大変ありがとうございます。マイコード:キャンバス上のリセットボタン

import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.Path; 
    import android.util.AttributeSet; 
    import android.view.MotionEvent; 
    import android.view.View; 



public class TouchEventDraw extends View { 
//Variable 

private Paint paint = new Paint(); 
private Path path = new Path(); 

//Konstruktor 
public TouchEventDraw(Context context, AttributeSet attrset) { 
    super(context, attrset); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.BLACK); 
    paint.setStrokeJoin(Paint.Join.MITER); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(5f); 

} 


/** 
* The most important step in drawing a custom view is to override the   
* @param canvas object that the view can use to draw itself. */ 
@Override 
protected void onDraw(Canvas canvas) { 
    if(path.isEmpty()) 
     canvas.drawColor(Color.WHITE); 
    else 
     canvas.drawPath(path, paint); 

} 

/** 
    * Method to handle touch screen motion events. 
    * @param event The motion event 
    * @return True if the event was handled, false otherwise.*/ 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    float xPos = event.getX(); 
    float yPos = event.getY(); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(xPos,yPos); 
      return true; 
     case MotionEvent.ACTION_MOVE: 
      path.lineTo(xPos,yPos); 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
     default: 
      return false; 
    } 
    invalidate(); 
    return true; 
} 
public void clear(){ 
    path = new Path(); 
    invalidate(); 
} 

} 

とボタンとの私の活動:

あなたの TouchEventDrawクラスにメソッドを追加し、あなたに続いて

canva.drawColor(Color.WHITE); 

それに次のように呼び出す必要が

import android.graphics.Canvas; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.Button; 

public class DrawingScreen extends AppCompatActivity { 
Button btn; 
    TouchEventDraw ted; 
Canvas canva; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
ted=new TouchEventDraw(this,null); 

    setContentView(R.layout.activity_drawing_screen); 
    btn=(Button) findViewById(R.id.button); 
    btn.setOnClickListener(onClickListener); 

} 
private final View.OnClickListener onClickListener=new View.OnClickListener() {  
    @Override 
    public void onClick(View v) { 
ted.clear(); 
ted.invalidate(); 
    } 
}; 
} 

答えて

0

ボタンをクリックし、作成したメソッドを呼び出します。

私が提供した情報でソリューションを実装できるはずです。

私は、以下を参照してください、より多くの致命的な問題は、しかし、あなたのコードをあると思います。

  1. ビューが画面上に置きませんさん。
  2. SurfaceViewではなく、Viewを拡張します。

もう一つの方法は、メソッドを作成することができ、その代わり

@Override 
protected void onDraw(Canvas canvas) { 
    if(path.isEmpty()) 
     canvas.drawColor(Color.WHITE); 
    else 
     canvas.drawPath(path, paint); 

} 

にあなたのドローを変更し、あなたが意味View.invalidate();

+0

を呼び出し、その後path

public void clear(){ path = new Path(); } 

を設定する必要があります次のようにします:public void clear(Canvas canva){ canva.drawColor(Color.WHI TE)。 } – Veni

+0

@Veniはい。しかし、渡すキャンバスパラメータはありません。これは 'SurfaceView'ではなく' View'を使うことによると思います。したがって、コードを修正する必要があるかもしれません。私はパスを使って、別のアイデアを持っています。私の答えを編集させてください。 – Doomsknight

+0

奇妙な、それは私をよくしている – Veni