Autore Topic: Resizi ImageView  (Letto 822 volte)

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Resizi ImageView
« il: 06 Novembre 2011, 15:29:56 CET »
0
Codice (Java): [Seleziona]
LinearLayout l = new LinearLayout(CostruzioneDinamicaPaginaActivity.this);
                               
                        ImageView image = new ImageView(CostruzioneDinamicaPaginaActivity.this);
                        image.setImageResource(R.drawable.icon);
                       
                        l.addView(image);

Come posso assegnare una dimensione specifica alla mia immagini???
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.

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:Resizi ImageView
« Risposta #1 il: 06 Novembre 2011, 16:09:55 CET »
+1
Premessa 1: Costruire i layout in modo programmatico e dinamico non è la via più semplice in Android, esempi, tutorial e app di riferimento tendono ad usare esclusivamente il modo dichiarativo (XML). Ovviamente dipende da cosa ci devi fare, ma se hai la possibilità di scegliere, ripensa tutto in termini di layout XML, perchè poi sarà tutto molto molto più semplice.

Premessa 2: Impostare dimensioni precise degli elementi grafici è fonte di guai per quanto riguarda il supporto ai vari schermi e alle varie risoluzioni. Anche in questo caso, se puoi fanne a meno.

Torno alla tua domanda, la dimensione la fissi impostando le proprietà layout_width e layout_height del file XML di layout, oppure in modo programmatico dovrebbe andar bene (vado a memoria):

Codice (Java): [Seleziona]
image_view.getLayoutParams().width= 20
image_view.getLayoutParams().height = 30
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Re:Resizi ImageView
« Risposta #2 il: 06 Novembre 2011, 16:29:23 CET »
0
Grazie per i tuoi suggerimenti, comunque li conoscevo e non posso applicarli nella Activity che sto creando poiche le immagini le prendo da internet e dipendono dalla risposta di un db, il che significa che non conosco il numero esatto!!!

Ho provato il codice che mi hai dato ma mi da un NullPointerException!!!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:Resizi ImageView
« Risposta #3 il: 06 Novembre 2011, 16:41:31 CET »
0
perdona la domanda stupida, ma hai cambiato il nome dell'oggetto da image_view dell'esempio a image del tuo codice...?

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Re:Resizi ImageView
« Risposta #4 il: 06 Novembre 2011, 16:49:06 CET »
0
 :-) Certamente  o_O
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.

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:Resizi ImageView
« Risposta #5 il: 06 Novembre 2011, 17:30:13 CET »
0
Grazie per i tuoi suggerimenti, comunque li conoscevo e non posso applicarli nella Activity che sto creando poiche le immagini le prendo da internet e dipendono dalla risposta di un db, il che significa che non conosco il numero esatto!!!

Per liste di lunghezza indefinita ci sono le ListView o per immagini meglio le GridView, che sono facilissime da gestire nei layout XML.



Ho provato il codice che mi hai dato ma mi da un NullPointerException!!!

E' vietatissimo dichiarare di ricevere un errore senza mostrarne il LogCat.  ;-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Re:Resizi ImageView
« Risposta #6 il: 07 Novembre 2011, 09:44:34 CET »
0
E' vietatissimo dichiarare di ricevere un errore senza mostrarne il LogCat.  ;-)

Chiedo scusa per il file log mancato!!!

Codice (Java): [Seleziona]
11-07 08:38:15.677: ERROR/AndroidRuntime(406): FATAL EXCEPTION: main
11-07 08:38:15.677: ERROR/AndroidRuntime(406): java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.Activity/fr.Activity.CostruzioneDinamicaPaginaActivity}: java.lang.NullPointerException
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.os.Looper.loop(Looper.java:123)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread.main(ActivityThread.java:3647)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at java.lang.reflect.Method.invokeNative(Native Method)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at java.lang.reflect.Method.invoke(Method.java:507)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at dalvik.system.NativeStart.main(Native Method)
11-07 08:38:15.677: ERROR/AndroidRuntime(406): Caused by: java.lang.NullPointerException
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at fr.Activity.CostruzioneDinamicaPaginaActivity.onCreate(CostruzioneDinamicaPaginaActivity.java:55)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     ... 11 more

Codice (Java): [Seleziona]
package fr.Activity;

import java.util.ArrayList;

