|
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;//转1圈360度需要3秒 //角度与时间到的比值计算 double mTime=3000*Math.abs(angleValueList.get(i))/360; //距离与时间的比值计算 double times=Math.abs(distanceList.get(i))*20000/screenHeight;
10, 
11, 
12, 
13, |