Autore Topic: Qualche domanda su uso ImageView per contenere immagine toccabile, please  (Letto 2021 volte)

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Ciao,
ho realizzato un'applicazione che fà la seguente cosa: alla partenza dell'applicazione si avvia un'Activity principale (attualmente è l'unica activity) che mostra al proprio interno l'immagine di un corpo umano (dentro una view di tipo ImageView).

Nell'Activitty ho implementato il metodo onTouch che per ora semplicemente visualizza nel LogCat le coordinate (X,Y) del punto toccato dall'utente.

Vorrei sapere se la strategia usata per quello che devo fare è corretta e poi farvi un paio di domande su dei dubbi che ho in merito a ciò che ho fatto (sono molto newbye con Android)

1) main.xml per il layout: In pratica ho fatto questo: contiene un banalissimo LinearLayout che al suo interno contiene una View di tipo ImageView che ha come sfondo il Drawable frontale.png (l'immagine del corpo umano)

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" >
 
          <ImageView android:id="@+id/imageView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:src="@drawable/frontale"
                android:scaleType="matrix">
          </ImageView>
         
</LinearLayout>

2) Infine ho sviluppato la classe AppTestActivity (l'unica Activity) che implementa l'OnTouchListener sulla view che visualizza l'immgine del corpo umano:

Codice: [Seleziona]
package app.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class AppTestActivity extends Activity {
       
        private static final String TAG = "Touch";
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // Recupera il riferimento all'ImageView dal layout e lo assegna a view:
        ImageView view = (ImageView) findViewById(R.id.imageView);
       
        // Dichiara un nuovo oggetto OnTouchListener e ne implementa il metodo onTouch:
        OnTouchListener l = new OnTouchListener() {
                       
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                Log.i("Metodo", "Sono entrato dentro onTouch");
                                float x = event.getX();                                                                // Recupera la coordinata X del punto toccato
                        float y = event.getY();                                                                // Recupera la coordinata Y del punto toccato
                        System.out.println("X: " + x + " Y: " + y);
                                return false;
                        }
                };
               
                // Setta l'oggetto OnTouchListener sull'ImageView che contiene l'immagine da visualizzare:
                view.setOnTouchListener(l);
                                                              
    }
   
}

Così nello schermo si visualizza l'immagine del corpo umano e quando l'utente tocca lo schermo nel LogCat mi appare la posizione di dove ha toccato, qualcosa tipo:

Codice: [Seleziona]
08-11 07:22:20.538: INFO/Metodo(358): Sono entrato dentro onTouch
08-11 07:22:20.538: INFO/System.out(358): X: 180.56427 Y: 263.54907

DOMANDE:

1) Come strategia dite che và bene? Nel senso...dovendo visualizzare un'immagine toccabile (poi dovrò tenere nota dei punto del corpo umano ed toccati) una View di tipo ImageView và bene? è quello che dovrebbe fare per me o la stò usando in modo inappropriato?

2) Quando tocco lo schermo nel LogCat mi appare la posizione del punto toccato (come mostrato sopra)...ma...in che unità di misura mi vengono restituiti i valori di X ed Y? Temo che siano in px...sbaglio?

Io avrei la necessità di avere tutto in dp poichè sostanzialmente l'applicazione deve poter funzionare su vari dispositivi con dimensioni dello schermo e risoluzioni diverse...in pratica ho la necessità di avere i valori di X e di Y in dp, si può fare? qualche idea?

3) Inserendo l'ImageView (che come sfondo imposta l'immagine del corpo umano) dentro il LinearLayout, l'immagine di sfondo non occupa tutto lo schermo sull'emulatore ma vi è un margine nero abbastanza spesso a destra ed in basso, come mai? Nel main.xml del layout ho messo:

Codice: [Seleziona]
android:layout_width="fill_parent"
android:layout_height="fill_parent"

Così non dovrebbe occupare tutte le dimensioni del contenitore? (quindi del LinearLayout, quindi dello schermo)?

