2014-01-23 7 views
5

Ich brauche eine Rolle mit Elementen zusammen, und das ausgewählte Element sollte ein Teil nach unten erweitern.Galerie: Effekt in Artikel ausgewählt

enter image description here

ich zur Zeit eine Galerie bin mit (Ich habe versucht, mit viewflow und viewpager, aber die Produkte haben viel Raum zwischen ihnen), aber ich muss wissen, wie ich diesen Effekt zu tun.

Ich habe 2 Ideen, aber ich weiß nicht, wie ich es implementieren kann.

1) Der erweiterbare Teil ist ein LinearLayout mit Sichtbarkeit = weg, und wenn das Element ausgewählt ist, sollte dieses Layout sichtbar sein. (Galerie nicht „onItemSelectedListener“ haben)

2) Behandeln Sie jedes Element als Fragment (einmal verwende ich eine Viewpager, die diese verwenden, https://github.com/mrleolink/SimpleInfiniteCarousel)

Es muss nicht unbedingt eine Galerie sein müssen, jede Idee ist, Willkommen

Ich arbeite an einer Aktivität.

+2

Sie sollten nicht Galerie könnte auch verwenden, wenn Sie in der Lage sind, die gewünschte Ausgabe von ihm zu bekommen. Es ist seit API-Stufe 16 veraltet, daher verlieren Sie etwa 65% der Benutzer (ab diesem Tag) von Anfang an. – Shakti

+0

können Sie bitte Ihre Frage ausarbeiten ... –

+1

@Shakti, während ich zustimmen, dass OP Galerie nicht verwenden sollte, bedeutet deprecated nicht unbedingt OP wird jeden Benutzer verlieren. AFAIK, Galerie existiert noch bis KitKat, aber seine Verwendung wird abgeraten. – ugo

Antwort

2

Hängt von dem gewünschten Verhalten ab. Bei einigen Fragen können mehrere Einträge gleichzeitig erweitert werden. Soll die Ansicht paginiert werden (einrasten) oder glatt scrollen?

Ein Vorschlag, den ich habe, ist eine benutzerdefinierte Ansicht für die einzelnen Zellen zu machen. Fügen Sie sie dann programmatisch zu einem HorizontalScrollView-Objekt hinzu.

HorizontalScrollView hsv = new HorizontalScrollView(activity); 
LinearLayout hll = new LinearLayout(activity); 
hll.setOrientation(LinearLayout.HORIZONTAL); 
for(int i=0;i<items.length();i++){ 
     hsv.addView(new CustomExpandView(item)); 
} 

Die CustomExpandView würde für Ihre Zellen verwendet werden, und so etwas wie dieses ...

public class CustomExpandView extends RelativeLayout implements OnClickListener { 

MyActivity mActivity = null; 
ImageView ivImage, ivOverImage; 
RelativeLayout rlView; 

public CustomExpandView(Context context) { 
    super(context); 
    initialize(); 
} 

public CustomExpandView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(); 
} 

public void initialize() { 
    mActivity = (MyActivity) this.getContext(); 
    LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.custom_cell_expand, this, true); 

      //you can initialize subviews here 
    rlView = (RelativeLayout) getChildAt(0); 
    ivImage = (ImageView) rlView.getChildAt(0); 
    ivOverImage = (ImageView) rlView.getChildAt(1); 

rlView.setOnFocusChangeListener(new OnFocusChangeListener(){ 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      LinearLayout expand = v.findViewById(R.id.view_i_want_to_expand); 
      if(hasFocus) 
       expand.setVisibility(View.VISIBLE); 
      else 
       expand.setVisibility(View.GONE); 
     } 

    }); 
} 
+0

Danke! Das war, was ich gesucht habe! – SolArabehety

1

Sie gaben die Antwort selbst. Sie können einen ViewPager mit Fragmenten verwenden und eine Animation verwenden, um den unteren Teil des Fensters zu erweitern. Hängt davon ab, ob die Fenster Vollbild sein sollen oder nicht. Ein Viewpager benötigt nicht unbedingt Fragmente, Sie können normale Ansichten und einen geeigneten Adapter verwenden. Spielen Sie einfach damit und sehen Sie, welche Lösung Ihnen am besten gefällt.

Das nächste Mal, erstellen Sie einfach den Code und die App, und stellen Sie eine viel spezifischere Frage, mit Code, um das Problem zu veranschaulichen, die Sie erleben.

1

Sie könnten einfach eine TableView mit nur einem TableRow (oder so viele, wie Sie benötigen) definieren und ein onClickListener für jede dieser View s innerhalb der TableRow, die das auf jedem Klick machen würde, würde die ausgewählten View selbst erweitern .

Ich weiß nicht, ob Sie eine statische Anzahl von View s in dieser Zeile haben oder Sie werden sie dynamisch erstellen, aber dies sollte für alle von ihnen funktionieren, die echte "Arbeit" hier über die Zeile zu füllen .

Sobald Sie Ihre Reihe von View s haben, erklären Sie einfach eine onClickListener() auf jedem von ihnen. Zum Beispiel sollte das genug sein:

OnClickListener myListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    v.setVisibility(View.VISIBLE); 
    } 
}; 

Und als onClick Ereignis für alle Ihre Artikel innerhalb der TableRow:

für (Blick v: myTableRowViews) v.setOnClickListener (myListener);

Dies hat einen Nachteil: Sie können wissen, welche View wurde für die Auswahl angeklickt, aber nativ können Sie nicht wissen, welche deaktiviert wurde, so dass Sie die letzte ausgewählte Registerkarte eine klassenweite Variable und Setzt sie jedes Mal onClick() gebrannt, so dass Ihre Zuhörer etwas wie dies zu machen:

// In your class declare a variable like this 
View lastSelected = null; 

OnClickListener myListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    if (lastSelected != null) 
     lastSelected.setVisibility(View.GONE); 

    v.setVisibility(View.VISIBLE); 

    lastSelected = v; 
    } 
}; 

Zusätzlich Sie eine Animation auf die Wirkung einstellen können, um es attraktiver zu machen, aber in erster Linie ist dies die Idee.

Eine letzte Sache: Um es auf diese Weise funktioniert Sie werden die layout_height sowohl Ihre TableRow und die View Elemente im Inneren setzen müssen, so kann es später erweitern, wenn Sie den zusätzlichen Teil als sichtbar eingestellt. Damit es gut aussieht, müssen alle Ihre View s die gleiche Höhe haben (sowohl im reduzierten als auch im erweiterten Zustand).