Autore Topic: ListView scroll orizzontale  (Letto 1082 volte)

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
ListView scroll orizzontale
« il: 07 Agosto 2013, 22:05:51 CEST »
0
salve vorrei sapere se è possibile avere lo scroll orizzontale di una listview

posto un po di codice tanto per scrupolo

ecco come lavoro sulla mia listview normalmente

Codice (Java): [Seleziona]
public void creoLista() {

        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

        for (int i = 0; i < listaSerie.getListaSerie().size(); i++) {

            Serie serie = listaSerie.getListaSerie().get(i);
            HashMap<String, Object> listaseriemap = new HashMap<String, Object>();
            listaseriemap.put("logo", serie.getLogo());
            listaseriemap.put("serie", serie.getTitle());
            listaseriemap.put("layout", serie.getBgcolor());
            data.add(listaseriemap);
        }

        String[] from = {"logo","serie"};
        int[] to = {R.id.logo,R.id.serie};

        ListAdapter adapter = new SimpleAdapter(getApplicationContext(),data,R.layout.serie,from,to){

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View  view = super.getView(position, convertView, parent);
                ImageView logo = (ImageView)view.findViewById(R.id.logo);
                RelativeLayout relativelayout= (RelativeLayout)view.findViewById(R.id.serieRelativeLayout);
                Map<String,String> data = (Map<String,String>)getItem(position);
                logo.setImageBitmap(getlogo(data.get("logo")));
                relativelayout.setBackgroundColor(Color.parseColor("#"+data.get("layout")));
                return view;
            }
        };

        ((ListView) findViewById(R.id.personListView)).setAdapter(adapter);
        list = (ListView) findViewById(R.id.personListView);
        list.setOnItemClickListener(this);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////


e i 2 xml uno

serie.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="90dip"
       android:id="@+id/serieRelativeLayout"
       android:background="#000"
       android:padding="0dip">

    <ImageView
           android:id="@+id/logo"
           android:layout_width="90dip"
           android:layout_height="90dip">
    </ImageView>


    <TextView
           android:text="Serie"
           android:layout_alignBottom="@+id/logo"
           android:textAppearance="?android:attr/textAppearanceLarge"
           android:id="@+id/serie"
           android:textColor="#FFF"
           android:textSize="25dip"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true"
           android:textStyle="bold"
           android:layout_alignParentLeft="false"
           android:layout_marginRight="10dip"
           android:layout_alignParentRight="true"/>
</RelativeLayout>

listaserie.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">

    <ListView
           android:id="@+id/personListView"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent">
    </ListView>
</LinearLayout>

in pratica il mio intento e creare una sorta di mini gallery, dove le foto possano essere ruotare, solamente tramite uno scroll in avanti o indietro

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:ListView scroll orizzontale
« Risposta #1 il: 07 Agosto 2013, 22:24:23 CEST »
0
Dai un'occhiata a questo articolo se può esserti utile :)
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:ListView scroll orizzontale
« Risposta #2 il: 09 Agosto 2013, 12:18:03 CEST »
0
mmm ho importato il progetto ma non va mi ritorna questo errore

Codice: [Seleziona]
08-09 12:16:49.060  11164-11164/com.devsmart.demo E/AndroidRuntime: FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.devsmart.demo/com.devsmart.demo.HorizontalListViewDemo}: android.view.InflateException: Binary XML file line #10: Error inflating class com.devsmart.android.ui.HorizontialListView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
        at android.app.ActivityThread.access$600(ActivityThread.java:140)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4898)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class com.devsmart.android.ui.HorizontialListView
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:306)
        at android.app.Activity.setContentView(Activity.java:1916)
        at com.devsmart.demo.HorizontalListViewDemo.onCreate(HorizontalListViewDemo.java:17)
        at android.app.Activity.performCreate(Activity.java:5184)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
        ... 11 more
        Caused by: java.lang.ClassNotFoundException: com.devsmart.android.ui.HorizontialListView
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
        at android.view.LayoutInflater.createView(LayoutInflater.java:552)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
        ... 21 more


Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:ListView scroll orizzontale
« Risposta #3 il: 09 Agosto 2013, 23:12:17 CEST »
0
Ho provato ora ad importare ed avviare il progetto e non ho ricevuto alcun errore.
Hai importato sia il progetto demo che la libreria (anch'essa come progetto)?
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:ListView scroll orizzontale
« Risposta #4 il: 09 Agosto 2013, 23:18:01 CEST »
0
si, ma ho risolto in diverso modo.

domani posterò il codice , cosi da aiutare i posteri =)

mi son buttato sul fragment pager adapter, con ottimi risultati =)

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:ListView scroll orizzontale
« Risposta #5 il: 10 Agosto 2013, 12:11:11 CEST »
0
si, ma ho risolto in diverso modo.

domani posterò il codice , cosi da aiutare i posteri =)

mi son buttato sul fragment pager adapter, con ottimi risultati =)
Ottimo  :D
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:ListView scroll orizzontale
« Risposta #6 il: 10 Agosto 2013, 19:29:00 CEST »
0
ecco il mio approccio per avere delle PageView con scroll orizzontale.

di seguito il codice.

MI RACCOMANDO IMPORTATE LA LIBRERIA ANDROID_SUPPORT_V4

