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:
parent
00e1f817e3
commit
6a5dee579f
@ -8,39 +8,26 @@ import net.sf.openrocket.R;
|
|||||||
import net.sf.openrocket.android.db.DbAdapter;
|
import net.sf.openrocket.android.db.DbAdapter;
|
||||||
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.ScaleGestureDetector;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnTouchListener;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.androidplot.xy.BoundaryMode;
|
|
||||||
import com.androidplot.xy.LineAndPointFormatter;
|
import com.androidplot.xy.LineAndPointFormatter;
|
||||||
import com.androidplot.xy.LineAndPointRenderer;
|
import com.androidplot.xy.LineAndPointRenderer;
|
||||||
import com.androidplot.xy.SimpleXYSeries;
|
import com.androidplot.xy.SimpleXYSeries;
|
||||||
import com.androidplot.xy.XYPlot;
|
import com.androidplot.xy.XYPlot;
|
||||||
import com.androidplot.xy.YValueMarker;
|
import com.androidplot.xy.YValueMarker;
|
||||||
|
|
||||||
public class BurnPlotFragment extends Fragment implements OnTouchListener {
|
public class BurnPlotFragment extends Fragment {
|
||||||
|
|
||||||
private ExtendedThrustCurveMotor motor;
|
private ExtendedThrustCurveMotor motor;
|
||||||
private long motorId;
|
private long motorId;
|
||||||
|
|
||||||
private XYPlot mySimpleXYPlot;
|
private XYPlot mySimpleXYPlot;
|
||||||
private SimpleXYSeries mySeries;
|
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 ) {
|
public static BurnPlotFragment newInstance( long motorId ) {
|
||||||
BurnPlotFragment frag = new BurnPlotFragment();
|
BurnPlotFragment frag = new BurnPlotFragment();
|
||||||
@ -86,8 +73,6 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
|
|||||||
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
|
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
|
||||||
View v = inflater.inflate(R.layout.motor_burn, container, false);
|
View v = inflater.inflate(R.layout.motor_burn, container, false);
|
||||||
mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
|
mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
|
||||||
mySimpleXYPlot.setOnTouchListener(this);
|
|
||||||
mScaleDetector = new ScaleGestureDetector(v.getContext(), new ScaleListener());
|
|
||||||
init(motor);
|
init(motor);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -128,7 +113,7 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
|
|||||||
mySeries = new SimpleXYSeries(data, SimpleXYSeries.ArrayFormat.XY_VALS_INTERLEAVED,"no data");
|
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.getLinePaint().setShadowLayer(0, 0, 0, 0);
|
||||||
formatter.getVertexPaint().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();
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user