Как сделать (матрицу?) Преобразование навсегда RecyclerView
В настоящее время я работаю с RecyclerView
который имеет горизонтальный LinearLayout
, RecyclerView
занимает весь экран:
и я нахожу способ сделать исправление преобразования RecyclerView
как это:
обратите внимание, что трансформация похожа на "погружение" или "падение" для создания "глубокого" эффекта. Поскольку размер предметов может меняться, мне нужно постоянное преобразование, поэтому я думаю сделать это в RecyclerView
Есть ли способ сделать это? возможно способ сделать это на onDraw
??
Заранее большое спасибо.
С уважением.
Рафаэль.
ДОБАВИТЬ:
Я хотел бы заметить, что PageTransformer
делает что-то подобное. На самом деле, то, что я хочу, очень похоже на то, что делает Samsung Galaxy S3, когда вы прокручиваете один из их Launchers (который использует ViewPager
), но я бы хотел исправить это преобразование:
Что я пытаюсь?
Я пытаюсь прокрутить большой горизонтальный адаптер RecyclerView
, но я бы хотел немного "сложить" вид, чтобы создать впечатление "цилиндра".
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();
}