dettagliooggetto.xml
la componente grafica dell' elemento che andrà dentro la nostra pageview
 
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
       android:orientation="vertical"
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">

    <ImageView
           android:layout_width="650dip"
           android:layout_height="200dip"
           android:id="@+id/imgdettaglio"/>

    <TextView
           android:id="@+id/titolodettaglio"
           android:layout_marginTop="10dip"
           android:layout_marginLeft="10dip"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:text="Titolo"
           android:gravity="left"/>

    <TextView
           android:id="@+id/descrizionedettaglio"
           android:layout_marginTop="10dip"
           android:layout_marginLeft="10dip"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:text="Descrizione"
           android:gravity="left"/>

</LinearLayout>

schedadettagliooggetto.xml
il main per intenderci, ovvero la nostra pageview

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="match_parent"
               android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
           android:id="@+id/paginadettaglio"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"/>
</RelativeLayout>


ora un po di codice

DettaglioActivity ma potete benissimo vederlo come il main
l'id che vedete nell' intent, e l'indice di un arraylist, mi serve per iniziare la visualizzazione dall' elemento selezionato, in una pseudo activity precedente.
per intenderci il mio arraylist è composto cosi

A<---->B<---->C<---->D<---->E<---->F<---->G

la pageview dove andro a fare il focus iniziale sarà id=D
visto che non conosco a priori il numero di elementi dell arraylist , mi son creato un metodo che mi restituisce il size dell AL (oggetto.getSizeArrayOggetti())

Codice (Java): [Seleziona]
public class DettaglioActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.schedadettagliooggetti);
        Intent intentOggetto=getIntent();
        int id = intentOggetto.getIntExtra("idOggetto", -1);

        /** Getting a reference to the ViewPager defined the layout file */
        ViewPager pager = (ViewPager) findViewById(R.id.paginadettaglio);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        ArrayOggetti oggetto = new ArrayOggetti();
        DettaglioOggettoPagerAdapter adapter = new DettaglioOggettoPagerAdapter(fm,oggetto.getSizeArrayOggetti());

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(adapter);

        //indico la pagina da cui partire la visualizazione
        //ovvero quella prescelta dalla gallery
        pager.setCurrentItem(id);
    }
}

DettaglioOggettoPageAdapter

l'insieme delle pageview
 PAGE_COUNT e il numero di elementi che andrò a creare in totale
getItem() un metodo di FragmentPagerAdapter che restituisce l'id della pageview in questione
successivamente creo un oggetto di tipo Fragment(DettaglioOggetto)
e invoco il metodo setArguments

Codice (Java): [Seleziona]
public class DettaglioOggettoPagerAdapter extends FragmentPagerAdapter {

    private static int PAGE_COUNT;

    //numeropagine-1 sta perche l'array inizia da 0 e non da 1
    public DettaglioOggettoPagerAdapter(FragmentManager fm,int numeroPagine) {
        super(fm);
        this.PAGE_COUNT=numeroPagine-1;
    }

    @Override
    public Fragment getItem(int arg0) {
        DettaglioOggetto dettaglioOggetto = new DettaglioOggetto();
        Bundle data = new Bundle();
        data.putInt("current_page", arg0);
        dettaglioOggetto.setArguments(data);
        return dettaglioOggetto;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
}

DettaglioOggetto

qui come prima cosa ottengo l'indice della PageView, che andro a creare, successivamente
setto le componenti grafiche in modo dinamico in base all'indice della pageview, che corrisponde all' indice di un mio pseudo ArrayList
cosi da avere per ogni elemento una specifica immagine(che viene letta da SD) un testo e una descrizione
in fine ritorno un oggetto di tipo View alla classe precedente (DettaglioOggettoPagerAdapter )

Codice (Java): [Seleziona]
public class DettaglioOggetto extends Fragment{

    int mCurrentPage;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** Getting the arguments to the Bundle object */
        Bundle data = getArguments();
        /** Getting integer data of the key current_page from the bundle */
        mCurrentPage = data.getInt("current_page", 0);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.dettaglioggetto, container,false);
        ArrayOggetti oggetto = new ArrayOggetti();
        TextView titolodettaglio = (TextView ) v.findViewById(R.id.titolodettaglio);
        TextView descdettaglio = (TextView ) v.findViewById(R.id.descrizionedettaglio);
        ImageView imgdettaglio = (ImageView) v.findViewById(R.id.imgdettaglio);
        titolodettaglio.setText(oggetto.getListaOggetti().get(mCurrentPage).getTitle());
        descdettaglio.setText(oggetto.getListaOggetti().get(mCurrentPage).getDescription());
        imgdettaglio.setImageBitmap(getlogo(oggetto.getListaOggetti().get(mCurrentPage).getPhoto()));
        return v;
    }

    public Bitmap getlogo(String id){
        File imgFile = new File(Environment.getExternalStorageDirectory()+"/"+id);
        if(imgFile.exists()){
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            return myBitmap;
        }
        return null;
    }
}


Risultato Finale
 ovviamente l'effetto finale e una specie di scrooll continuo e fluido.
« Ultima modifica: 10 Agosto 2013, 19:31:27 CEST da auron86 »