In meiner Anwendung müssen Sie einen Kreis auf ein Bild zeichnen. Im Moment benutze ich Leinwand und die Canvas
enthält dieses Bild. Meine Anforderung ist, dass ich zuerst einen Kreis mit Radius 20 zeichne, dann nach einer Sekunde den vorherigen Kreis lösche und einen Kreis mit 25 Kreisen zeichne und so weiter.Wie lösche ich den Canvas in Android?
Unten ist mein Fragment
Code.
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
/**
* Created by user on 5/23/2016.
*/
public class StepTwentyOneFragment extends Fragment {
private CanvasView customCanvas;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.step21_fragment, container, false);
customCanvas=(CanvasView)v.findViewById(R.id.signature_canvas);
final Button button1=(Button)v.findViewById(R.id.step18button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getId()==R.id.step18button1){
customCanvas.clear2();
v.setBackgroundResource(R.drawable.button_border_5);
button1.setTextColor(Color.WHITE);
}
}
});
return v;
}
public static StepTwentyOneFragment newInstance() {
StepTwentyOneFragment f = new StepTwentyOneFragment();
Bundle b = new Bundle();
f.setArguments(b);
return f;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
Activity a = getActivity();
if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Unten ist, wie ich das Bild und den Kreis zeichnen. Meine Klasse erreichen diese Klasse.
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
/**
* Created by user on 4/28/2016.
*/
public class CanvasView extends View {
public int width;
public int height;
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
Context context;
private Paint mPaint;
private float mX, mY;
private static final float TOLERANCE = 5;
public CanvasView(Context c, AttributeSet attrs) {
super(c, attrs);
context = c;
mPath = new Path();
mPaint = new Paint();
mPaint.setStrokeWidth(3);
mPaint.setColor(Color.CYAN);
}
// override onDraw
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mCanvas=canvas;
Drawable d = getResources().getDrawable(R.drawable.circle_1);
int canvasHeight= canvas.getHeight();
int canvasWidth= canvas.getWidth();
Log.d("Height - ","/"+canvas.getHeight());
Log.d("Width - ","/"+canvas.getWidth());
// DisplayMetrics displaymetrics = new DisplayMetrics();
// ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
// int height = displaymetrics.heightPixels;
// int width = displaymetrics.widthPixels;
float h=canvasHeight/2;
float w=canvasWidth/2;
float r=(canvasWidth/2) - ((canvasWidth/2)/100)*20;
d.setBounds(0, 0, canvasWidth, canvasHeight);
d.draw(canvas);
canvas.drawCircle(w, h, r, mPaint);
}
public void clear2(){
mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
Drawable d = getResources().getDrawable(R.drawable.circle);
int canvasHeight= mCanvas.getHeight();
int canvasWidth= mCanvas.getWidth();
Log.d("Height - ","/"+mCanvas.getHeight());
Log.d("Width - ","/"+mCanvas.getWidth());
// DisplayMetrics displaymetrics = new DisplayMetrics();
// ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
// int height = displaymetrics.heightPixels;
// int width = displaymetrics.widthPixels;
float h=canvasHeight/2;
float w=canvasWidth/2;
float r=(canvasWidth/2) - ((canvasWidth/2)/100)*20;
d.setBounds(0, 0, canvasWidth, canvasHeight);
d.draw(mCanvas);
mCanvas.restore();
}
}
aber das Problem ist, dass ich nicht in der Lage bin, die Canvas
überhaupt zu löschen. Obwohl ich eine Methode namens clear2
habe, wird nichts gelöscht. Ich bin mir auch nicht sicher, wie ich den anderen Kreis zeichnen soll, wenn der Löschvorgang abgeschlossen ist. Ich glaube, dass dieser "Zeichnungs" Code in meiner Fragment
Klasse sein muss? Bitte helfen Sie.
Canvas.drawColor (Farbe.TRANSPARENT, PorterDuff.Mode.CLEAR) –
@AmitVaghela: Bereits getan. – Barrier