我正在尝试构建一个简单的应用程序,它将显示一个二维,可滚动的方形拼贴矩阵。想象一下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);
我真的不喜欢这种方法,因为我想更改拼贴的顶部和左侧参数而不是边距,但这是我能够做到的最好的。
我为每个磁贴附加了一个监听器,以处理相对行或列的拖动,具体取决于拖动事件的方向。除了一些问题外,一切似乎都很好:
此外,我仍然需要弄清楚为用户提供无限行/列的错觉的最佳方法是什么。我想我应该复制每行/每一行的所有图块,可能只在滚动该行/列时。
我正在请求您帮助,以了解您认为实现此界面的最佳方式,因为我认为我搞砸了代码。如果您需要更多细节,请问我。
谢谢!
答案 0 :(得分:1)
如果我这样做,我倾向于以比你更低的水平去做。我使用SurfaceView作为主视图,并使用Canvas.drawBitmap()渲染切片。这可能听起来像是更多的工作,但我认为这是你正在做的事情的正确方法,最终你会对结果更满意。
解决您的两个问题:
drawBitmap()
版本允许您指定要绘制的位图的子集,因此您可以剪切图块而不是缩小它,因为它离开屏幕。