2017-02-21 2 views
0

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:

  1. Numetriclabz Ready-made-Lehre-Diagramm
  2. 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.

Antwort

0

Ich habe gerade Anas Altair SpeedView verwendet und nur den Code geändert, um es wie ein Geolocation Accuracy Meter tatsächlich ein Tacho zu machen, aber ich änderte den Code, um meine Anforderung zu erfüllen.

Verwandte Themen