1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Tacho, Drehzahlmesser animieren

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von GSUS24, 21.05.2012.

  1. GSUS24, 21.05.2012 #1
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
    Hallo Leute,

    bin neu in der App-Programmierung und lese mich gerade erst ein.
    Unteranderem auch auf der Developerseite von Android.
    Ein paar Mitstudenten und ich wollen eine App ähnlich Torque Pro schreiben.
    Bei der verschiedene Signale(Drehzahl, Tacho, Bremsdruck, Längs-Querbeschleunigungen,...) vom Auto angezeigt werden sollen.
    Meine Aufgabe in diesem Projekt ist die Anzeige.

    Ich hab auch schon die Suchfunktion versucht, leider ohne Erfolg.
    Das gleich gilt auch für Google. Möglicherweise benutze ich einfach die falschen Schlagwörter. Darum erhoffe ich mir hier eine Starthilfe.

    Bei Torque sieht das ganze dann so aus
    anzeigeinstrumente.PNG

    Mir geht es jetzt hauptsächlich darum, wie ich solche Instrumente(Zeiger, Balken,...) animieren kann.

    Danke
     
  2. DieGoldeneMitte, 21.05.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Würde ich ganz popelig machen:

    Der Hintergrund wird als fertige Bitmap bereitgestellt.

    Die Zeiger werden von einer CustomView drübergemalt. (diese können Bitmaps sein,
    die je nach Wert gedreht und dann in den View gemalt werden).

    Für die animierte Wertänderung kann man einen Thread starten, der den Wert kontinuierlich von "ist" auf "soll" an den View übergibt und diesen dann (mit postInvalidate()) zum neu Malen bringt.
     
    GSUS24 bedankt sich.
  3. GSUS24, 04.09.2012 #3
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
    Mit der AChartEngine hab ich mir einen Tacho gebastelt. Zum Test läuft eine if-Schleife hoch. Die tatsächlichen Geschwindigkeiten kommen vom Bluetoothreceiver. Würd mich über ein Feedback freuen.

    Der Tacho sieht doch billig aus, reicht für meine Zwecke aber völlig aus.


    Code:
    package com.dynamictacho;
    
    import org.achartengine.GraphicalView;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class DynamicTachoActivity extends Activity 
    {
    
        private static GraphicalView view;
        private TachoGraph tacho = new TachoGraph();
        private static Thread thread;
            
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dynamic_tacho);
            
            thread = new Thread()
            {            
                public void run()
                {   
                    for (int i = 0; i < 281; i++) 
                    {
                        try {
                            Thread.sleep(100);
                            } 
                        catch (InterruptedException e) 
                            {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                            }
                                        
                        Speed v = MockDataV.getDatafromReceiver(i);
                        tacho.addNewSpeeds(v);
                        view.repaint();
                                      
                    }
                    
                }
                                
            };
            
            thread.start();
            
        }   
                   
        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
            getMenuInflater().inflate(R.menu.activity_dynamic_tacho, menu);
            return true;
        }
        
        @Override
        protected void onStart() 
        {
            super.onStart();
            view = tacho.getView(this);
            setContentView(view);
        }
         
    }
    
    Code:
    package com.dynamictacho;
    
    public class MockDataV 
    {    
        public static Speed getDatafromReceiver(int z)
        {    
            return  new Speed(z);  
        }
    }
    
    Code:
    package com.dynamictacho;
    
    public class Speed 
    {    
        private int v;
        
        public Speed(int v)
        {
            this.v = v;
        }
        
        public int getV() 
        {
            return v;
        }
    
    }
        
    
    Code:
    package com.dynamictacho;
    
    import org.achartengine.ChartFactory;
    import org.achartengine.GraphicalView;
    import org.achartengine.model.CategorySeries;
    import org.achartengine.renderer.DialRenderer;
    import org.achartengine.renderer.SimpleSeriesRenderer;
    import org.achartengine.renderer.DialRenderer.Type;
    
    import android.content.Context;
    import android.graphics.Color;
    
    public class TachoGraph 
    {
        private GraphicalView view;
            
        CategorySeries category = new CategorySeries("Tacho");
        DialRenderer renderer = new DialRenderer();
        SimpleSeriesRenderer r = new SimpleSeriesRenderer();
    
        public TachoGraph()
        {
            category.add("Geschwindigkeit", 0);
            renderer.setChartTitleTextSize(20);
            renderer.setLabelsTextSize(15);
            renderer.setLegendTextSize(15);
            renderer.setMargins(new int[] {0, 0, 0, 0});
            r.setColor(Color.RED);
            renderer.addSeriesRenderer(r);
            renderer.setLabelsTextSize(10);
            renderer.setLabelsColor(Color.BLACK);
            renderer.setShowLabels(true);
            renderer.setVisualTypes(new DialRenderer.Type[] {Type.NEEDLE});
            renderer.setMinValue(0);
            renderer.setMaxValue(280);
            renderer.setMajorTicksSpacing(20);
            renderer.setShowLegend(false);
            renderer.setMinorTicksSpacing(10);
            
            renderer.setAngleMax(150);
            renderer.setAngleMin(360);
            
        }
            
        public GraphicalView getView(Context context) 
        {
            view =  ChartFactory.getDialChartView(context, category, renderer);
                    return view;
        }
            
        public void addNewSpeeds(Speed v)
        {
            category.set(0,"Geschwindigkeit", v.getV());
        }
    
        
    }
    
     
  4. GSUS24, 05.09.2012 #4
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
    Ich versuche grad den Tacho und Drehzahlmesser in ActionBar Tabs zu packen. Im Fragment leg ich das Layout fest.
    Wie kann ich die Tabs updaten?


    Code:
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            
            final TachoGraph tacho = new TachoGraph();
            final GraphicalView chart = tacho.getView(inflater.getContext());
            
            
            return chart;       
                   
        }
    
     
  5. GSUS24, 26.09.2012 #5
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
    Bin hier leider immer noch nicht weitergekommen!!!

    Hat wirklich niemand eine Idee?
    Das ganze soll so wie oben funktionieren, nur eben in Tabs.

    Bin jetzt gute 2 Tage dran und bin nicht wirklich schlauer als zuvor.
     
  6. v Ralle v, 27.09.2012 #6
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Hallo,

    ich habe mir jetzt nicht alles durchgelesen, aber vielleicht hilft dir mein Tutorial weiter: Android SDK: Creating a Rotating Dialer

    Darin beschreibe ich, wie man Bitmaps animiert und dreht. Das Projekt dazu kannst du dir auch runterladen.
     
  7. GSUS24, 28.09.2012 #7
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
    Das zweite Ziffernblatt war recht einfach einzubetten.

    Code:
    package com.dynamictacho;
    
    import org.achartengine.GraphicalView;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.LinearLayout;
    
    public class DynamicTachoActivity extends Activity 
    {
    
        private static GraphicalView view;
        private TachoGraph tacho = new TachoGraph();
        
        private static GraphicalView view2;
        private RpmGraph rpm = new RpmGraph();
            
        private static Thread thread;
            
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dynamic_tacho);
                       
            thread = new Thread()
            {            
                public void run()
                {   
                    for (int i = 0, j=0; i < 201 && j<8001; i++,j+=40) 
                    {
                        try {
                            Thread.sleep(100);
                            } 
                        catch (InterruptedException e) 
                            {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                            }
                                        
                        Speed v = MockDataV.getDatafromReceiver(i);
                        tacho.addNewSpeeds(v);
                        view.repaint();
                                            
                        EngSpeed w = MockDataW.getDatafromReceiver(j);
                        rpm.addNewEngSpeeds(w);
                        view2.repaint();
                                                         
                    }
                    
                }
                                
            };
            
            thread.start();
            
        }   
                   
        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
            getMenuInflater().inflate(R.menu.activity_dynamic_tacho, menu);
            return true;
        }
        
        @Override
        protected void onStart() 
        {        
            super.onStart();
            
            LinearLayout layout1 = (LinearLayout) findViewById(R.id.tacho);
            view = tacho.getView(this);
            layout1.addView(view);    
            
            LinearLayout layout2 = (LinearLayout) findViewById(R.id.rpm);
            view2 = rpm.getView(this);
            layout2.addView(view2);
            
        }
         
    }
    
    Code:
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        >
    
        <LinearLayout
    
            android:id="@+id/tacho"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            />
    
        <LinearLayout
    
            android:id="@+id/rpm"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            />
    
    </LinearLayout>
    
    
    Ich will die Ziffernblätter und verschiedenen ProgressBars in Tabs packen.

    Mit den ganzen Tutorials im Netz bekomm ich nur die erste View bei Start hin. Die Views upzudaten find ich einfach nichts im Netz.

    Bin über jede Hilfestellung dankbar!!!
     
  8. GSUS24, 26.02.2013 #8
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2012
  9. StefMa, 26.02.2013 #9
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010

Diese Seite empfehlen