android - 如何在 Android 中制作可滚动矩阵?

标签 android android-layout android-relativelayout

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

我在主视图中放置了一个 RelativeLayout,并通过 ImageView 组件的自定义实现将矩阵的所有图 block 放置在其中。我通过操作其 RelativeLayout.LayoutParams 值来设置单个图 block 的确切位置:

RelativeLayout rl = ...;
TileView tile = ...;
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(size, size);
rlp.setMargins(left, top, 0, 0);
rl.addView(tile, rlp);

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

我将一个监听器附加到每个图 block 以处理相关行或列的拖动,具体取决于拖动事件的方向。除了一些问题外,一切似乎都运行良好:

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

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

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

谢谢!

最佳答案

如果我这样做,我倾向于在比您更低的级别上进行。我会使用 SurfaceView作为主视图并使用 Canvas.drawBitmap() 渲染图 block .这听起来可能需要更多的工作,但我认为这是做您想做的事情的正确方法,并且最终您会对结果感到满意。

解决你的两个问题:

  1. 我链接到的 drawBitmap() 版本允许您指定要绘制的位图的子集,因此您可以裁剪图 block 而不是在它离开屏幕时缩小它。
  2. 您将负责确定将什么放在哪里(并将其绘制在那里),因此表示图 block 矩阵的数据结构也需要表示屏幕外的图 block 。

关于android - 如何在 Android 中制作可滚动矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733078/

相关文章:

php - 通知网络服务如果应用程序关闭

android - 在 Android Studio 中使用 Jetpack Compose 时,我看不到预览的交互模式

android - 如何动态创建一个按钮?

Android RelativeLayout alignParentRight 没有正确对齐 Imageview

android - 如何获取复杂 ListView 行 View 中的 View ?

java - 不使用服务的定时通知

Android Button 背景无法识别/使用可绘制对象

android - 在标题栏之后对齐 Imageview

android - 使用 FrameLayout 将 TextView 置于 ImageView 之上

android - 相对布局的百分比宽度