4) Il metodo setOnTouchListener(), nel mio specifico caso, è applicabile solo all'ImageView e non al LinearLayout perchè quest'ultimo non è una View, giusto?

Grazie mille
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #1 il: 11 Agosto 2011, 09:59:20 CEST »
0
1) secondo me va bene usare una ImageView

2) Il problema è che dovrai gestire risoluzione, fattori di forma e orientazioni sempre diversi. Non ho guardato, ma io cercherei di ottenere le dimensioni della ImageView visualizzata e poi in base a quelle sai come interpretare le coordinate dei punti toccati. In questo modo l'approccio è del tutto generale.

3) Perchè usarla come sfondo? Non era meglio metterla proprio nell'ImageView? E poi tieni conto che facendo fill-parent la ImageView andrà a riempire tutto lo spazio disponibile, qualsiasi sia orientazione e fattore di forma. Potrebbe non essere l'ideale.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #2 il: 11 Agosto 2011, 10:19:10 CEST »
0
1) secondo me va bene usare una ImageView

2) Il problema è che dovrai gestire risoluzione, fattori di forma e orientazioni sempre diversi. Non ho guardato, ma io cercherei di ottenere le dimensioni della ImageView visualizzata e poi in base a quelle sai come interpretare le coordinate dei punti toccati. In questo modo l'approccio è del tutto generale.

3) Perchè usarla come sfondo? Non era meglio metterla proprio nell'ImageView? E poi tieni conto che facendo fill-parent la ImageView andrà a riempire tutto lo spazio disponibile, qualsiasi sia orientazione e fattore di forma. Potrebbe non essere l'ideale.
2)secondo me ti conviene, come dice bradipao farti dare le dimensioni in PX delll'imagine visualizzata, poi l'onTouchListener ti da i PX effettivi di tocco rispetto all'immagine (se il listener è sull'immagine è cosi).
Te poi ti fai un metodino che ti da in % di altezza e larghezza la posizione di tocco.
Poi te sai che la tua immagine al 50% di altezza 50% di larghezza ha l'ombelico e quindi hai gestito tutte le risoluzioni (in teoria...)

3) anche qui,occhio alle deformazioni dell'immagine


Citazione
4) Il metodo setOnTouchListener(), nel mio specifico caso, è applicabile solo all'ImageView e non al LinearLayout perchè quest'ultimo non è una View, giusto?

SBAGLIATISSIMO, LinearLayout estende View! quando hai dubbi di questo tipo la reference ufficiale aiuta LinearLayout | Android Developers
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #3 il: 11 Agosto 2011, 10:35:29 CEST »
0
1) secondo me va bene usare una ImageView

2) Il problema è che dovrai gestire risoluzione, fattori di forma e orientazioni sempre diversi. Non ho guardato, ma io cercherei di ottenere le dimensioni della ImageView visualizzata e poi in base a quelle sai come interpretare le coordinate dei punti toccati. In questo modo l'approccio è del tutto generale.

3) Perchè usarla come sfondo? Non era meglio metterla proprio nell'ImageView? E poi tieni conto che facendo fill-parent la ImageView andrà a riempire tutto lo spazio disponibile, qualsiasi sia orientazione e fattore di forma. Potrebbe non essere l'ideale.

Piano piano...che sono molto principiante...

Per quanto riguarda la risoluzione...tu dici che per prima cosa dovrei recuperare le dimensioni dell'Image View...io ho provato a fare così dentro il metodo onCreate (quello di prima):

