当前位置: 首页 > 知识库问答 >
问题:

如何对具有固定纵横比视图的扩展视图进行膨胀

萧献
2023-03-14

在我的应用html" target="_blank">程序中,我有一个滚动视图。在应用程序的生命周期中,我会动态地向滚动视图添加新视图。我可以添加很少问题的视图,但我不能得到正确的尺寸。下面是我想要的布局草图:

在图像中,我有一个尺寸为宽度高度的屏幕。它包含一个horizontalscrollview(或者可能是一个recyclerview,但我不确定如何使用它),当向它添加视图时,该视图将会增长。我希望添加到视图中的每个项目的宽度等于屏幕高度的五分之一,并且具有匹配的高度。我可以使这工作,如果我硬编码的宽度膨胀的视图,然而,我的视图不会是相同的纵横比在所有电话。

注意:我试过使用PercentralRelativeLayout,但无法使其工作。不确定如何解决这个问题...有什么想法吗?

赏金说明:我将接受Java或C#(Xamarin)的答案!!我的项目是在Xamarin中的,所以如果它能用于这一点,或者如果它能很容易地适应在C#中工作,那将是很好的

共有1个答案

公西姚石
2023-03-14

您不希望您的视图是屏幕高度的五分之一,而是希望它是父视图高度的五分之一。或者准确地说,你希望你的宽度是视图高度的五分之一。

不同之处在于,使用屏幕宽度/高度可能在您的设备上起作用,但在其他设备上则会中断。如果有人用分屏打开你的app,你会怎么做?

无论视图维度的定义如何,方法都是相同的:如果您想要一个遵循某些规则的视图,您必须创建自己的视图并相应地度量视图。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
  int wantedWidth = availableHeight / 5;

  setMeasuredDimension(wantedWidth, availableHeight);
}

基本上就是这样。您可能需要阅读有关measurespec和一般度量视图的适当文档。我还写了一篇关于自定义视图的博文,涵盖了一些基础知识。

然后,只需将自定义视图添加到支持ScrollView的LinearLayout中,就可以设置好了。

下面是基本可以工作的完整示例,您可能想要使用一些不同于框架布局的东西。

public class FifthWidthView extends FrameLayout {
  public FifthWidthView(Context context) {
    super(context);
  }

  public FifthWidthView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public FifthWidthView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
      int wantedWidth = availableHeight / 5;

      setMeasuredDimension(wantedWidth, availableHeight);
    }
}
 类似资料:
  • 我正在尝试在RecyclerView的行之间嵌入图像(作为另一个ViewType/ViewHolder)。所述图像必须具有9:5的宽高比,最大高度为600px,因此在较大的手机或平板电脑上不会变得巨大,因此,如果由于宽高比调整大小,其大小与父宽度不匹配,则必须水平居中。 在没有自定义代码的情况下,这可以实现吗?我尝试了 ConstraintLayout 和 PercentFrameLayout,但

  • 那么如何对此?要扩展什么才能只调用setContentView()或setLayoutResource()? 我看了很多这样的答案,但没有一个符合我的问题。

  • 有很多关于3D的opengl投影矩阵的很棒的教程,但我不是在做3D。我真的很难根据自己的喜好进行正交投影设置。 int宽=320;int高=480; 我使用这些设置创建了一个视图投影矩阵。 创建此视图和投影矩阵并将它们传递给gpu之后。 然后我创建一个从的四边形,以便它的原点位于中心。 然后我为四边形制作一个比例矩阵,这样我就可以在屏幕上看到它了。它呈现为一个完美的正方形,但当然glViewpor

  • 我在垂直链中有两个视图(视图A、视图B)。viewA的纵横比应始终为1:1,而viewB的高度是动态的(可能为400dp,可能为700dp) 预期结果:当 viewB 的高度太大而无法容纳屏幕中的两个视图时,应减小宽度视图 A(保持纵横比)。 实际结果:视图A的宽度总是与父级匹配,如果视图B的高度太大,视图会离开屏幕边界。 注意:最好使用ConstantsLayout,并且不要有嵌套的视图组。

  • 很多时候,在制作网页时,我们希望在其他页面中重复某些页面。 CakePHP具有这样的功能,可以在另一个视图中扩展视图,为此,我们不需要再次重复代码。 extend()方法用于扩展View文件中的View 。 此方法采用一个参数,即带路径的视图文件的名称。 提供View文件的名称时,请勿使用扩展名.ctp。 例子 (Example) 在config/routes.php文件中进行更改,如以下程序所示

  • 问题内容: 我正在尝试从 遍及海底500m x 40m的声纳数据绘制海底3D图像。我将Matplotlib / mplot3d与 Axes3D配合使用,并且希望能够更改轴的纵横比,以便 按比例缩放x和y轴。具有生成的数据而非 实际数据的示例脚本是: 以及此脚本的输出图像: matplotlib输出图像 现在,我想对其进行更改,以使沿轨迹(x)轴 的1米与范围(y)轴的1米相同(或 取决于所涉及的相