2016-09-14 1 views
4

У меня был расширен recyclerview, поэтому я могу масштабировать его. Он работает так, как я этого хотел, но теперь я хотел программно прокручивать х количество пикселей. Пользовательская история для этого состоит в том, что если я коснусь верхней половины части экрана, она должна прокручиваться на х количество пикселей, то же самое относится к нижней половине части экрана.Как прокрутить RecyclerView программно с помощью определенных пикселей?

Вот что я сделал:

активность:

@Override 
public boolean dispatchTouchEvent(MotionEvent event) 
{ 
    // if(mComicViewerFragment != null) 
    //  mComicViewerFragment.consumeEvent(event); 

    mScaleDetector.onTouchEvent(event); 

    if(event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     int y = (int) event.getY(); 

     if(y >= mScreenSize.y/2) 
     { 
      mComicViewerFragment.scrollBy((int)(mScreenSize.y * 0.10f)); 
      Log.i(ComicApplication.TAG, "ComicViewerActivity.onTouchEvent : You are tapping the lower part : " + y); 
     } 
     else 
     { 
      mComicViewerFragment.scrollBy((int)(-mScreenSize.y * 0.10f)); 
      Log.i(ComicApplication.TAG, "ComicViewerActivity.onTouchEvent : You are tapping the upper part : " + y); 
     } 
    } 

    return super.dispatchTouchEvent(event); 
} 

Фрагмент

public void scrollBy(int by) 
{ 
    mScalingRecyclerView.smoothScrollBy(0, by); 
} 

Каждый раз, когда я нажимаю, он не прокручивается на х количество пикселей. Это потому, что я создал пользовательский вид, простирающийся от RecyclerView? Где я должен правильно называть smoothScrollBy? Это должно быть легко, но я застрял.

+1

Не уверен, что если фрагменты работают по-разному для recyclerview но попробуйте это решение - http://stackoverflow.com/questions/30256036/vertical-scroll-the-recyclerview-in-android- by-pixels – Tasos

+0

Я не знаю ... Этот Google известен как. Посмотрите на этот метод, что он говорит? 'SmoothScrollBy'. Документы также понятны, а также «Анимировать прокрутку на заданное количество пикселей вдоль любой оси». Но это не так !!!! –

+0

Ваши товары равны по высоте? – Tasos

ответ

3

Поскольку recyclerView.smoothScrollBy(0, pixels); не работает для вашего пользовательского представления, вы можете попробовать альтернативный вариант.

Что вы можете сделать, это прокрутить позицию, выполнив некоторую математику, но это не будет точно соответствовать пикселю.

Гипотетически говоря, если ваши товары имеют одинаковую высоту 100dp вы можете конвертировать дп в пиксели для любого типа экрана с помощью кода see here

Допустим, 100dp приходит 100px за единицу, и вы хотите, чтобы прокрутить 400px вниз Recycler. Это 4 позиции (400/100).

Все, что вам нужно, это текущий номер позиции нижнего пункта «Вид», добавление 4 и прокрутка или плавное прокручивание по положению.

Вот helper class, чтобы показать вам, как получить позицию «Верх» или «Вниз» в «Вид», если вы хотите идти вверх или вниз по ресайклеру.

Для полного решения Check here