1

我正在尝试构建一个简单的应用程序,该应用程序将显示一个二维、可滚动的方形瓷砖矩阵。想象一个 2D 魔方,您可以在其中选择滚动单行或单列,就好像它是一个环一样。

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);

我真的不喜欢这种方法,因为我想更改磁贴的顶部和左侧参数而不是边距,但这是我能做到的最好的。

我为每个图块附加了一个侦听器来处理相关行或列的拖动,具体取决于拖动事件的方向。一切似乎都很好,除了一些问题:

  1. 当我向右滚动一行时,右边距上的最后一个图块会逐渐缩小,就好像它试图填充剩余空间一样,最终会消失。
  2. 然后当我向左滚动时,消失的图块将不会重新出现。

此外,我仍然需要弄清楚给用户带来无限行/列错觉的最佳方式是什么。我认为我应该复制每行/列两侧的所有图块,可能仅在滚动该行/列时。

我向您寻求帮助只是为了了解您认为实现此界面的最佳方式,因为我认为我弄乱了代码。如果您需要更多详细信息,请问我。

谢谢!

4

1 回答 1

1

如果我这样做,我的倾向是在比你更低的水平上进行。我会使用SurfaceView作为主视图并使用Canvas.drawBitmap()渲染图块。这可能听起来像是更多的工作,但我认为这是做你想做的事情的正确方法,最终你会对结果更满意。

解决你的两个问题:

  1. drawBitmap()I 链接到的版本允许您指定要绘制的位图子集,因此您可以剪切图块而不是在它离开屏幕时缩小它。
  2. 您将负责确定去哪里(并将其绘制到那里),因此表示图块矩阵的数据结构也需要表示屏幕外图块。
于 2012-05-31T19:44:31.513 回答