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,