我正在尝试构建一个简单的应用程序,该应用程序将显示方形贴砖的二维,可滚动矩阵。想象一下2D Rubick's Cube,您可以选择将单行或单列滚动,就像它是一个戒指一样。如何在Android中制作可滚动的矩阵?
我在主视图中放置了一个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”,我应该如何处理这些事件?在那种情况下,我会有一个大视图,应该使用坐标来找到我感动的瓷砖? – marzapower
是的,就像我说的那样,它的层次较低 - 所以你必须做一些小算术来将触摸坐标转换为平铺行/列坐标,然后从这里开始。对于你在做什么而言,有一定的独特性的门槛,在哪一点下降到较低的水平会使事情变得更容易,即使诸如弄清楚哪个瓷砖被触摸变得稍微难一些。我会说你在做什么听起来像游戏一样,大多数游戏都会按照我的建议做一些事情。 –
我认为即使是动画也很难处理。我的意思是,如果我需要为单个磁贴启动一个动画以使其消失(在Alpha通道上工作),我认为在这个较低的级别上执行也将非常困难... – marzapower