2016-04-12 29 views
5

bu. Ben RecycleView adaptörünün OnBindViewHolder yöntemdeÖlçekleme RecyclerView madde aşağıda gibi RecyclerView ulaşmak için çalışıyorum pozisyon

view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); 

aramaya çalıştım ve ayrıca ItemDecorator ama listenin her zaman davranışı beklenmedik oldu. Bunu başarmak için en iyi yaklaşım nedir? PagerAdapter veya başka bir kontrol ile olabilir.

UPD: ölçekleme faktörü, öğenin adaptördeki konumuna bağlıdır ve kaydırma sırasında değiştirilmemelidir. UPD2

: İşte Ben OnBoundViewHolder denedim kod şudur:

int childCount = recyclerView.getChildCount(); 
View view = holder.getView(); 

if (position == childCount){ 
    view.setScaleX(1f); 
    view.setScaleY(1f); 
} else if (position == childCount - 1){ 
    view.setScaleX(0.8f); 
    view.setScaleY(0.8f); 
} else if (position == childCount - 2){ 
    view.setScaleX(0.6f); 
    view.setScaleY(0.6f); 
} 
else { 
    view.setScaleX(0.4f); 
    view.setScaleY(0.4f); 
} 

Ve burada sonucudur (ve kaydırma ederken değişiyor):

enter image description here

Ve aynı kod ancak ItemDecorator getItemOffsets:

enter image description here

+0

Terazi, öğenin adaptördeki konumuna bağlı mı? Veya listedeki öğenin kaydırma konumu? –

+0

Listede bunun için bir şeyler yazdım. Burada bir göz atabilir ve size yardımcı olup olmadığına bakın. Http://stackoverflow.com/a/26000069/3410697 –

+0

Evet, ölçek adaptördeki konuma bağlıdır. Son madde her zaman ölçek faktör 1, son - 1 faktör 0.8f, son - 2 faktör 0.6 ve diğerleri 0.4 f'dir. Ölçek –

cevap

0

burada senin

rehabilitasyon makinesi görünümü (şu anda görünenden daha fazla çocuk sahibi asla unutmayın + RecyclerView içindeki çocukların miktarına bağlı konumlar göre ölçek dayandırarak olduğunu sorun bazı ek deltalar). Geri dönüştürücünüzün kaç öğe göstereceğine dair bir gösterge DEĞİLDİR. Örneğin, 1000 öğeli bir geri dönüştürücü, her bir liste öğesinin boyutuna bağlı olarak yalnızca yaklaşık 6-7 çocuk sayısına sahip olacaktır. Bu yardımcı olur

int totalItems = getItemCount(); 
View view = holder.getView(); 

if (position == totalItems - 1){ // final position will equal total items - 1 
    view.setScaleX(1f); 
    view.setScaleY(1f); 
} else if (position == totalItems - 2){ 
    view.setScaleX(0.8f); 
    view.setScaleY(0.8f); 
} else if (position == totalItems - 3){ 
    view.setScaleX(0.6f); 
    view.setScaleY(0.6f); 
} 
else { 
    view.setScaleX(0.4f); 
    view.setScaleY(0.4f); 
} 

Hope: Yapmak istediğiniz ne

İşte önerilen bir düzeltme var

saymak öğenin karşı pozisyonunu karşılaştırmaktır.