0
Ich habe einen Spinner in meinem Layout. Ich möchte die Form ändern, die als ein Pfad gezeichnet wird, wenn ein anderer Artikel ausgewählt wird. Derzeit fügt mein Code meinen zweiten Pfad zu dem ersten hinzu, anstatt ihn einfach zu ersetzen. Hier ist mein Code:Canvas Änderungspfad
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private MyView myView;
private boolean firstTimeThru = true;
private LinearLayout root;
private Spinner mySpinner;
private Paint myPaint;
private Path path = new Path();
float[] finalXCoord, finalYCoord;
float[] xCoord1 = {0,30, 50};
float[] yCoord1 = {0, 100, 40};
float[] xCoord2 = {52,300, 100, 60};
float[] yCoord2 = {100, 200, 40, 80};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finalXCoord = xCoord1;
finalYCoord = yCoord1;
// Hide the Title Bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Hide the Status Bar
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
root = new LinearLayout(this);
root.setOrientation(LinearLayout.VERTICAL);
// Create the spinner, add contents, add events, add to Layout
mySpinner = new Spinner(this);
List<String> list = new ArrayList<String>();
list.add("1st Path");
list.add("2nd Path");
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list);
mySpinner.setAdapter(spinnerArrayAdapter);
myPaint = new Paint();
myPaint.setColor(Color.GREEN);
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
System.out.println(mySpinner.getSelectedItemId());
if (mySpinner.getSelectedItemId()==0) {
myPaint.setColor(Color.GREEN);
finalXCoord = xCoord1;
finalYCoord = yCoord1;
}
if (mySpinner.getSelectedItemId()==1) {
myPaint.setColor(Color.RED);
finalXCoord = xCoord2;
finalYCoord = yCoord2;
}
if (!firstTimeThru) {
System.out.println("Not First Time");
//demoview.changeToRed();
}
System.out.println(myPaint.getColor());
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
root.addView(mySpinner);
// Add view with canvas
myView = new MyView(this);
root.addView(myView);
setContentView(root);
}
public class MyView extends View {
public Canvas mCanvas;
public MyView(Context context) {
super(context);
}
public void drawPath(float[] xCoord, float[] yCoord) {
path.moveTo(xCoord[0], yCoord[0]);
for(int i=1; i<xCoord.length; i++) {
path.lineTo(xCoord[i], yCoord[i]);
}
path.close();
mCanvas.drawPath(path, myPaint);
invalidate();
}
protected void onDraw(Canvas canvas) {
mCanvas = canvas;
//myPaint.setStyle(Paint.Style.FILL_AND_STROKE);
myPaint.setStrokeWidth(10);
myPaint.setPathEffect(null);
//paint.setColor(Color.BLACK);
myPaint.setStyle(Paint.Style.STROKE);
drawPath(finalXCoord, finalYCoord);
//invalidate();
}
}
}
einen Verweis auf 'canvas' halten? schlechte Idee. –
Was meinst du? Sprechen Sie über die Variable mCanvas? – Naci