2015-11-11 3 views
0

В настоящее время я работаю с RecyclerView, который имеет горизонтальный LinearLayout. RecyclerView занимает весь экран:Как сделать преобразование (матрица?) Навсегда RecyclerView

enter image description here

и я найти способ сделать починки преобразование RecyclerView как это:

enter image description here

к сведению, что преобразование подобен «погружение» или «падение», чтобы сделать «глубокий» эффект. Так как размер элементов может измениться, мне нужна постоянная трансформация, поэтому я думаю, чтобы сделать это в RecyclerView

Есть ли все-таки сделать это? возможно, способ сделать это на onDraw ??

спасибо, что заранее.

С уважением.

Rafael.


ADD:

Я хотел бы заметить, что PageTransformer делает что-то подобное. На самом деле, то, что я хочу, это очень похоже на то, что Samsung Galaxy S3 делает при прокрутке с одним из их пусковых установок (который использует ViewPager), но я хотел бы сделать это преобразование исправлено:

enter image description here


ЧТО ТАКОЕ Я ПЫТАЮСЬ?

Я пытаюсь прокрутить большой горизонтальный адаптер RecyclerView, но я хотел бы немного «свернуть» вид, чтобы произвести небольшое впечатление от «цилиндра».

+0

вы были близки в заголовке вопрос: сделать класс, который расширяет 'RecyclerView' и переопределить его' метод dispatchDraw', использовать 'Matrix # setPolyToPoly' сделать перспективное преобразование – pskink

+0

из конечно, вам нужно будет дважды называть 'setPolyToPoly', если вы не e «Матричный эксперт» (как и г-н Андерсон;)), и знаю, как перевернуть его и перевести. – pskink

+0

Привет @pskink, это определенно решение, но я не могу понять, как это сделать, поскольку документации по этим практикам мало. вы могли бы быть более конкретным, может быть, через ответ, и я проверю его? (Большое спасибо) –

ответ

1

сделать класс, который расширяет RecyclerView и переопределить его метод dispatchDraw (или draw), использовать Matrix#setPolyToPoly сделать перспективное преобразование, следующий код делает что-то вроде «Звездных войн» эффекта, вам нужно будет позвонить setPolyToPoly дважды и применить Matrix на обеих половинах пользовательского зрения:

@Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     final float DELTAX = w * 0.15f; 
     float[] src = { 
       0, 0, w, 0, w, h, 0, h 
     }; 
     float[] dst = { 
       0, 0, w, 0, w - DELTAX, h, DELTAX, h 
     }; 
     matrix.setPolyToPoly(src, 0, dst, 0, 4); 
    } 

    @Override 
    protected void dispatchDraw(Canvas canvas) { 
     canvas.save(); 
     canvas.concat(matrix); 
     super.dispatchDraw(canvas); 
     canvas.restore(); 
    } 
+0

Это замечательно! :) –

+0

только одна вещь .. любая идея, как это сделать дважды? –

+1

сделайте два 'Matrices', дважды вызовите' SetPolyToPoly' и, наконец, примените те 'Marices' дважды, каждый раз устанавливая правильное обрезание на' Canvas' – pskink