如何在Android中创建可滚动矩阵?

时间:2012-05-24 07:32:58

标签: android android-layout relativelayout

我正在尝试构建一个简单的应用程序,它将显示一个二维,可滚动的方形拼贴矩阵。想象一下2D Rubick的立方体,您可以选择滚动单行或单列,就好像它是一个环。

我在主视图中放置了一个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. 当我向左滚动时,消失的瓷砖将不再出现。
  3. 此外,我仍然需要弄清楚为用户提供无限行/列的错觉的最佳方法是什么。我想我应该复制每行/每一行的所有图块,可能只在滚动该行/列时。

    我正在请求您帮助,以了解您认为实现此界面的最佳方式,因为我认为我搞砸了代码。如果您需要更多细节,请问我。

    谢谢!

1 个答案:

答案 0 :(得分:1)

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

解决您的两个问题:

  1. 我链接的drawBitmap()版本允许您指定要绘制的位图的子集,因此您可以剪切图块而不是缩小它,因为它离开屏幕。
  2. 您将负责确定哪些地方(并在那里绘制),因此表示拼贴矩阵的数据结构也需要代表屏幕外拼贴。