2012-08-27 12 views
6

Qualcuno sa come modificare la sensibilità di ViewPager?Come modificare la sensibilità di viewpager?

Attualmente utilizzo un ViewPager dalla libreria di supporto di Android v4 per implementare il mio visualizzatore di foto.

Tuttavia, il ViewPager predefinito è troppo sensibile, quando il mio dito tocca lo schermo e si muove di una distanza molto breve (forse solo 0,5 cm). Quindi ViewPager verrà spostato per passare alla visualizzazione foto successiva/precedente.

C'è un modo per sovrascrivere il comportamento predefinito di ViewPager per ridurre la sensibilità?

Grazie a qualsiasi risposta.

risposta

4

Ho verificato ViewPager.java da src della libreria di compatibilità e sembra che non ci sia modo di farlo da xml o qualche setter. ViewPager ha codice come il seguente:

final float density = context.getResources().getDisplayMetrics().density; 
mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density); 
mCloseEnough = (int) (CLOSE_ENOUGH * density); 
mDefaultGutterSize = (int) (DEFAULT_GUTTER_SIZE * density); 

Come si può vedere, utilizza è costanti interne per la determinazione della distanza scappatella, ecc

Buone notizie sono: è possibile copiare ViewPager (qui la licenza di quanto dovrebbe essere considerato) al tuo codice ed estenderlo ad es per ottenere la distanza di lancio dall'attributo xml.

+0

bene, cercherò di farlo, grazie alla risposta. – Raymond

+0

È hacky ma potresti anche impostarlo usando il reflection. – Ljdawson

+0

@ Raymond Hai trovato una soluzione per questo? Ho bisogno di scorrere per ViewPager come ScrollVIew di default. – Noundla

2

si può riflettere il campo mFlingDistance in questo modo:

Field mFlingDistance; 
mFlingDistance = ViewPager.class.getDeclaredField("mFlingDistance"); 
mFlingDistance.setAccessible(true); 

// Set custom value: 
mFlingDistance.set(mPager, 30); 
Problemi correlati