2012-11-06 13 views
7

Używam tego CoverFlow: http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.htmlZmień widok onClick coverflow - Android

chcę móc zmienić View po kliknięciu na przycisku, przycisk bycia tyłu/do przodu ikona, która zabierze Cię do poprzedni/następny element w przepływie okładki.

Zmodyfikowaliśmy nieco coverflow, aby zamiast tego użyć układu XML.

Oto onCreate() metoda moja:

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 
    } 
}); 

Moje 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

dać mi znać, jeśli moja odpowiedź nie ma sensu –

+1

Hej, dzięki za odpowiedź, jestem Jestem studentem, aplikacja to aplikacja, którą tworzę dla firmy, nad którą pracuję, jednak w tym tygodniu i w przyszłym tygodniu jestem uczelnią (kurs trwa 2 tygodnie w firmie/2 tygodnie w uni itp ..) więc nie miałem okazji przetestować twojej odpowiedzi, ale wygląda bardzo obiecująco :) –

+0

hahah. gotcha. przepraszam, nie chciałem się spieszyć. to było pytanie o nagrodę, więc byłem po prostu ciekawy. powodzenia!! –

Odpowiedz

3

Chociaż starałem, aby dowiedzieć się, jak dodać animację natknąłem się na ten, który robi wszystko w jednym wierszu:

idź w lewo

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

idź w prawo

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

(wystarczy dodać każdą linię do odpowiednich przycisków onclick method

nadzieję, że może pomóc każdemu, kto znajdzie im siebie w takiej samej sytuacji jak ja :)

+0

onKeyDown, Jak mogę wydrukuj tosty. co należy zmodyfikować w powyższym kodzie? – user3819810

2

Mam nadzieję, że rozumiem Twoje pytanie. Jeśli tak, oto pomysł:

Należy przechowywać prywatną instancję, która śledzi bieżącą pozycję obrazu wyświetlanego z przepływu okładki. następnie aktualizujesz ją z metody setOnItemSelectedListener(), która jest dziedziczona z galerii. Na przycisku "wstecz" lub "do przodu" wystarczy ustawić aktualny wybór +/- 1 w zależności od naciśniętego przycisku.

więc w swojej działalności, dodać int zmienną instancji, który będzie śledzić położenie jak ...

public class MyActivity { 
    private int currentImagePosition = -1; 

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

Następnie trzeba być w stanie zaktualizować bieżącą pozycję obrazu, który jest aktualnie wyświetlane w przepływie okładki. Można to zrobić poprzez nadpisanie setOnItemSelectedListener jak tak (wewnątrz onCreate metody):

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

Wreszcie, wszystko co musisz zrobić, to ustawić onclick słuchaczy każdy przycisk, aby przejść do poprzedniego lub następnego obrazu za pomocą setSelection(currentImagePosition+1) lub setSelection(currentImagePosition-1). A propos, jaki jest prawdziwy lub fałszywy parametr setSelection()? nie jestem pewien, co to robi, więc zamierzam użyć true, tak jak na początku. metoda onCreate() będzie teraz wyglądać następująco:

@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); 
         } 
     } 
    }) ; 


} 

UWAGA: część o aktualizację stanowisko zakłada pracę z lektury Get the position of the current image displayed in Gallery więc mam nadzieję, że to działa. jeśli nie, przynajmniej próbowałem: D

Powodzenia !!!

+0

Możesz mi powiedzieć, że raz kliknę dowolną pozycję, wtedy tylko ten obraz powinien być widoczny na środku ekranu, podczas gdy reszta zdjęć w coverflow powinna być ukryta ....... jak to zrobić? a kiedy przesuniemy w lewo lub w prawo do środka elementu, wszystkie elementy powinny być widoczne? – Erum

+0

@Erum Myślę, że widoki na Androida mają sposób na zrobienie czegoś takiego jak "setVisibility", więc użyłbym tego do ukrycia widoków. Ale myślę, że konkretna rzecz, którą chciałeś zrobić, może być nieco bardziej skomplikowana. może powinieneś zadać nowe pytanie tutaj na przepełnieniu stosu, a potem może więcej osób (może również link) może przyjrzeć się? –

+0

Możesz to zrobić, chcę tego typu wyników http://www.dailymotion.com/video/x2qx2if – Erum

3

Dzięki David, jestem jednym z kolegów Mike'a, ale nigdy nie napisałem linii Javy. Pracuję w dziale iOS naszej firmy. Rozumiałem, o czym mówisz. Twoja odpowiedź była pomocna i dobrze napisana!

miałem tylko dodać:

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

Ponieważ onItemSelected nie nazwano (zaktualizować bieżącą marker), nie wiem dlaczego.

Jednak coverFlow.selection(int , bool) nie jest animowany. Jest to tylko metoda ustawiona, gdy widok jest ładowany. Na przykład coverFlow.selection(3,true) ustawi czwarty obraz na środku przepływu okładki.

Powiązane problemy