2012-11-06 13 views
7

Sto usando questo CoverFlow: http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.htmlCambia vista onClick coverflow - Android

voglio essere in grado di cambiare View quando si fa clic su un pulsante, il pulsante di essere un icona/avanti indietro che vi porterà a l'articolo precedente/successivo nel coverflow.

Ho modificato leggermente il coverflow in modo da utilizzare invece un layout XML.

Ecco il mio metodo onCreate():

setContentView(R.layout.main); 

CoverFlow coverFlow = (CoverFlow)findViewById(R.id.coverflow); 

coverFlow.setAdapter(new ImageAdapter(this)); 
ImageAdapter coverImageAdapter = new ImageAdapter(this);  
coverFlow.setAdapter(coverImageAdapter); 
coverFlow.setSpacing(-20); 
coverFlow.setSelection(0, true); 
coverFlow.setAnimationDuration(1000); 

tv = (TextView)findViewById(R.id.textView1); 

coverFlow.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Toast.makeText(getBaseContext(), String.valueOf(arg2), Toast.LENGTH_SHORT).show(); 
    } 
}); 

coverFlow.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     tv.setText(String.valueOf(arg2)); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // Do something 
    } 
}); 

mio XML:

<?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="fill_parent" 
    android:background="@drawable/home_background" 
    android:orientation="vertical" > 

    <com.demo.app.coverflow.CoverFlow 
     android:id="@+id/coverflow" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="39dp" 
     android:layout_marginLeft="35dp" 
     android:background="@drawable/button_left" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="39dp" 
     android:layout_marginRight="35dp" 
     android:background="@drawable/button_right" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="55dp" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="hello" 
     android:textColor="@color/White" 
     android:textSize="16dp" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="170dp" 
     android:layout_marginTop="15dp" 
     android:src="@drawable/unsa_logo" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="14dp" 
     android:layout_marginTop="23dp" 
     android:src="@drawable/pnc_logo" /> 

</RelativeLayout> 
+0

fatemi sapere se la mia risposta non aveva senso –

+1

hey man, grazie mille per la risposta, io' Se uno studente, l'applicazione è un'app che sto sviluppando per la società a cui sto lavorando, tuttavia questa settimana e la prossima settimana sono un'università (il corso è di 2 settimane presso l'azienda/2 settimane presso uni ecc. ..) quindi non ho ancora avuto la possibilità di testare la tua risposta ma sembra molto promettente :) –

+0

hahah. Gotcha. scusa, non volevo correre. era una domanda generosa, quindi ero solo curioso. in bocca al lupo!! –

risposta

3

Mentre stavo cercando di trovare il modo di aggiungere l'animazione mi sono imbattuto in questo, che fa tutto in una sola riga:

andare a sinistra

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(0, 0));

andare a destra

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0));

(basta aggiungere ogni riga ai rispettivi metodi onclick del pulsante

Spero che questo può aiutare chiunque li trova auto nella stessa situazione come ero :)

+0

onKeyDown, Come posso stampare toast. cosa deve essere modificato nel codice sopra? – user3819810

2

Spero che ho capito la tua domanda. In tal caso, ecco un'idea:

è necessario memorizzare una variabile di istanza privata che tiene traccia della posizione corrente dell'immagine che viene visualizzata dal coverflow. quindi, lo aggiorni dal metodo setOnItemSelectedListener(), che è ereditato dalla Galleria. Sul pulsante "indietro" o "avanti", è sufficiente impostare la selezione corrente +/- 1 a seconda del pulsante premuto.

così nella vostra attività, aggiungere un int variabile di istanza che non mancherà di tenere traccia della posizione come ...

public class MyActivity { 
    private int currentImagePosition = -1; 

    //add the rest of your onCreate code here... 
} 

Successivamente, è necessario essere in grado di aggiornare la posizione corrente dell'immagine che è attualmente in fase di visualizzato nel coverflow. è possibile farlo mediante l'override setOnItemSelectedListener in questo modo (all'interno del vostro metodo di onCreate):

coverFlow.setOnItemSelectedListener(new OnItemSelectedListener(){ 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       currentImagePosition = position; //this will update your current marker 
      } 
}; 

Infine, tutto ciò che dovete fare è impostare ascoltatori onclick di ogni pulsante per cambiare l'immagine precedente o successiva utilizzando setSelection(currentImagePosition+1) o setSelection(currentImagePosition-1). A proposito, qual è il parametro vero o falso di setSelection() fare? non sono sicuro di cosa faccia, quindi userò lo true come hai fatto inizialmente. il metodo onCreate() sarà ora un aspetto simile:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    //insert your other code in onCreate here in this spot.... 

    //add the following lines to your code: 
    Button goLeft = (Button) findViewById(R.id.button1); 
    goLeft.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //go to previous image 
         if(currentImagePosition > 0){ //i'm assuming you dont want to go left anymore once at the leftmost image 
          coverFlow.setSelection(currentImagePosition - 1, true); 
         } 
     } 
    }) ; 


    Button goRight = (Button) findViewById(R.id.button2); 
    goRight.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //go to previous image 
         if(currentImagePosition < coverFlow.getCount()-1){ //i'm assuming you dont want to go left anymore once at the leftmost image 
          coverFlow.setSelection(currentImagePosition + 1, true); 
         } 
     } 
    }) ; 


} 

NOTA: la parte che riguarda l'aggiornamento di posizione si presume di lavorare da leggere Get the position of the current image displayed in Gallery quindi spero questo funziona. se no, almeno ho provato: D

Buona fortuna !!!

+0

Posso dirmi una volta che clicco su qualsiasi posizione, quindi solo l'immagine dovrebbe essere visibile al centro dello schermo mentre il resto delle immagini nel coverflow dovrebbe essere nascosto ....... come fare? quindi quando faccio scorrere verso sinistra o destra al centro dell'articolo, tutti gli articoli dovrebbero essere visibili? – Erum

+0

@Erum Penso che le viste Android abbiano un modo di fare qualcosa come "setVisibility", quindi lo userei per nascondere le viste. Ma penso che la cosa specifica che avresti voluto fare fosse un po 'più complicata. forse dovresti fare una nuova domanda qui sullo stack overflow, e quindi più persone (magari collegarmi anche tu) possono dare un'occhiata? –

+0

T può esserti utile per questo tipo di risultato http://www.dailymotion.com/video/x2qx2if – Erum

3

Grazie David, sono uno dei colleghi di Mike ma non ho mai scritto una riga di Java. Lavoro nel reparto iOS della nostra azienda. Ho capito di cosa stavi parlando. La tua risposta è stata utile e ben scritta!

ho solo dovuto aggiungere:

if (currentimageposition < coverFlow.getcount()-1) { 
    coverFlow.setSelection(currentImagePosition +1, true); 
    currentImagePosition = currentImagePosition +1; 
} 

Perché la vostra onItemSelected non è stato chiamato (aggiornare l'indicatore di corrente), non so perché.

Tuttavia, coverFlow.selection(int , bool) non è animato. È solo un metodo impostato quando viene caricata la vista. Ad esempio, coverFlow.selection(3,true) imposterà la quarta immagine al centro del coverflow.