gitsvn 12 роки тому
джерело
коміт
14340bdad6

+ 11
- 6
res/layout/rbs_main.xml Переглянути файл

@@ -83,7 +83,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/views"
android:scrollbarAlwaysDrawVerticalTrack="false" ><ScrollView
android:scrollbarAlwaysDrawVerticalTrack="false" >
<ScrollView
android:id="@+id/paramsScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -565,24 +567,27 @@
android:id="@+id/ballisticResults"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:orientation="vertical"
android:padding="4dp" >
<ScrollView
android:id="@+id/flightCurveScrollVIew"
android:id="@+id/flightCurveScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_weight="1"
android:scrollbars="vertical" >
<ch.spherIC.recurvebowsight.components.XTextView
android:id="@+id/flightCurveTxtFld"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="4dp"
android:background="@color/white"
android:textColor="@color/black"
android:ems="10"
android:inputType="textMultiLine"
android:padding="4dp"
android:textColor="@color/black"
android:textSize="14sp"
app:drawBorder="true"
app:drawBorderColor="@color/semi_translucent_black"

+ 64
- 27
src/ch/spherIC/recurvebowsight/RBSMainActivity.java Переглянути файл

@@ -32,11 +32,15 @@ import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import ch.spherIC.recurvebowsight.components.FlightCurveChart;
import ch.spherIC.recurvebowsight.components.FontArrayAdapter;
import ch.spherIC.recurvebowsight.components.FontTextView;
import ch.spherIC.recurvebowsight.components.RiserSpinner;
@@ -56,6 +60,10 @@ import ch.spherIC.recurvebowsight.model.ISight;
import ch.spherIC.recurvebowsight.model.Riser;
import ch.spherIC.recurvebowsight.model.Sight;
import org.achartengine.GraphicalView;
import org.achartengine.model.XYSeries;
import java.text.DecimalFormat;
import java.util.ArrayList;
@@ -121,6 +129,7 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
private String selectedHeVS;
private AlertDialog calculationAlert;
private FlightCurveChart flightCurveChart;
@Override
@@ -151,16 +160,20 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
List<IRiser> risers = RiserDao.getInstance().loadAll();
risers.add(0, new Riser(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, null));
this.scRiserSpinner.setAdapter(new FontArrayAdapter<IRiser>(this, R.layout.rbs_spinner, risers,
this.scRiserSpinner));
this.scRiserSpinner.setAdapter(new FontArrayAdapter<IRiser>(this, R.layout.rbs_spinner, risers, this.scRiserSpinner));
List<ISight> sights = SightDao.getInstance().loadAll();
sights.add(0,
new Sight(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, "", null, null));
this.scSightSpinner.setAdapter(new FontArrayAdapter<ISight>(this, R.layout.rbs_spinner, sights,
this.scSightSpinner));
sights.add(0, new Sight(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, "", null, null));
this.scSightSpinner.setAdapter(new FontArrayAdapter<ISight>(this, R.layout.rbs_spinner, sights, this.scSightSpinner));
addRiserAndSightSpinnerListeners();
GraphicalView flightCurveChartView;
LinearLayout layout;
this.flightCurveChart = new FlightCurveChart();
flightCurveChartView = this.flightCurveChart.getView(this);
layout = (LinearLayout) findViewById(R.id.ballisticResults);
layout.addView(flightCurveChartView, 0, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1f));
}
@@ -289,9 +302,10 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
}
RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.INVISIBLE);
RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().width,
RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().height,
0f));
RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld
.getLayoutParams().width,
RBSMainActivity.this.scHeVSTxtFld
.getLayoutParams().height, 0f));
RBSMainActivity.this.scHeVSSpinner.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner.getLayoutParams().width,
@@ -299,14 +313,13 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
1f);
params.gravity = Gravity.FILL_VERTICAL;
RBSMainActivity.this.scHeVSSpinner.setLayoutParams(params);
RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this,
R.layout.rbs_spinner,
listHeVis,
RBSMainActivity.this.scHeVSSpinner));
RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, R.layout.rbs_spinner,
listHeVis, RBSMainActivity.this.scHeVSSpinner));
if (RBSMainActivity.this.selectedHeVS == null) {
if (RBSMainActivity.this.selectedArcherySetup != null
&& RBSMainActivity.this.selectedArcherySetup.getSight().getId() == sight.getId()) {
RBSMainActivity.this.scHeVSSpinner.setSelectionByVal(DF.format(RBSMainActivity.this.selectedArcherySetup.getSightHorSetting()));
RBSMainActivity.this.scHeVSSpinner.setSelectionByVal(DF.format(RBSMainActivity.this.selectedArcherySetup
.getSightHorSetting()));
}
} else {
RBSMainActivity.this.scHeVSSpinner.setSelectionByVal(RBSMainActivity.this.selectedHeVS);
@@ -317,15 +330,16 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
+ DF.format(sight.getVertSkalaRangeMax()));
} else {
RBSMainActivity.this.scHeVSSpinner.setVisibility(View.INVISIBLE);
RBSMainActivity.this.scHeVSSpinner.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner.getLayoutParams().width,
RBSMainActivity.this.scHeVSSpinner.getLayoutParams().height,
0f));
RBSMainActivity.this.scHeVSSpinner.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner
.getLayoutParams().width,
RBSMainActivity.this.scHeVSSpinner
.getLayoutParams().height, 0f));
RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.VISIBLE);
RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().width,
RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().height,
1f));
RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this,
R.layout.rbs_spinner,
RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld
.getLayoutParams().width,
RBSMainActivity.this.scHeVSTxtFld
.getLayoutParams().height, 1f));
RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, R.layout.rbs_spinner,
new ArrayList<String>(),
RBSMainActivity.this.scHeVSSpinner));
RBSMainActivity.this.scaVTxtFld.setText("");
@@ -780,6 +794,7 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
public void onCalculationDone(final Double[][] flightCurve, final Double startAngle, final Double[] maxHCurve) {
this.startAngle = startAngle;
updateFlightCurveChart(flightCurve);
fillFlightCurveTxtFld(flightCurve, startAngle, maxHCurve);
calculateSettings();
@@ -791,6 +806,22 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
}
/**
* @param flightCurve
*/
private void updateFlightCurveChart(final Double[][] flightCurve) {
XYSeries serie = new XYSeries("Flight Curve");
for (int i = 0; i < flightCurve.length; i++) {
serie.add(flightCurve[i][TrajectoryCalculator.IDX_X], flightCurve[i][TrajectoryCalculator.IDX_Y]);
}
this.flightCurveChart.getDataSet().removeSeries(0);
this.flightCurveChart.getDataSet().addSeries(0, serie);
}
private void fillFlightCurveTxtFld(final Double[][] flightCurve, final Double startAngle,
final Double[] maxHCurve) {
this.flightCurveTxtFld.setText("");
@@ -845,15 +876,21 @@ public class RBSMainActivity extends Activity implements ChooseArcherySetupDlgDi
Double vVh = Double.valueOf(this.scVvisHTxtFld.getText().toString()) + Double.valueOf(this.scaHTxtFld.getText().toString());
Double vVv = Double.valueOf(this.scVvisVTxtFld.getText().toString()) + Double.valueOf(this.scaVTxtFld.getText().toString());
Double a = Double.valueOf(this.bowPulloutTxtFld.getText().toString()) * 10;
Double heVs = this.scHeVSSpinner.getVisibility() == View.VISIBLE ? Double.valueOf(this.scHeVSSpinner.getSelectedItem().toString()) : Double.valueOf(this.scHeVSTxtFld.getText().toString());
Double heVs = this.scHeVSSpinner.getVisibility() == View.VISIBLE ? Double.valueOf(this.scHeVSSpinner.getSelectedItem().toString())
: Double.valueOf(this.scHeVSTxtFld.getText().toString());
Double lhNA = this.selectedArcherySetup.getHNA() * 10;
Double dltH = (Double.valueOf(this.targetCenterHeightTxtFld.getText().toString())
- Double.valueOf(this.arrowNockHeightTxtFld.getText().toString())) * Math.pow(10, 3);
Double ldistH = Double.valueOf(this.shootingDistanzTxtFld.getText().toString()) * Math.pow(10, 3);
Double minSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(0,
this.scVertScaleRngTxtFld.getText().toString().indexOf('-'))) : 0d;
Double maxSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(this.scVertScaleRngTxtFld.getText().toString().indexOf('-') + 1,
this.scVertScaleRngTxtFld.getText().toString().length())) : 0d;
Double minSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-")
? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(0,
this.scVertScaleRngTxtFld.getText().toString()
.indexOf('-'))) : 0d;
Double maxSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-")
? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(this.scVertScaleRngTxtFld.getText().toString()
.indexOf('-') + 1,
this.scVertScaleRngTxtFld.getText().toString()
.length())) : 0d;
// PIN auf Höhe Pfeil
x0 = (a + vVh + heVs) * Math.cos(Math.toRadians(this.startAngle));

