如何在网格中移动图像的相对位置?

Posted

技术标签:

【中文标题】如何在网格中移动图像的相对位置?【英文标题】:How can I move the relative position of an image in a grid? 【发布时间】:2021-07-25 09:56:27 【问题描述】:

我正在创建一个汽车应用程序,其中列出了汽车及其价格、型号、速度等。我想将价格定位在汽车图像上,如下所示:

为此,我创建了一个网格并允许图像填充整个事物,同时将文本(周围有一个框架)强制到较低的列/行中。但是,我最终在图表顶部出现了空白。看一看。为了便于查看,我将网格设置为蓝色背景色。

这里的问题是纵横比,因为 确实 填满整个网格的图像会切断边。空白的大小相当于覆盖层,所以如果我将覆盖层放低一点,就会导致两边都有更多的空白。

注意:有些汽车有不同的纵横比,所以这必须是一个适用于其他图像的修复程序。

注意 2:这必须是相对位置修正,因为像将图像的边距设置为 -100 这样的明显方法在其他分辨率屏幕上不起作用,并且可能会被解雇。

问题:我怎样才能相对(例如让它在每个屏幕上工作)强制图像到页面顶部,同时仍然保持相同的纵横比并保持覆盖?

这是前端。

<StackLayout>
    
    <!-- Image and cost grid-->
    <Grid BackgroundColor="Blue">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="63*"/>
            <ColumnDefinition Width="35*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="75*"/>
            <RowDefinition Height="25*"/>
        </Grid.RowDefinitions>

        <Image Source="Binding ImageLocation" Grid.ColumnSpan="3" Grid.RowSpan="2"/>
        
        <Frame BackgroundColor="White" CornerRadius="5" Grid.Column="1" Grid.Row="1">
            <Label Text="Binding Cost" FontSize="Large" HorizontalTextAlignment="End" TextColor="Black"/>
        </Frame>
        
    </Grid>
    
    <!-- Information about the car -->
    <StackLayout Padding="15">
        <Label Text="Binding Company" FontSize="Large"/>
        <Label Text="Binding Model" FontSize="Medium" FontAttributes="Bold"/>
    </StackLayout>
    
</StackLayout>

【问题讨论】:

这些汽车图像是否有不同的尺寸(或者 Grid 的第一行应该是固定高度)?而且您还希望价格框架相应地调整高度? 【参考方案1】:

移动你的框架而不是图像。

    在一行中设置网格内容。 将框架VerticalOptions 设置为End 设置框架HeightRequestMargin(负值)。 将底部 StackLayout VerticalOptions 设置为 FillAndExpand
        <StackLayout>

            <!-- Image and cost grid-->
            <Grid BackgroundColor="Blue" ColumnDefinitions="63*, 35*, 2*">
                <Image Source="Binding ImageLocation" Grid.ColumnSpan="3"/>

                <!-- Shape the Frame here -->
                <Frame HeightRequest="40"  Margin="0,0,0,-20"  VerticalOptions="End" 

                       BackgroundColor="White" CornerRadius="5" Grid.Column="1" >
                    <Label Text="Binding Cost" FontSize="Large" HorizontalTextAlignment="End" TextColor="Black"/>
                </Frame>
            </Grid>

            <!-- Information about the car -->
            <StackLayout Padding="15" VerticalOptions="FillAndExpand">
                <Label Text="Binding Company" FontSize="Large"/>
                <Label Text="Binding Model" FontSize="Medium" FontAttributes="Bold"/>
            </StackLayout>

        </StackLayout>

【讨论】:

以上是关于如何在网格中移动图像的相对位置?的主要内容,如果未能解决你的问题,请参考以下文章

在尝试使用一个图像创建网格并将其应用于另一个图像时,我需要帮助补偿图像的移动

Unity中基于网格/平铺移动+碰撞?

使图像和文本的网格系统具有移动响应性

我们如何防止当我调整窗口大小时,我的图像使用 HTML-CSS 移动?

将 jLabel 移动到 jPanel 中的不同位置(类似 Pacman 的游戏)

如何使用位置移动具有柔和效果的元素:相对左侧:220px [重复]