2016-08-27 14 views
9

Uygulamam için bir tür tekerlek toplayıcı uygulamaya çalışıyorum çünkü geçerli seçenekler özel Views veya eski ListView belgesine dayanıyor, bu yüzden özümümüzü RecyclerView numaralı telefona dayandırmak istiyorum.Dikey olarak seçili öğe RecyclerView öğesinde

Ne yaptıysam şimdi, başında ve farklı bir tür ile RecyclerView iki View sonunda belirlenen ilk ve son öğe dikey RecyclerView merkezli böylece PADDING_TYPE adlı etmekti kadar.

recyclerView.post(new Runnable() { 
    @Override 
    public void run() { 
     //80dp is the height of a regular list item 
     int paddingHeight = ((recyclerView.getHeight()-SettingsManager.dptopixels(80))/2); 
     binding.getRoot().getLayoutParams().height = paddingHeight; 
    } 
}); 

Şimdi, seçilen öğenin dikey olarak merkezde tutulacağını anlamaya çalışıyorum.

şimdiye kadar çalıştığım şey:

1- LinearSnapHelper

LinearSnapHelper helper = new LinearSnapHelper(); 
helper.attachToRecyclerView(mRecyclerView); 

beklendiği gibi, ben de (muhtemelen yanlış şekilde) çeşitli yöntemler geçersiz kıl çalıştı Çalışmaz, ama ben can Seçimi otomatik olarak dikey olarak merkezileştirmez. Ve yeterince hızlı değil, seçilen öğe dikey merkeze kilitlenmek yerine "hareket eder". Dikey kaydırma farkı ile RecyclerView.OnScrollListener bu satırı

allPixelsDate += dx; 

değiştirerek kodu, yatay kaydırma için olan here önerilen uyum çalıştı RecyclerView.OnScrollListener

2- Özel:

allPixelsDate += dy; 

Bu implementatio n çalışmak için yakındır, çünkü listenin dikey merkezine en yakın öğeyi seçer, ancak merkeze kilitlemeden.

Böyle bir sonuca ulaşmak mümkün mü? Nasıl?

Daha açık olmak gerekirse: 1: 10'da here gösterilen sonucu elde etmek istiyorum. Seçim merkezde "kilitli".

+0

Bu kodu başvurmak için bu bağlantıyı deneyin [link] (http://developer.samsung.com/s-pen-sdk/samples/Circle-Launcher) – Moinkhan

+0

Bunu https://github.com/ai212983/ kullanarak yaptım android-spinnerwheel ve sanırım dikey Mannner https://github.com/Jaouan/Carousel-Browsing-Example – Nepster

+0

bu ihtiyacım var bu [bu açmak için] dikey olarak bu yöntemi kullanabilirsiniz (http://stackoverflow.com/a/38411582/2587027) – wadali

cevap

10

Sadece RecyclerView'unuzda LinearSnapHelper ve setOnFlingListener (snapHelper) yöntemini kullanmanız gerekir.

Bu

örneği çalışıyor:

LinearSnapHelper snapHelper = new LinearSnapHelper(); 
snapHelper.attachToRecyclerView(recyclerView); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setOnFlingListener(snapHelper); 

gerçek tekerlek seçici almak için ayrıca tekerlek bazı cilt eklemek ve doğru bir satır ve RecyclerView yüksekliği yüksekliğini hesaplamak gerekir. Örneğin, tekerleğinizde sadece 3 satır görüntülemek istiyorsanız, RecyclerView yüksekliğinin satır yüksekliğinden 3 kat daha büyük olması gerekir.

+1

Önerdiğiniz yaklaşımı denedim ve 1 1 numaralı deneme numaramdaki gibi davranıyor gibi görünüyor. Ne elde etmeye çalışıyorum, herhangi bir kaydırma etkisinin kaldırılmasıdır: Satırların içeriği kaydırılarak güncellenmelidir, ancak satırlar, "sıkışmış" ve dikey olarak ortalanmış olacak şekilde hareket etmemelidir. “LinearSnapHelper” ile düzenli olarak kayar ve çalışır - yetersiz - ortadaki çocuğu ebeveyninin merkezine ('RecyclerView') sokar. Ne demek istediğimi daha iyi anlamak için 1:10 – Vektor88

+0

@ Vektor88 adresinden https://www.youtube.com/watch?v=rercnPOELvs sayfasına bakın. Kullanıcı seçilen öğeyi nasıl değiştirebilir? Kaçmak mı, değil mi? – lobzik

+0

Evet, videoya bir göz atın. Slingin sadece satır güncellemesine ve kaydırma hareketine neden olmamasını istiyorum. – Vektor88

İlgili konular