Codice: [Seleziona]
// Recupera il riferimento all'ImageView dal layout e lo assegna a view:
        ImageView view = (ImageView) findViewById(R.id.imageView);
       
        xView = view.getWidth();
        yView = view.getHeight();
       
        System.out.println("Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);

Solo che così facendo nel LogCat mi appare:

Codice: [Seleziona]
08-11 08:11:02.184: INFO/System.out(358): Larghezza ImageView: 0 Altezza ImageView: 0

E non è possibile che le dimensini in larghezza ed altezza siano 0  perchè l'immagine viene visualizzata !!! Come mai ?!?! Ho sbagliato qualcosa ?

Per quanto riguarda l'altra risposta che mi hai dato: che intendi dire che  sarebbe meglio metterla proprio dentro l'ImageView?
Intendi dire che anzichè impostarla come sfondo dentro il file main.xml del layout dovrei usare il metodo setImageBitmap(Bitmap bm) nel codice Java? (non ho ancora provato, lo ho trovato guardando sulla documentazione ufficiale a: ImageView | Android Developers )

Scusa la domanda probabilmente banalissima ma che differenza c'è nell'impostare l'immagine in questo modo ed impostarla come sfondo? Perchè è meglio?

Tnx
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #4 il: 11 Agosto 2011, 11:27:06 CEST »
0
Ok una cosa alla volta.

Nella OnCreate le dimensioni non sono ancora state definite. La OnCreate viene chiamata appunto nella fase di "creazione" dell'activity, prima che il layout sia stato tracciato dal framework (considera ad esempio che alcune View avranno dimensione dipendente da come potresti impostarle nella OnCreate stessa).

Per prova, metti un Button nella activity, e associato a quel Button preleva le dimensioni della View. Vedrai che non sono più 0.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #5 il: 11 Agosto 2011, 11:27:29 CEST »
0
la dimensione prendila nella onResume, nella onCreate gli oggetti non sono ancora stati creati!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #6 il: 11 Agosto 2011, 12:21:26 CEST »
0
la dimensione prendila nella onResume, nella onCreate gli oggetti non sono ancora stati creati!

Ragazzi,
quì c'è qualcosa che non và...ho provato a fare come mi avete consigliato a prendere le dimensioni della View dentro la onResume anzichè dentro la onCreate ma continua a dare lo stesso problema...continua a dire che le dimensioni della View sono 0 in larghezza e 0 in altezza...

Vi allego il codice della mia Activity come è stato modificato:

Codice: [Seleziona]
package app.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class AppTestActivity extends Activity {
       
        private static final String TAG = "Touch";
        ImageView view;
        int xView;
        int yView;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        System.out.println("Entrato in onCreate --> view punta a: " + view);
        // Recupera il riferimento all'ImageView dal layout e lo assegna a view:
        view = (ImageView) findViewById(R.id.imageView);
        System.out.println("onCreate, ho recuperato l'ImageView --> view punta a: " + view);
       
       
        // Dichiara un nuovo oggetto OnTouchListener e ne implementa il metodo onTouch:
        OnTouchListener l = new OnTouchListener() {
                       
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                Log.i("Metodo", "Sono entrato dentro onTouch");
                                float x = event.getX();                                                                // Recupera la coordinata X del punto toccato
                        float y = event.getY();                                                                // Recupera la coordinata Y del punto toccato
                        System.out.println("X: " + x + " Y: " + y);
                                return false;
                        }
                };
               
                // Setta l'oggetto OnTouchListener sull'ImageView che contiene l'immagine da visualizzare:
                view.setOnTouchListener(l);
                                                                      
    }
   
    @Override
        protected void onResume() {
            super.onResume();
            Log.i("ActivityDemo", "Richiamato onResume()");
           
            System.out.println("onResume -> view punta a: " + view);
           
            xView = view.getWidth();
        yView = view.getHeight();
       
        System.out.println("OnResume --> Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);
           
    }
   
}

Come potete vedere adesso la situazione è che: dichiaro la variabile ImageView view prima di fare l'override dei metodi, entrando nell'onCreate() assegna a view il riferimento recuperando la view dalle risorse. Entrando nel metodo onResume() infatti si trova valorizzata tale variabile...però quando vado a recuperare la larghezza e l'altezza della View...continua a dire 0

Codice: [Seleziona]
08-11 10:15:49.265: INFO/ActivityDemo(462): Richiamato onResume()
08-11 10:15:49.275: INFO/System.out(462): onResume -> view punta a: android.widget.ImageView@40518520
08-11 10:15:49.275: INFO/System.out(462): OnResume --> Larghezza ImageView: 0 Altezza ImageView: 0

