Problem: ein Messgerät Meter erstellen, die die Ortungsgenauigkeit des Gerätes angezeigt werden würde, aber die Herausforderung hier ist es wie ein Tachometer arbeitet die Daten dann OnLocationChanged geändertAndroid: Aktualisierung Spur Diagramm OnLocationChanged
Werkzeuge verwendet:
- Numetriclabz Ready-made-Lehre-Diagramm
- Android Studio
Algorithmus
den Winkel Anfahrt: Hier i sich nur 300 m als die niedrigste Genauigkeit
float getDistance = location.getAccuracy()/300;
int mAngle = Math.round(180 - (getDistance * 180));
-Code
package com.numetriclabz.gaugemap;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.numetriclabz.numandroidcharts.ChartData;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements LocationListener{
private static TextView accuracyTxt;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 0; // in Milliseconds // 5 Seconds
private LocationManager locationManager;
private static Context context;
private static GChart gauge;
private static LinearLayout gChart;
private static List values = new ArrayList<>();
private static Location location = null;
private static Handler handler = new Handler();
private static int timerCount = 2;
private static float getDistance;
private static int mAngle;
private static ArrayList<GChart> graphView = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
accuracyTxt = (TextView)findViewById(R.id.accuracyTxt);
context = this;
gauge = new GChart(context,null);
gChart = (LinearLayout)findViewById(R.id.gChart);
values.add(new ChartData(60f));
values.add(new ChartData(60f));
values.add(new ChartData(60f));
gauge.setData(values);
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
this
);
}
@Override
public void onLocationChanged(Location location) {
if(location != null && timerCount == 2){
this.location = location;
runnable.run();
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
public static Runnable runnable = new Runnable() {
@Override
public void run() {
try{
timerCount--;
handler.postDelayed(this,1000);
if(timerCount == -1){
getDistance = location.getAccuracy()/300;
mAngle = Math.round(180 - (getDistance * 180));
if(graphView.isEmpty()){
gauge.setAngle(mAngle);
gauge.invalidate();
gauge.refreshDrawableState();
gChart.addView(gauge);
graphView.add(gauge);
gChart.invalidate();
}else{
gauge.setAngle(mAngle);
gauge.invalidate();
}
accuracyTxt.setText(String.valueOf(location.getAccuracy()));
timerCount = 2;
handler.removeCallbacks(runnable);
}
}catch (Exception e){
e.printStackTrace();
}
}
};
}
PROBLEM: der Code funktioniert aber um die Ansicht oft zu aktualisieren, ist das Problem, das der Zeiger nicht ankreuzen wird, wenn Ich aktualisiere die GaugeChart-Werte, es wird nicht den Winkel in meinem Gauge-Diagramm aktualisieren, was mein Problem ist.
Gebrauchte Idee ich benutzt hatte gChart.removeAllViews() -Methode es mein Diagramm aktualisiert, aber es ist keine Benutzeranforderung, weil es wie ein Tachometer arbeiten soll, die Updates Wert einwandfreie es nur nur die Aussicht erschafft.
Here is a link to my android project file
die Hoffnung auf Ihre größten Überlegungen. Prost.