1,TrackView

2,private List<Point> allPoints = new ArrayList<Point>();

3,

DisplayMetrics dm2 = getResources().getDisplayMetrics();

screenHeight=dm2.heightPixels;

4,一个继承OnTouchListener的内部类(用于描点,定制区域)

private class OnTouchListenerImp implements OnTouchListener {}
5 ,沿轨迹行动
public void setOnTrackListener(OnTrackListener listener) {
    this.onTrackListener = listener;
}
public interface OnTrackListener{
    void onTrackStart(List<Point> tPoint, List<Point> lPoints);

    void onTrackStop();
}

6,调用外部方法 interface-接口回调-监听

public void setAnimAngelChangeListener(AnimAngelChangeListener animAngelChangeListener) {
    this.animAngelChangeListener = animAngelChangeListener;
}

public AnimAngelChangeListener animAngelChangeListener;
public interface AnimAngelChangeListener{
    void goforward();
    void gobehide();
    void goleft();
    void goright();
    void goleftup();
    void gorightup();
    void stop();

};

7,距离、角度

private List<Double> angleValueList;
private List<Float> distanceList;
angleValueList=new ArrayList<Double>();
distanceList=new ArrayList<Float>();
//计算两点间的弧度、角度、距离、
for (int i=1;i<allPoints.size();i++){
    float rad= getRad(allPoints.get(i-1).x,allPoints.get(i-1).y,allPoints.get(i).x,allPoints.get(i).y);
    Log.i(TAG, "startAnimA: "+"rad=="+rad);
    float angle= (float) radian2Angle(rad);//角度值
    Log.i(TAG, "startAnimB: "+"angle=="+angle);
    double angleValue = Math.toDegrees(rad);//角度值
    Log.i(TAG, "startAnimC: "+"B=="+angleValue);

    angleValueList.add(angleValue);
    float distance=getDistance(allPoints.get(i-1).x,allPoints.get(i-1).y,allPoints.get(i).x,allPoints.get(i).y);
    Log.i(TAG, "startAnimD: "+"distance=="+distance);
    distanceList.add(distance);

}

float rad= getRad(allPoints.get(allPoints.size()-1).x,allPoints.get(allPoints.size()-1).y,allPoints.get(0).x,allPoints.get(0).y);
Log.i(TAG, "startAnimA: "+"rad=="+rad);
float angle= (float) radian2Angle(rad);//角度值
Log.i(TAG, "startAnimB: "+"angle=="+angle);
double angleValue = Math.toDegrees(rad);//角度值
Log.i(TAG, "startAnimC: "+"B=="+angleValue);
angleValueList.add(angleValue);

float distance=getDistance(allPoints.get(allPoints.size()-1).x,allPoints.get(allPoints.size()-1).y,allPoints.get(0).x,allPoints.get(0).y);
Log.i(TAG, "startAnimD: "+"distance=="+distance);
distanceList.add(distance);


8,定时器

TimerTask timerTask;
private List<TimerTask> tasklist;

 timer =new Timer();
tasklist =new ArrayList<TimerTask>();

9,时间计算

int alltime;//1360度需要3
//角度与时间到的比值计算
double mTime=3000*Math.abs(angleValueList.get(i))/360;
//距离与时间的比值计算
double times=Math.abs(distanceList.get(i))*20000/screenHeight;

10,

轨迹

11,

轨迹


12,

轨迹



13,轨迹

相关文章: