2016-08-28 4 views
0

내 레이아웃에 회 전자가 있습니다. 다른 항목을 선택했을 때 경로로 그린 모양을 변경하고 싶습니다. 현재 내 코드는 단지 두 번째 경로를 첫 번째 경로로 바꾸는 대신 두 번째 경로를 첫 번째 경로에 추가합니다. 여기 내 코드는 다음과 같습니다캔버스 변경 경로

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(); 

     } 
    } 
} 
+0

를? 나쁜 생각. –

+0

무엇을 의미합니까? mCanvas 변수에 대해 이야기하고 있습니까? – Naci

답변

2
당신은 아마 당신의 경로 재설정해야

:`canvas`에 대한 참조를 유지

public void drawPath(float[] xCoord, float[] yCoord) { 

    path.reset(); 

    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(); 
}