Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义组件在代码中扩展FrameLayout_Android_Custom Controls_Android Layout_Imageview_Android Custom View - Fatal编程技术网

Android自定义组件在代码中扩展FrameLayout

Android自定义组件在代码中扩展FrameLayout,android,custom-controls,android-layout,imageview,android-custom-view,Android,Custom Controls,Android Layout,Imageview,Android Custom View,我想为游戏创建一个Android自定义组件。其基本思想是自定义组件的形状为方形,并包含其他方形ImageView组件。内部的ImageView组件可以根据需要进行缩放和/或裁剪,但必须保持方形。行数==列,始终为。难度级别决定了运行时行和列的确切值。随着游戏变得越来越困难,行和列的数量将相等地增加,但每个ImageView的缩放大小将相应地缩小。我希望组件之间有一些固定的小间距,主要是这样看起来很好。显示屏不可滚动,所有项目必须同时显示在显示屏上 在经历了一系列失败的尝试之后,我感到沮丧,我不确

我想为游戏创建一个Android自定义组件。其基本思想是自定义组件的形状为方形,并包含其他方形ImageView组件。内部的ImageView组件可以根据需要进行缩放和/或裁剪,但必须保持方形。行数==列,始终为。难度级别决定了运行时行和列的确切值。随着游戏变得越来越困难,行和列的数量将相等地增加,但每个ImageView的缩放大小将相应地缩小。我希望组件之间有一些固定的小间距,主要是这样看起来很好。显示屏不可滚动,所有项目必须同时显示在显示屏上

在经历了一系列失败的尝试之后,我感到沮丧,我不确定制作这个定制组件的最佳方法是什么

我的最新想法大致如下:

我通过“扩展框架布局”创建自定义组件类。在我的构造函数中,我在代码中创建了一个任意的小正方形ImageView对象。我希望有一天其他人能重用我的自定义组件,所以我用代码而不是XML来实现,这样自定义组件就不会依赖于任何必须定义的外部XML绘图。我设置了比例类型,以便ImageView保持其“方形”(我想我想要fitStart?)。我将方形ImageView的布局宽度和布局高度设置为“填充父对象”,以便ImageView填充包含FrameLayout的空间。我使用addView()将现在大而方形的ImageView添加到布局中

接下来,我创建一个RelativeLayout对象,并使用addView()以编程方式将其添加到我自己。因为我的基类是FrameLayout,我认为这将使RelativeLayout的大小与前面添加的square ImageView相同。至少我是这样读文档的

接下来,我测量ImageView,看看它有多大。我认为我无法衡量自己,因为我以前的尝试在这方面失败了。我的尺码一直是0。我的研究表明,这是因为我无法在施工期间测量自己。这变成了第二十二条军规。当我尝试将图像缩放到可用空间时,我做不到,因为还没有可用空间。我的希望是,因为我改为使用FrameLayout作为基类,并将ImageView添加到其中,所以我将能够测量新创建的并正确缩放的大正方形ImageView

如果一切按计划进行,我现在知道我的RelativeLayout在用户设备上的可用空间有多大,因为它与我的ImageView相同。通过知道有多少可用空间以及需要显示多少行和列,我可以相应地缩放我添加的每个ImageView,假设我记得考虑我添加的ImageView之间的间距。现在我不再需要正方形的ImageView,如果我想的话,可以让它消失

如果合理,我希望大型ImageView具有圆角,并且添加的每个ImageView也具有圆角。在ImageView之间添加了一个小间隙,这对于游戏来说看起来很酷。这样我就可以把它作为背景了

这似乎是一个很好的解决方案,比我以前没有成功的尝试要好,但如果有更好的方法…,我在听

以下是一些psuedo代码,据我所知,其中大部分内容与上述内容相同:

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. } } 构造() { ImageView squareImageView=新的ImageView(正方形); LayoutParams squareImageLayoutParams=新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.FILL\u父级); squareImageLayoutParams.addRule(fitStart); addView(squareImageView、squareImageLayoutParams); RelativeLayout RelativeLayout=新的RelativeLayout(上下文); LayoutParams relativeLayoutParams=新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.FILL\u父级); addView(relativeLayout,relativeLayoutParams); int size=squareImageView.getWidth();//应为缩放大小和正方形。 squareImageView.setVisibility(不可见);//可能吧? 为每行和每列循环 { 裁剪、缩放每个图像并将其添加到relativeLayout对象。 } } 我最基本的问题是,这是否是一个合理的解决方案?如果是这样,在psuedocode中有很多事情我还不知道怎么做

  • 如何在代码中创建一个小的方形ImageView
  • 如何在代码中设置scaleType
  • 我是否能够测量我的方形ImageView并获得正确的尺寸
  • 除了使其不可见之外,还有更好的方法移除方形ImageView吗
  • 让我的方形影像看不见会让它无法测量吗
  • 我看到一种叫做“可变形视图”的东西,在制作正方形时,这会比图像视图好吗
  • 如何将ImageView裁剪成正方形,将损失平均分配到两侧
我当然不希望任何人知道所有这些答案,但如果你知道任何可以分享的答案,我将不胜感激


谢谢。

有许多内置功能,可适当扩展到可用屏幕空间。我不完全理解您为什么要测量
ImageView
s

您是否考虑过使用
重量
?我会尝试固定大小的
GridView
(或
TableLayout
,或
LinearLayout
LinearLayout
)。如果内容物的重量正确,它们将保持其“方形”。您可以使用
GridView
的属性
verticalSpacing
horizontalSpacing
,也可以将
视图
s设置为空作为间距,以便将
权重
也添加到空格中

不要设置父元素的
weightsum
属性,但要确保元素的权重之和为hori