Un'altra libreria (oltre alla gia' citata AndroidPlot) per disegnare grafici su Android e' GraphView
Rispetto alla precedente e' meno commentata ed di utilizzo un po' piu' difficile ma permette di mostrare dati in realtime ed ha lo zoom ed il pan dinamico mediante gesture
Un po' di indicazioni: il tutorial sul sito dello sviluppatore funziona solo con la versione 2.0 (al momento della scrittura di questo post la versione piu' recente e' la 3.0); per questo motivo anche io ho usato la versione 2
Inoltre di default i colori delle label sugli assi delle ascisse e delle ordinate ed il titolo sono bianchi per cui iniziando un progetto da zero con il nuovo SDK si deve cambiare il colore di background della activity (che gia' di suo e' bianco) altrimenti scompare tutto
-------------------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/graph1" />
</RelativeLayout>
-------------------------------------------
Usando il codice sotto riportato (un misto tra il codice di esempio ed alcune righe che ho inserito io) si ha come risultato questa immagine
-------------------------------------------
package com.test.graph;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.widget.LinearLayout;
import com.jjoe64.graphview.GraphView.GraphViewData;
import com.jjoe64.graphview.GraphView.GraphViewSeries;
import com.jjoe64.graphview.GraphView.LegendAlign;
import com.jjoe64.graphview.LineGraphView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int num = 150;
GraphViewData[] data = new GraphViewData[num];
double v=0;
for (int i=0; i<num; i++) {
v += 0.2;
data[i] = new GraphViewData(i, Math.sin(v));
}
GraphViewSeries seriesSin = new GraphViewSeries("Seno", Color.rgb(200, 50, 00), data);
//attenzione l'array dei dati deve essere completo
//se si omette per esempio di dichiarare dati[4] il programma genera una eccezione
GraphViewData[] dati = new GraphViewData[5];
dati[0] = new GraphViewData(0,0);
dati[1] = new GraphViewData(10,0.5);
dati[2] = new GraphViewData(15,1.5);
dati[3] = new GraphViewData(17,0.7);
dati[4] = new GraphViewData(22,0.7);
GraphViewSeries seriedati = new GraphViewSeries("Misure", Color.rgb(0, 250, 00), dati);
LineGraphView graphView = new LineGraphView(
this
, "Titolo Grafico"
);
// aggiungi la serie dati
graphView.addSeries(seriesSin);
graphView.addSeries(seriedati);
// finestra di visualizzazione del grafico
graphView.setViewPort(0, 20);
graphView.setScrollable(true);
graphView.setScalable(true);
// Legenda
graphView.setShowLegend(true);
graphView.setLegendAlign(LegendAlign.BOTTOM);
graphView.setLegendWidth(70);
LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
layout.addView(graphView);
}
martedì 30 ottobre 2012
lunedì 29 ottobre 2012
venerdì 26 ottobre 2012
Errore su Toast in Android
Un esempio di come puo' avere dei trabocchetti la programmazione su Android anche su cose semplici come la creazione di un widget Toast
Nel referenziare il context del comando Toast.maketext e' necessario riportare il nome della activity in cui si sviluppa il comando (in questo caso MainActivity) altrimenti si genera un errore
------------------------------------------------------
btngraph.setOnClickListener(new View.OnClickListener() {
private Toast toast;
public void onClick(View v) {
// Questo genera un errore
toast = Toast.makeText(this, R.string.errore, Toast.LENGTH_LONG);
// Questo NON genera un errore toast = Toast.makeText(MainActivity.this, R.string.errore, Toast.LENGTH_LONG);
toast.show();
}
Nel referenziare il context del comando Toast.maketext e' necessario riportare il nome della activity in cui si sviluppa il comando (in questo caso MainActivity) altrimenti si genera un errore
------------------------------------------------------
btngraph.setOnClickListener(new View.OnClickListener() {
private Toast toast;
public void onClick(View v) {
// Questo genera un errore
toast = Toast.makeText(this, R.string.errore, Toast.LENGTH_LONG);
// Questo NON genera un errore toast = Toast.makeText(MainActivity.this, R.string.errore, Toast.LENGTH_LONG);
toast.show();
}
Leggere DMG su Linux
Puo' accadere, specialmente adesso che Apple la sta facendo da padrona, di dover spacchettare un file .dmg ....come fare senza un Mac a disposizione ??
per prima cosa si scarica dmg2iso
apt-get install dmg2iso
in seguito si converte in formato img
dmg2iso pacchetto.dmg
quindi si monta il modulo per il file system hfsplus e si monta il file immagine
modprobe hfsplus
mount -t hfsplus -o loop pacchetto.img /media/sdc
per prima cosa si scarica dmg2iso
apt-get install dmg2iso
in seguito si converte in formato img
dmg2iso pacchetto.dmg
quindi si monta il modulo per il file system hfsplus e si monta il file immagine
modprobe hfsplus
mount -t hfsplus -o loop pacchetto.img /media/sdc
lunedì 22 ottobre 2012
Scambiare dati tra due Activity in Android
Per passare i dati tra due Acitivity, senza la necessita' di dichiarare variabili globali, si puo' usare un Bundle e inserirci i valori (specificando il formato di ogni variabile)
Di seguito un esempio
Attivita' 1 : spedisce i dati
----------------------------------------------------------------------------------
Bundle dataBundle = new Bundle();
dataBundle.putInt("gradini", gradino);
dataBundle.putDouble("portata1", Double.parseDouble(portata1.getText().toString()));
dataBundle.putDouble("soggiacenza1", Double.parseDouble(soggiacenza1.getText().toString()));
dataBundle.putDouble("portata2", Double.parseDouble(portata2.getText().toString()));
dataBundle.putDouble("soggiacenza2", Double.parseDouble(soggiacenza2.getText().toString()));
dataBundle.putDouble("portata3", Double.parseDouble(portata3.getText().toString()));
dataBundle.putDouble("soggiacenza3", Double.parseDouble(soggiacenza3.getText().toString()));
dataBundle.putDouble("portata4", Double.parseDouble(portata4.getText().toString()));
dataBundle.putDouble("soggiacenza4", Double.parseDouble(soggiacenza4.getText().toString()));
dataBundle.putDouble("portata5", Double.parseDouble(portata5.getText().toString()));
dataBundle.putDouble("soggiacenza5", Double.parseDouble(soggiacenza5.getText().toString()));
Intent Intentdati = new Intent();
Intentdati.setClass(MainActivity.this,Grafico.class);
Intentdati.putExtras(dataBundle);
startActivity(Intentdati);
----------------------------------------------------------------------------------
Attivita' 2 : riceve i dati
----------------------------------------------------------------------------------
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grafico);
Bundle da = getIntent().getExtras();
gradini = da.getInt("gradini");
portata1 = da.getDouble("portata1");
soggiacenza1 = da.getDouble("soggiacenza1");
portata2 = da.getDouble("portata2");
soggiacenza2 = da.getDouble("soggiacenza2");
portata3 = da.getDouble("portata3");
soggiacenza3 = da.getDouble("soggiacenza3");
portata4 = da.getDouble("portata4");
soggiacenza4 = da.getDouble("soggiacenza4");
portata5 = da.getDouble("portata5");
soggiacenza5 = da.getDouble("soggiacenza5");
----------------------------------------------------------------------------------
venerdì 19 ottobre 2012
Pulire la cache dei file Deb in Debian
Nel caso in cui sia necessario libera spazio da una Debian si puo' rimuovere la cache dei pacchetti .deb che sono contenuti nelle seguenti directory
/var/cache/apt/archives
/var/cache/apt/archives/partial
la loro cancellazione non crea problemi al normale funzionamento
altrimenti si puo' usare il piu' pulito
apt-get clean
/var/cache/apt/archives
/var/cache/apt/archives/partial
la loro cancellazione non crea problemi al normale funzionamento
altrimenti si puo' usare il piu' pulito
apt-get clean
NumberFormatException da conversione in Numero di un campo EditText
asd
Stavo cercando di convertire i dati ripresi da una EditText in un numero a virgola mobile utilizzando il seguente comando
st = Double.parseDouble(txtportata.getText().toString());
Immancabilmente pero' il programma mi generava una eccezione del tipo
NumberFormatException
relativa al fatto che la stringa non poteva essere convertita in un numero (per esempio per la presenza di spazi o comunque di caratteri differenti da quelli numerici).
Per forzare l'utente ad introdurre solo valori numerici ho modificato la proprieta' InputType a NumberDecimale della EditText.
In questo modo pero' non sembrava possibile inserire il valore del punto decimale.
Impiegando l'emulatore si ha la tasteria numerica sotto riportata e cliccando sui caratteri speciali appare la barra in cui sono comprese il punto, la virgola ed altri
Purtroppo pero' questi caratteri non vengono accettati dalla EditText
Per far apparire il punto decimale si deve arrivare alla tastiera sotto riportata ed effettuare doppio clic sul pulsante che racchiude la virgola ed il punto
A questo punto non vengono piu' generate eccezioni ed la conversione funziona correttamente
Stavo cercando di convertire i dati ripresi da una EditText in un numero a virgola mobile utilizzando il seguente comando
st = Double.parseDouble(txtportata.getText().toString());
Immancabilmente pero' il programma mi generava una eccezione del tipo
NumberFormatException
relativa al fatto che la stringa non poteva essere convertita in un numero (per esempio per la presenza di spazi o comunque di caratteri differenti da quelli numerici).
Per forzare l'utente ad introdurre solo valori numerici ho modificato la proprieta' InputType a NumberDecimale della EditText.
In questo modo pero' non sembrava possibile inserire il valore del punto decimale.
Impiegando l'emulatore si ha la tasteria numerica sotto riportata e cliccando sui caratteri speciali appare la barra in cui sono comprese il punto, la virgola ed altri
Purtroppo pero' questi caratteri non vengono accettati dalla EditText
Per far apparire il punto decimale si deve arrivare alla tastiera sotto riportata ed effettuare doppio clic sul pulsante che racchiude la virgola ed il punto
A questo punto non vengono piu' generate eccezioni ed la conversione funziona correttamente
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...