Я пытаюсь создать простое приложение, которое покажет двумерную прокручиваемую матрицу квадратных плит. Представьте себе 2D Rubick Cube, где вы можете выбрать прокрутку одной строки или одного столбца, как если бы это было кольцо.
Я разместил RelativeLayout
внутри основного представления и поместил все фрагменты матрицы внутри него через пользовательскую реализацию компонента ImageView
. Я установил точное положение одиночной плитки, манипулирующей ее значением RelativeLayout.LayoutParams
:
RelativeLayout rl = ...;
TileView tile = ...;
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(size, size);
rlp.setMargins(left, top, 0, 0);
rl.addView(tile, rlp);
Мне действительно не нравится этот подход, так как я хотел бы изменить верхний и левый параметры плитки вместо полей, но это лучшее, что я смог сделать.
Я привязывал слушателя к каждой плитке для обработки перетаскивания относительной строки или столбца в зависимости от направления события перетаскивания. Кажется, все работает нормально, за исключением нескольких проблем:
Кроме того, мне все же нужно понять, что является лучшим способом дать пользователю иллюзию бесконечной строки/столбца. Я думаю, что я должен реплицировать все плитки с обеих сторон каждой строки/столбца, вероятно, только тогда, когда прокручивается эта строка/столбец.
Я прошу вас о помощи, чтобы понять, что вы считаете лучшим способом реализовать этот интерфейс, поскольку я думаю, что я испортил код. Если вам нужна дополнительная информация, просто спросите меня.
Спасибо!
Если бы я делал это, моя склонность заключалась в том, чтобы идти на него на более низком уровне, чем вы. Я бы использовал SurfaceView в качестве основного представления и отображал плитки с помощью Canvas.drawBitmap(). Вероятно, это похоже на работу, но я думаю, что это правильный способ сделать то, что вы пытаетесь сделать, и что в конечном итоге вы будете более счастливы с результатами.
Чтобы решить две проблемы:
drawBitmap()
я связан, позволяет вам указать подмножество Bitmap для рисования, чтобы вы могли скопировать фрагмент, а не уменьшать его, когда он отключается от экрана.
SurfaceView
, как мне обрабатывать эти события? В таком случае у меня был бы один большой вид, и я должен использовать координаты, чтобы найти плитку, к которой я прикасаюсь?