import modello.Immagine;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class CostruzioneDinamicaPaginaActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                ArrayList<Immagine> immagini = new ArrayList<Immagine>();
                immagini.add(new Immagine("Fiat Ulysse 2.1 TD EL",
                                "http://pic.autoscout24.net/images/102/927/0203927102001.jpg",
                                1000));
                immagini.add(new Immagine("Fiat 126 Personal 4",
                                "http://pic.autoscout24.net/images/783/405/0203405783001.jpg",
                                500));
               
                LinearLayout layout = new LinearLayout(this);
                layout.setOrientation(LinearLayout.VERTICAL);
               
               
               
                for (Immagine immagine : immagini) {
                        LinearLayout l = new LinearLayout(CostruzioneDinamicaPaginaActivity.this);
                        l.setOrientation(LinearLayout.HORIZONTAL);
                        Button button = new Button(this);
                        final String s= immagine.getUrl();
                        button.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                       
                                        Toast.makeText(CostruzioneDinamicaPaginaActivity.this,s ,Toast.LENGTH_LONG).show();
                                       
                                }
                        });
                        button.setText(immagine.getPrezzo()+"");
                        TextView t = new TextView(CostruzioneDinamicaPaginaActivity.this);
                        t.setText(immagine.getNome());
                               
                        ImageView image = new ImageView(CostruzioneDinamicaPaginaActivity.this);
                        image.setImageResource(R.drawable.icon);
                        image.getLayoutParams().height = 20;
//                      image.getLayoutParams().height = 30;
                       
                       
                       
                        l.addView(t);
                        l.addView(button);
                        l.addView(image);
                        layout.addView(l);
                }
               
                setContentView(layout);
        }
}

questa classe è solo una prova, provvede a sistemare dinamicamente un bottone, un textView ed una immagine per ogni elemento della classe immagine!!

Il problema è che non riesco a ridimenzionare la foto come io vorrei!!! :-\
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.

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:Resizi ImageView
« Risposta #7 il: 07 Novembre 2011, 09:55:07 CET »
+1
C'è da fare una premessa: il codice che hai scritto può anche funzionare per test, ma tieni conto che in un'applicazione reale provocherà un gran numero di "Application Not Responding - Force Close". Come regola generale, tutte le volte che devi accedere alla rete, devi farlo in un thread separato, perchè i tempi in gioco sono superiori a quelli che sono permessi all'interno del thread della user interface.

Codice: [Seleziona]
11-07 08:38:15.677: ERROR/AndroidRuntime(406): Caused by: java.lang.NullPointerException
11-07 08:38:15.677: ERROR/AndroidRuntime(406):     at fr.Activity.CostruzioneDinamicaPaginaActivity.onCreate(CostruzioneDinamicaPaginaActivity.java:55)

Cosa c'è alla riga 55?

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Re:Resizi ImageView
« Risposta #8 il: 08 Novembre 2011, 15:42:48 CET »
0
L'errore viene fuori da questo assegnamento. Usato come mi era stato detto

Torno alla tua domanda, la dimensione la fissi impostando le proprietà layout_width e layout_height del file XML di layout, oppure in modo programmatico dovrebbe andar bene (vado a memoria):

Codice (Java): [Seleziona]
image_view.getLayoutParams().width= 20
image_view.getLayoutParams().height = 30

image.getLayoutParams().height = 20;
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.

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:Resizi ImageView
« Risposta #9 il: 08 Novembre 2011, 15:59:07 CET »
+1
L'errore viene fuori da questo assegnamento. Usato come mi era stato detto
image.getLayoutParams().height = 20;

Allora, quando nel LogCat leggi NullPointerException vuol dire che qualcosa nella riga è NULL e non dovrebbe esserlo. Nella riga in question potrebbero essere teoricamente NULL: image o quanto ritornato da getLayoutParams(). Io scommetto sul secondo. Quindi apro la documentazione di Android alla voce getLayoutParams() e leggo: This method may return null if this View is not attached to a parent ViewGroup ... Mi sembra che sia proprio questo il caso, quindi proverei a fare prima l.addView(image) e poi questa riga.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ippofil

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galax S
  • Sistema operativo:
    Windows 7
Re:Resizi ImageView
« Risposta #10 il: 08 Novembre 2011, 16:21:53 CET »
0
Grazie mille funziona tutto alla perfezione!!!!!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto http://www.anddev.it/Themes/default/images/gpbp_2_arrow_up_lit.png   alla destra del titolo del post.