Come mai? Avete qualche idea? Come potrei risolvere?

Grazie mille per l'aiuto
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #7 il: 11 Agosto 2011, 12:28:42 CEST »
0
Come mai? Avete qualche idea? Come potrei risolvere?

Come avevo detto sopra, per prova metti un Button e recupera le dimensioni sulla OnClick. Devono essere diverse da 0 altrimenti c'è qualcos altro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #8 il: 11 Agosto 2011, 14:22:58 CEST »
0
Come avevo detto sopra, per prova metti un Button e recupera le dimensioni sulla OnClick. Devono essere diverse da 0 altrimenti c'è qualcos altro.

Come avevo detto sopra, per prova metti un Button e recupera le dimensioni sulla OnClick. Devono essere diverse da 0 altrimenti c'è qualcos altro.

Allora,
la situazione è questa. Se uso questo codice nel metodo onCreate():

Codice: [Seleziona]
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        System.out.println("Entrato in onCreate --> view punta a: " + view);
        // Recupera il riferimento all'ImageView dal layout e lo assegna a view:
        view = (ImageView) findViewById(R.id.imageView);
        System.out.println("onCreate, ho recuperato l'ImageView --> view punta a: " + view);
       
       
        // Dichiara un nuovo oggetto OnTouchListener e ne implementa il metodo onTouch:
        OnTouchListener l = new OnTouchListener() {
                       
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                Log.i("Metodo", "Sono entrato dentro onTouch");
                                float x = event.getX();                                                                // Recupera la coordinata X del punto toccato
                        float y = event.getY();                                                                // Recupera la coordinata Y del punto toccato
                        System.out.println("X: " + x + " Y: " + y);
                                return false;
                        }
                };
               
                // Setta l'oggetto OnTouchListener sull'ImageView che contiene l'immagine da visualizzare:
                view.setOnTouchListener(l);
               
                Button button = new Button(this);                                // Crea un nuovo bottone
                button.setText("BOTTONE");                        // Setta il testo del bottone appena creato
               
                button.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                System.out.println("Bottone premuto !!!");
                                xView = v.getWidth();
                        yView = v.getHeight();
                       
                        System.out.println("OnResume --> Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);
                        }
                });

                setContentView(button);
               
        }

