1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. GSUS24, 21.05.2012 #1
    GSUS24

    GSUS24 Threadstarter Neuer Benutzer

    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

    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

    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

    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

    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

    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

    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

  9. StefMa, 26.02.2013 #9
    StefMa

    StefMa Gewerbliches Mitglied

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. anzeigeinstrumente auf tablet

    ,
  2. drehzahmesser über tab

    ,
  3. programmierung tablet als tacho

    ,
  4. android tachometer example