+ 81
- 0
src/ch/spherIC/recurvebowsight/components/FlightCurveChart.java Переглянути файл

@@ -0,0 +1,81 @@
/**
* Copyright (C) 2005-2012 XELOG AG
*/
package ch.spherIC.recurvebowsight.components;
import android.content.Context;
import android.graphics.Color;
import ch.spherIC.recurvebowsight.R;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
/**
* @author FC Smilari
*/
public class FlightCurveChart {
private XYMultipleSeriesDataset dataSet;
public GraphicalView getView(final Context context) {
XYSeries series = new XYSeries("Flight Curve");
this.dataSet = new XYMultipleSeriesDataset(); // collection of series under one object.,there could any
this.dataSet.addSeries(series); // number of series
//customization of the chart
XYSeriesRenderer renderer = new XYSeriesRenderer(); // one renderer for one series
renderer.setColor(Color.RED);
renderer.setDisplayChartValues(false);
renderer.setChartValuesSpacing(5.5f);
renderer.setLineWidth(1f);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); // collection multiple values for one renderer or series
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("Flight Curve Graph");
mRenderer.setXTitle("Ditance [m]");
mRenderer.setYTitle("h [m]");
mRenderer.setZoomButtonsVisible(false);
mRenderer.setShowLegend(true);
mRenderer.setShowGridX(true); // this will show the grid in graph
mRenderer.setShowGridY(true);
mRenderer.setAntialiasing(true);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(context.getResources().getColor(R.color.qrt_translucent_white));
mRenderer.setMarginsColor(context.getResources().getColor(R.color.qrt_translucent_white));
// mRenderer.setXAxisMin(0);
// mRenderer.setYAxisMin(.5);
// mRenderer.setXAxisMax(5);
// mRenderer.setYAxisMax(50);
//
// mRenderer.setXLabels(0);
// mRenderer.addXTextLabel(1, "Income");
// mRenderer.addXTextLabel(2, "Saving");
// mRenderer.addXTextLabel(3, "Expenditure");
// mRenderer.addXTextLabel(4, "NetIncome");
mRenderer.setPanEnabled(true, true); // will fix the chart position
GraphicalView v = ChartFactory.getLineChartView(context, this.dataSet, mRenderer);
return v;
}
/**
* @return the dataSet
*/
public XYMultipleSeriesDataset getDataSet() {
return this.dataSet;
}
}

Завантаження…
Відмінити
Зберегти