Succede che non mi viene più visualizzata l'ImageView con l'immagine del corpo umano al suo interno ma mi viene visualizzato solo un grosso bottone a tutto schermo (mmm perchè? Ipotizzo perchè trattandosi di un linear layout gli stò sostituendo il contenuto mediante l'istruzione: setContentView(button);

Comunque sia...premendo il bottone questa volta appaiono correttamente le sue dimensioni:

Codice: [Seleziona]
08-11 10:55:45.511: INFO/System.out(418): Bottone premuto !!!
08-11 10:55:45.511: INFO/System.out(418): OnResume --> Larghezza ImageView: 320 Altezza ImageView: 480

Non riesco proprio a capire perchè per l'ImageView, di cui ho il riferimento nella variabile view, questa cosa non funzioni...please help me che inizio ad essere disperato :-/

Grazie
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #9 il: 11 Agosto 2011, 14:27:50 CEST »
0
Non devi sostituire tutto il tuo layout (main) col button (setcontentvi(button)).

Il button lo metti in main.xml e ci fai riferimento con la solita findViewById.


EDIT: il metodo più rapido per chiarirti le idee su questi concetti è fare le HelloView sul sito ufficiale android.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #10 il: 11 Agosto 2011, 19:12:11 CEST »
0
Non devi sostituire tutto il tuo layout (main) col button (setcontentvi(button)).

Il button lo metti in main.xml e ci fai riferimento con la solita findViewById.


EDIT: il metodo più rapido per chiarirti le idee su questi concetti è fare le HelloView sul sito ufficiale android.

In realtà stò seguendo Guida per lo sviluppatore di Massimo Carli, sono andato a rinfrescarmi le idee sugli esempi che mi avevo fatto in precedenza ed ho fatto come dici te: inserito il bottone nel layout...

Ora però si raggiunge il paranormale, ho risolto il problema dell'inserire il bottone nel layout insieme all'ImageView (ora ho capito bene la logica che ci stà dietro), se premo il bottone mi restituisce correttamente le dimensioni dell'ImageView inserita sopra di esso...perfetto...bellissimo...

Tuttavia se provo a reperire automaticamente le dimensioni (x,y) dentro i metodi onCreate() o onResume() non le trova...e questo è assurdo (probabilmente mi sfugge qualcosa di fondamentale circa il ciclo di vita delle Activity?)

Questo è il mio codice molto commentato di ciò che ho fatto e che non funziona correttamente:

Codice: [Seleziona]
package app.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class AppTestActivity extends Activity {
       
        private static final String TAG = "Touch";
        ImageView view;                                        // Conterrà il riferimento all'ImageView così che sia condiviso tra onCreate() ed onResume()                       
       
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // Recupera il riferimento all'ImageView dalle risorse e lo assegna alla variabile view:
        view = (ImageView) findViewById(R.id.imageView);
        System.out.println("onCreate, ho recuperato l'ImageView --> view punta a: " + view);
       
        // Dichiaro un bottone e gli assegno il riferimento ottenuto dalla classe R del bottone dichiarato nel layout:
        Button pressButton = (Button) findViewById(R.id.pressButton);
       
        /* Listener della pressione del bottone: quando il bottone è clickato stampa le posizioni (x,y) della ImageView
         * associata alla variabile view */
        pressButton.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                        System.out.println("Bottone premuto");
                       
                        int xView = view.getWidth();
                int yView = view.getHeight();
                System.out.println("OnCreate--> Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);
                }
        });
       
        // Dichiara un nuovo oggetto OnTouchListener e ne implementa il metodo onTouch:
        OnTouchListener l = new OnTouchListener() {
                       
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                Log.i("Metodo", "Sono entrato dentro onTouch");
                                float x = event.getX();                                                                // Recupera la coordinata X del punto toccato
                        float y = event.getY();                                                                // Recupera la coordinata Y del punto toccato
                        System.out.println("X: " + x + " Y: " + y);
                                return false;
                        }
                };
               
                // Setta l'oggetto OnTouchListener sull'ImageView che contiene l'immagine da visualizzare:
                view.setOnTouchListener(l);
               
                // Mette dentro xView ed yView le coordinate (x,y) dell'ImageView associata a view (NON FUNZIONA !!!)
                int xView = view.getWidth();
        int yView = view.getHeight();
        System.out.println("OnCreate() --> Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);
                       
        }
   
    @Override
        protected void onResume() {
                super.onResume();
                Log.i("ActivityDemo", "Richiamato onResume()");
               
                System.out.println("initOnResume --> view punta a: " + view);
                // Mette dentro xView ed yView le coordinate (x,y) dell'ImageView associata a view (NON FUNZIONA !!!)
                int xView = view.getWidth();
        int yView = view.getHeight();
        System.out.println("OnResume() --> Larghezza ImageView: " + xView + " Altezza ImageView: " + yView);
    }
   
   
}

Questo invece è il LogCat:

Codice: [Seleziona]
08-11 16:57:08.852: INFO/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=app.test/.AppTestActivity } from pid 515
08-11 16:57:09.253: INFO/ActivityManager(61): Start proc app.test for activity app.test/.AppTestActivity: pid=524 uid=10054 gids={}
08-11 16:57:10.722: INFO/System.out(524): onCreate, ho recuperato l'ImageView --> view punta a: android.widget.ImageView@40518bd8
08-11 16:57:10.732: INFO/System.out(524): OnCreate() --> Larghezza ImageView: 0 Altezza ImageView: 0
08-11 16:57:10.732: INFO/ActivityDemo(524): Richiamato onResume()
08-11 16:57:10.732: INFO/System.out(524): OnResume --> view punta a: android.widget.ImageView@40518bd8
08-11 16:57:10.732: INFO/System.out(524): OnResume() --> Larghezza ImageView: 0 Altezza ImageView: 0
08-11 16:57:10.933: INFO/ActivityManager(61): Displayed app.test/.AppTestActivity: +1s695ms
08-11 16:59:12.722: INFO/System.out(524): Bottone premuto
08-11 16:59:12.722: INFO/System.out(524): OnCreate--> Larghezza ImageView: 320 Altezza ImageView: 427

