Remove all the zoom & pan stuff because it didn't work well. Change the line color to GREEN so it just blends into the fill.

This commit is contained in:
Kevin Ruland 2012-02-21 02:43:04 +00:00
parent 00e1f817e3
commit 6a5dee579f

View File

@ -8,39 +8,26 @@ import net.sf.openrocket.R;
import net.sf.openrocket.android.db.DbAdapter;
import net.sf.openrocket.android.util.AndroidLogWrapper;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import com.androidplot.xy.BoundaryMode;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.LineAndPointRenderer;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.YValueMarker;
public class BurnPlotFragment extends Fragment implements OnTouchListener {
public class BurnPlotFragment extends Fragment {
private ExtendedThrustCurveMotor motor;
private long motorId;
private XYPlot mySimpleXYPlot;
private SimpleXYSeries mySeries;
private PointF minXY;
private PointF maxXY;
private float absMinX;
private float absMaxX;
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
public static BurnPlotFragment newInstance( long motorId ) {
BurnPlotFragment frag = new BurnPlotFragment();
@ -86,8 +73,6 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
View v = inflater.inflate(R.layout.motor_burn, container, false);
mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
mySimpleXYPlot.setOnTouchListener(this);
mScaleDetector = new ScaleGestureDetector(v.getContext(), new ScaleListener());
init(motor);
return v;
}
@ -128,7 +113,7 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
mySeries = new SimpleXYSeries(data, SimpleXYSeries.ArrayFormat.XY_VALS_INTERLEAVED,"no data");
}
LineAndPointFormatter formatter= new LineAndPointFormatter(Color.RED, Color.GREEN, Color.GREEN);
LineAndPointFormatter formatter= new LineAndPointFormatter(Color.GREEN, Color.GREEN, Color.GREEN);
formatter.getLinePaint().setShadowLayer(0, 0, 0, 0);
formatter.getVertexPaint().setShadowLayer(0, 0, 0, 0);
@ -139,135 +124,7 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
mySimpleXYPlot.redraw();
minXY=new PointF(mySimpleXYPlot.getCalculatedMinX().floatValue(),mySimpleXYPlot.getCalculatedMinY().floatValue());
maxXY=new PointF(mySimpleXYPlot.getCalculatedMaxX().floatValue(),mySimpleXYPlot.getCalculatedMaxY().floatValue());
absMinX = minXY.x;
absMaxX = maxXY.x;
}
private float mPosX;
private float mPosY;
private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = -1;
@Override
public boolean onTouch(View arg0, MotionEvent event) {
mScaleDetector.onTouchEvent(event);
final int action = event.getAction();
switch ( action & MotionEvent.ACTION_MASK ) {
case MotionEvent.ACTION_DOWN: {
final float x = event.getX();
final float y = event.getY();
mLastTouchX = x;
mLastTouchY = y;
mActivePointerId = event.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = event.findPointerIndex(mActivePointerId);
final float x = event.getX(pointerIndex);
final float y = event.getY(pointerIndex);
if (!mScaleDetector.isInProgress()) {
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
scroll(dx);
// do scroll.
}
mLastTouchX = x;
mLastTouchY = y;
break;
}
case MotionEvent.ACTION_UP: {
mActivePointerId = -1;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = -1;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
final int pointerId = event.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
// This was our active pointer going up. choose a new active pointer and adjust accordingly.
final int newPointerIndex = pointerIndex ==0 ? 1:0;
mLastTouchX = event.getX(newPointerIndex);
mLastTouchY = event.getY(newPointerIndex);
mActivePointerId = event.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
private void zoom(float scale) {
AndroidLogWrapper.d(BurnPlotFragment.class,"zoom by " + scale);
float domainSpan = absMaxX - absMinX;
AndroidLogWrapper.d(BurnPlotFragment.class,"domainSpan = " + domainSpan);
float domainMidPoint = absMaxX - domainSpan / 2.0f;
AndroidLogWrapper.d(BurnPlotFragment.class,"domainMidPoint = " + domainMidPoint);
float offset = domainSpan / scale;
AndroidLogWrapper.d(BurnPlotFragment.class,"offset " + offset);
minXY.x=domainMidPoint- offset;
AndroidLogWrapper.d(BurnPlotFragment.class,"min X " + minXY.x);
maxXY.x=domainMidPoint+offset;
AndroidLogWrapper.d(BurnPlotFragment.class,"max X " + maxXY.x);
checkBoundaries();
mySimpleXYPlot.setDomainBoundaries(minXY.x, maxXY.x, BoundaryMode.AUTO);
mySimpleXYPlot.redraw();
}
private void scroll(float pan) {
float domainSpan = maxXY.x - minXY.x;
float step = domainSpan / mySimpleXYPlot.getWidth();
float offset = pan * step;
minXY.x+= offset;
maxXY.x+= offset;
checkBoundaries();
mySimpleXYPlot.setDomainBoundaries(minXY.x, maxXY.x, BoundaryMode.AUTO);
mySimpleXYPlot.redraw();
}
private void checkBoundaries() {
if ( minXY.x < absMinX)
minXY.x = absMinX;
// else if ( minXY.x > maxNoError )
// minXY.x = maxNoError;
if ( maxXY.x > absMaxX)
maxXY.x = absMaxX;
// else if ( maxXY.x < minNoError)
// maxXY.x = minNoError;
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale( ScaleGestureDetector detector ) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(1.0f, Math.min(mScaleFactor, 5.0f));
zoom(mScaleFactor);
return true;
}
}
}