2016-07-29 19 views
0

在用戶正在行走時構建應用程序以繪製地圖結構。爲此,我使用Sensor.TYPE_STEP_DETECTOR。在檢測到每一步後,我調用以下方法'setCordinates(StepCalculator stepCalculator)'。但是當我這樣做時,只顯示當前位置(一個圓圈),則不會顯示前往此處的路徑(以前的圓圈)。動態更新android中的相同畫布

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

import java.util.ArrayList; 

public class DrawView extends View { 
Paint paint = new Paint(); 
private int cx=0,cy=0; 
private Step step; 
private ArrayList<Step> steps; 
private Bitmap bm; 

public DrawView(Context context) { 
    super(context); 
    paint.setColor(Color.BLACK); 
    steps = new ArrayList<Step>(); 
    step = new Step(); 

} 


@Override 
public void onDraw(Canvas canvas) { 





     for (Step i : steps) { 
      cy = i.getY(); 
      cx = i.getX(); 
      paint.setColor(Color.RED); 
      canvas.drawCircle(cx, cy, 50, paint); 
      paint.setColor(Color.BLACK); 
      canvas.drawCircle(cx, cy, 30, paint); 
      this.invalidate(); 
     } 



     // } 


    /*for(int i =0;i<100;i++) 
    { 
     paint.setColor(Color.RED); 
     canvas.drawCircle(50+(i*10), 50+(i*10), 50, paint); 
     paint.setColor(Color.BLACK); 
     canvas.drawCircle(50+(i*10), 50+(i*10), 30, paint); 
     this.invalidate(); 
    }*/ 




} 


public void setCordinates(StepCalculator stepCalculator) { 

    stepCalculator.calculateCordinates(); 
    step.setX(stepCalculator.getXCordinates()); 
    step.setY(stepCalculator.getYCordinates()); 
    steps.add(step); 

    this.invalidate(); 


} 

}

回答

0

一個建議:

final Path mPath = new Path(); 
final Paint mPaint = new Paint(); 
      mPaint.setStyle(Paint.Style.STROKE); 
      mPaint.setStrokeWidth(40); 
      mPaint.setColor(
        Color.RED 
      ); 
      mPaint.setPathEffect(
        new DashPathEffect(
          new float[]{10, 10}, 
          0 
        ) 
      ); 
ImageView line = new ImageView(context) { 
       @Override 
       protected void onDraw(Canvas canvas) { 
        super.onDraw(canvas); 
         mPath.reset(); 
         mPath.moveTo(
           YOUR_STEP_X, 
           YOUR_STEP_Y 
         ); 
         // If you are saving your steps, then cicle them here using lineTo() 
         mPath.lineTo(
           YOUR_NEW_STEP_X, 
           YOUR_NEW_STEP_Y 
         ); 
         canvas.drawPath(mPath, mPaint); 
       } 
      }; 

然後,在每一個新的步驟,呼叫invalidade線line.invalidate();

+0

我取代與上面給出的一個代碼(在。 View子類的構造函數)。但它不顯示任何東西.btw我從'公共無效setCordinates(StepCalculator stepCalculator)調用'line.invalidate'' –

+0

我試着只使用路​​徑,它的工作。謝謝 –

+0

祝你的項目好運。如果您需要更多幫助,請創建一個新問題(並保留原有問題,以便新用戶能夠搜索相關內容,並嘗試此方法)。歡迎來到stackoverflow。 – Bonatti