我想为游戏创建一个Android自定义组件。基本思想是自定义组件的形状为方形,并在其中包含其他方形ImageView组件。内部的ImageView组件可以根据需要进行缩放和/或裁剪,但必须保持方形。行数==列,总是。难度级别确定运行时行和列的确切值。随着游戏变得越来越困难,行数和列数将同等增加,但每个ImageView的缩放大小将相应缩小。我希望组件之间有一些固定的小间距,大多数情况下看起来不错。显示器不可滚动,所有项目必须同时适合显示器。
经过一系列尝试失败后,我感到很沮丧,我不确定制作这个自定义组件的最佳方法是什么。
我最近的想法是大致做到以下几点:
我通过“extends FrameLayout”创建自定义组件类。在我的构造函数中,我在代码中创建了一个任意的小方形ImageView对象。我希望其他人有一天能够重用我的自定义组件,所以我用代码而不是XML来做,这样自定义组件就不依赖于必须定义的任何外部XML drawable。我设置了比例类型,以便ImageView保留它的“方形”(我想我想要fitStart?)。我将方形ImageView的layout_width和layout_height设置为“fill_parent”,因此ImageView填充的空间与包含的FrameLayout中可用的空间一样大。我使用addView()将现在大而方形的ImageView添加到我的布局中。
接下来,我创建一个RelativeLayout对象,并使用addView()以编程方式将其添加到自己。因为我的基类是FrameLayout,我认为这会使RelativeLayout的大小与之前添加的方形ImageView相同。至少那是我阅读文档的方式。
接下来,我测量ImageView以查看它有多大。我不认为我可以衡量自己,因为我以前的尝试都失败了。我的体型一直保持0。我的研究说这是因为我在施工期间无法衡量自己。这变成了Catch-22。当我试图将我的图像缩放到可用空间时,我不能,因为还没有空间可用。我的希望是因为我改为使用FrameLayout作为我的基类并且我将ImageView添加到它,我将能够测量我新创建的和正确缩放的大方形ImageView。
如果一切按计划进行,我现在知道我的RelativeLayout在用户设备上的可用空间有多大,因为它与我的ImageView相同。通过知道有多少空间可用以及需要显示多少行和列,我可以正确地缩放我相应添加的每个ImageView,假设我记得要考虑我添加的ImageView之间的间距。现在我不再需要方形ImageView,如果我想要它可以让它消失。
如果合理,我希望大型ImageView具有圆角,并且每个添加的ImageView也具有圆角。添加ImageViews之间的差距很小,这对于游戏玩法来说看起来很酷。这样我就可以把它留作背景。
这似乎是一个很好的解决方案,并且比我以前没有奏效的尝试更好,但如果有更好的方法......,我正在倾听。
这是一些伪造的代码,基本上与我的理解大致相同:
construct() { ImageView squareImageView = new ImageView(Square); LayoutParams squareImageLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); squareImageLayoutParams.addRule(fitStart); addView(squareImageView, squareImageLayoutParams); RelativeLayout relativeLayout = new RelativeLayout(context); LayoutParams relativeLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); addView(relativeLayout, relativeLayoutParams); int size = squareImageView.getWidth(); // Should be the scaled size and square. squareImageView.setVisibility(INVISIBLE); // maybe? loop for each row and col { crop, scale and add each image to the relativeLayout object. } }
我最基本的问题是,这似乎是一个合理的解决方案吗?如果是这样,psuedocode中有很多东西,我不知道怎么做(还)。
我当然不希望任何人知道所有这些答案,但如果您知道任何可以分享的答案,我将不胜感激。
感谢。
答案 0 :(得分:0)
有许多内置功能可以正确缩放到可用的屏幕空间。我不完全理解你为什么要衡量ImageView
s。
您是否考虑过使用weight
?我会尝试固定尺寸GridView
(或TableLayout
或LinearLayout
LinearLayout
s。如果内容正确weight
,则它们将保持“正方形”。您可以使用verticalSpacing
的{{1}}或horizontalSpacing
属性,也可以将GridView
空为空格,以便将View
添加到空格中好。
不要设置父元素的weight
属性,但要确保元素的权重水平总和垂直等于它们的总和,并且方形ImageViews将始终正确缩放,无论有多少元素你进去了。