Come potete vedere dentro onCreate() vedo il riferimento a cui punta view...poi gli provo a far stampare automaticamente larghezza ed altezza dell'ImageView associata alla variabile view e fallisce danto 0 ad entrambe. Poi entro dentro al metodo onResume() e view punta sempre allo stesso oggetto (ho messo la variabile view fuori dal metodo onCreate proprio per farla condividere tra i vari metodi)...e stessa cosa dà 0 sia come altezza che come larghezza...
Infine c'è il log di ciò che accade dopo aver premuto il bottone e come potete vedere invece questa volta FUNZIONA...mi ritorna larghezza ed altezza dell'ImageView associata alla variabile view nel metodo onCreate() (tra l'altro il listener del bottone come potete vedere è stato dichiarato dentro l'onCreate())

Come mai tutto ciò? Dov'è che sbaglio?

Grazie
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #11 il: 11 Agosto 2011, 19:34:49 CEST »
+1
Che funzionasse col Button non avevo dubbi.  :-)

Molto probabilmente (non conosco così a fondo il framework) la prima volta che esegue OnResume() ancora non è stato completato il layout.

Comunque una semplice soluzione potrebbe essere questa: quando viene invocato il listener del tocco sull'immagine, se le dimensioni dell'immagine (variabili membro dell'activity) sono 0, le leggi, le memorizzi e le usi.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #12 il: 11 Agosto 2011, 19:43:43 CEST »
0
Che funzionasse col Button non avevo dubbi.  :-)

Molto probabilmente (non conosco così a fondo il framework) la prima volta che esegue OnResume() ancora non è stato completato il layout.

Comunque una semplice soluzione potrebbe essere questa: quando viene invocato il listener del tocco sull'immagine, se le dimensioni dell'immagine (variabili membro dell'activity) sono 0, le leggi, le memorizzi e le usi.

A quanto pare è proprio come dici te: la prima volta che viene eseguito onResume non funziona, se poi apro un'altra applicazione qualsiasi e torno sulla mia applicazione, viene rieseguito onResume per la seconda volta e questa volta fornisce correttamente le dimensioni x ed y...madò...

Dopo proverò a fare come mi hai detto mettendo tutto dentro al metodo onTouch...in finale a me serve avere le dimensioni dell'immagine per sapere come gestire il tocco...quindi in teoria potrebbe andar bene anche metterle all'inizio del listerner relativo al tocco dello schermo...in teoria...

Poi provo e ti faccio sapere

Grazie
Andrea

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #13 il: 12 Agosto 2011, 10:45:05 CEST »
0
Che funzionasse col Button non avevo dubbi.  :-)

Molto probabilmente (non conosco così a fondo il framework) la prima volta che esegue OnResume() ancora non è stato completato il layout.

Comunque una semplice soluzione potrebbe essere questa: quando viene invocato il listener del tocco sull'immagine, se le dimensioni dell'immagine (variabili membro dell'activity) sono 0, le leggi, le memorizzi e le usi.

Ok,
ho risolto usando questa strategia.

Grazie

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Qualche domanda su uso ImageView per contenere immagine toccabile, please
« Risposta #14 il: 12 Agosto 2011, 10:51:06 CEST »
0
avevo sbattuto tantissimo la testa anche io sulla misura delle immagini e non ne ero venuto fuori (volevo misurare la dimensione di un contextRail a runtime), ma non ottenevo le dimensioni.
Ho letto documentazione ecc, esistono i metodi getMeasureHeight ecc, ma non son mai riuscito a farli funzionare... non ho ancora capito quando effettivamente le misurazioni vengono fatte...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia