import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.TextView;
public class FlingActivity extends Activity {
private TextView gestureEvent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureEvent = (TextView)findViewById(R.id.test);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
SimpleOnGestureListener simpleOnGestureListener
= new SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
String swipe = "";
float sensitvity = 50;
// TODO Auto-generated method stub
if((e1.getX() - e2.getX()) > sensitvity){
swipe += "Swipe Left\n";
}else if((e2.getX() - e1.getX()) > sensitvity){
swipe += "Swipe Right\n";
}else{
swipe += "\n";
}
if((e1.getY() - e2.getY()) > sensitvity){
swipe += "Swipe Up\n";
}else if((e2.getY() - e1.getY()) > sensitvity){
swipe += "Swipe Down\n";
}else{
swipe += "\n";
}
gestureEvent.setText(swipe);
return super.onFling(e1, e2, velocityX, velocityY);
}
};
GestureDetector gestureDetector
= new GestureDetector(simpleOnGestureListener);
}
venerdì 13 aprile 2012
giovedì 12 aprile 2012
Semplice Insieme Julia
non poteva mancare il fedele compagno dell'insieme di Mandelbrot ovvero l'insieme di Julia
In pratica esiste una corrispondenza tra le coordinate nel piano complesso dell'insieme di Mandelbrot ed il corrispettivo insieme di Julia
L'esempio sopra riportato e' corrispondente al punto-0.125;0.75 dell'insieme di Mandelbrot
Il codice e' estremamente simile a quello del precedente post
package com.julia;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.widget.ImageView;
public class JuliaIntActivity extends Activity {
/** Called when the activity is first created. */
private static final double re_min = -2;
private static final double re_max = 2.0;
private static final double im_min = -2.0;
private static final double im_max = 2.0;
private static int iterazioni = 100;
private double ynew;
private double xnew;
private double a;
private double b;
private int test;
private double re_factor;
private double im_factor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); //240
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
view.setImageBitmap(bitmap);
re_factor = (re_max - re_min);
im_factor = (im_max - im_min);
a = -0.125;
b = 0.75;
// recupera le informazioni sulle dimensioni dello schermo
for (int i=0;i<width;i++)
{
for (int j=0;j<height;j++)
{
double x = im_min + i * im_factor / width;
double y = re_min + j * re_factor / height;
test = 0;
for (int k=0;k<iterazioni;k++)
{
xnew = x * x - y * y + a;
ynew = 2 * x * y + b;
if (((xnew*xnew)+(ynew*ynew))>4)
{
test = k;
k = iterazioni;
}
x = xnew;
y = ynew;
}
if (test%2 == 1)
{
//punto bianco
canvas.drawPoint(i, j, paint);
}
}
}
}
}
In pratica esiste una corrispondenza tra le coordinate nel piano complesso dell'insieme di Mandelbrot ed il corrispettivo insieme di Julia
L'esempio sopra riportato e' corrispondente al punto-0.125;0.75 dell'insieme di Mandelbrot
Il codice e' estremamente simile a quello del precedente post
package com.julia;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.widget.ImageView;
public class JuliaIntActivity extends Activity {
/** Called when the activity is first created. */
private static final double re_min = -2;
private static final double re_max = 2.0;
private static final double im_min = -2.0;
private static final double im_max = 2.0;
private static int iterazioni = 100;
private double ynew;
private double xnew;
private double a;
private double b;
private int test;
private double re_factor;
private double im_factor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); //240
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
view.setImageBitmap(bitmap);
re_factor = (re_max - re_min);
im_factor = (im_max - im_min);
a = -0.125;
b = 0.75;
// recupera le informazioni sulle dimensioni dello schermo
for (int i=0;i<width;i++)
{
for (int j=0;j<height;j++)
{
double x = im_min + i * im_factor / width;
double y = re_min + j * re_factor / height;
test = 0;
for (int k=0;k<iterazioni;k++)
{
xnew = x * x - y * y + a;
ynew = 2 * x * y + b;
if (((xnew*xnew)+(ynew*ynew))>4)
{
test = k;
k = iterazioni;
}
x = xnew;
y = ynew;
}
if (test%2 == 1)
{
//punto bianco
canvas.drawPoint(i, j, paint);
}
}
}
}
}
mercoledì 11 aprile 2012
Semplice Mandelbrot
un esempio di uso della grafica su Android per generare l'insieme di Mandelbrot
Per la cronaca sul mio telefono vengono impiegati circa 12,5 secondi per generare l'immagine con i parametri impostati nel programma sottostante (255 iterazioni per ciclo full screen)
----------------------------------------------------------------------------------------
package com.mandelbrot;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
public class MandelbrotIntActivity extends Activity {
/** Called when the activity is first created. */
private static final double re_min = -2.5;
private static final double re_max = 1.0;
private static final double im_min = -1.0;
private static final double im_max = 1.0;
private static int iterazioni = 255;
private double y;
private double x;
private double ynew;
private double xnew;
private double a;
private double b;
private int test;
private double re_factor;
private double im_factor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); //240
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
view.setImageBitmap(bitmap);
re_factor = (re_max - re_min);
im_factor = (im_max - im_min);
// recupera le informazioni sulle dimensioni dello schermo
for (int i=0;i<width;i++)
{
for (int j=0;j<height;j++)
{
double b = im_min + i * im_factor / width;
double a = re_min + j * re_factor / height;
x = 0.0;
y = 0.0;
test = 0;
for (int k=0;k<iterazioni;k++)
{
xnew = x * x - y * y + a;
ynew = 2 * x * y + b;
if (((xnew*xnew)+(ynew*ynew))>4)
{
test = k;
k = iterazioni;
}
x = xnew;
y = ynew;
}
if (test%2 == 1)
{
//punto bianco
canvas.drawPoint(i, j, paint);
}
}
}
}
}
----------------------------------------------------------------------------------------
Sempre giusto per la cronaca nel 1988 facevo piu' o meno la stessa cosa con la stessa risoluzione grafica ma con un Commodore 64 (lascio perdere i tempi di calcolo che erano della grandezza delle ore e non certo dei secondi)
Per la cronaca sul mio telefono vengono impiegati circa 12,5 secondi per generare l'immagine con i parametri impostati nel programma sottostante (255 iterazioni per ciclo full screen)
----------------------------------------------------------------------------------------
package com.mandelbrot;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
public class MandelbrotIntActivity extends Activity {
/** Called when the activity is first created. */
private static final double re_min = -2.5;
private static final double re_max = 1.0;
private static final double im_min = -1.0;
private static final double im_max = 1.0;
private static int iterazioni = 255;
private double y;
private double x;
private double ynew;
private double xnew;
private double a;
private double b;
private int test;
private double re_factor;
private double im_factor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); //240
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
view.setImageBitmap(bitmap);
re_factor = (re_max - re_min);
im_factor = (im_max - im_min);
// recupera le informazioni sulle dimensioni dello schermo
for (int i=0;i<width;i++)
{
for (int j=0;j<height;j++)
{
double b = im_min + i * im_factor / width;
double a = re_min + j * re_factor / height;
x = 0.0;
y = 0.0;
test = 0;
for (int k=0;k<iterazioni;k++)
{
xnew = x * x - y * y + a;
ynew = 2 * x * y + b;
if (((xnew*xnew)+(ynew*ynew))>4)
{
test = k;
k = iterazioni;
}
x = xnew;
y = ynew;
}
if (test%2 == 1)
{
//punto bianco
canvas.drawPoint(i, j, paint);
}
}
}
}
}
----------------------------------------------------------------------------------------
Sempre giusto per la cronaca nel 1988 facevo piu' o meno la stessa cosa con la stessa risoluzione grafica ma con un Commodore 64 (lascio perdere i tempi di calcolo che erano della grandezza delle ore e non certo dei secondi)
Sistema di riferimento per la grafica
Il sistema di riferimento delle coordinate per la grafica e' con l'origine 0,0 in alto a sinistra, con l'asse X orizzontale e l'asse Y verticale (per quanto possa avere senso dire orizzontale e verticale in qualcosa che puoi rigirare come vuoi...) comunque l'immagine spiega meglio di mille parole
Semplice grafica in Android
seguendo l'esempio trovato qui si puo' scrivere una mappa di pixel a schermo.
Prima di copiare il codice nel Layout deve essere trascintata una ImageView
Il risultato e' un punto rosso a coordinate 10,10 su sfondo nero
----------------------------------------------------------------------------------
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.RED);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
canvas.drawPoint(10, 10, paint);
view.setImageBitmap(bitmap);
Prima di copiare il codice nel Layout deve essere trascintata una ImageView
Il risultato e' un punto rosso a coordinate 10,10 su sfondo nero
----------------------------------------------------------------------------------
ImageView view = (ImageView) findViewById(R.id.imageView1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Paint paint = new Paint();
paint.setColor(Color.RED);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
canvas.drawPoint(10, 10, paint);
view.setImageBitmap(bitmap);
giovedì 5 aprile 2012
Problemi con aggiornamento ADT da 16 a 17
Giusto ieri ho effettuato l'aggiornamento da ADT 16 a 17 a causa del concomitante aggiornamento dell'SDK di Android. Il problema e' che improvvisamente alcuni programmi a cui stavo lavorando hanno deciso di non compilarsi piu' con un imperscrutabile errore
fortunatamente sono capitato qui dove viene spiegato che
error Binary XML file line #7. Error inflating class org.osmdroid.views.MapView
fortunatamente sono capitato qui dove viene spiegato che
- i file jar delle librerie esterne DEVONO risiedere nella directory libs
- non e' piu' necessario aggiungere alla Build Path le librerie esterne (le Android Depedencies vengono aggiornate da sole)
Semplice gestione touch
Per avere una semplice gestione (non multitouch o gesture) della pressione sullo schermo si puo' aggiungere all'Activity il metodo OnTouchEvent
public boolean onTouchEvent(MotionEvent event)
{ int x = (int)event.getX();
int y = (int)event.getY();
Log.d("s",Integer.toString(x));
Log.d("s",Integer.toString(y));
}
public boolean onTouchEvent(MotionEvent event)
{ int x = (int)event.getX();
int y = (int)event.getY();
Log.d("s",Integer.toString(x));
Log.d("s",Integer.toString(y));
}
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...