将图像的中心对齐到另一个图像的底部
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将图像的中心对齐到另一个图像的底部相关的知识,希望对你有一定的参考价值。
目前我面临着在颤动中创建响应式设计的问题,因此它可以在所有屏幕尺寸的相同外观和感觉下正常工作
目前我需要像下面的图像一样创建,我需要将图像的中心(下图中的红色图像)与另一个图像的中心(蓝色大图像)对齐,有时红色的图像居中但是在不同的屏幕尺寸,它可以向上或向下凸起一点点。
这是我的尝试:
class ImageAssetUtils
{
static Image drawImage(String imagePath, double requiredWidth, double requiredHeight)
{
double screenFactor = 1.0;
screenFactor = ScreenSize.isSmallScreenSize(myApp.navigatorState.currentContext) ? 0.8 : screenFactor;
screenFactor = ScreenSize.isLargeScreenSize(myApp.navigatorState.currentContext) ? 1.21 : screenFactor;
requiredWidth = requiredWidth * screenFactor;
requiredHeight = requiredHeight * screenFactor;
return new Image.asset(imagePath, width: requiredWidth, height: requiredHeight);
}
}
class StyleUtils
{
static EdgeInsets givePadding(EdgeInsets absoluteEdges)
{
double screenFactor = 1.0;
screenFactor = ScreenSize.isSmallScreenSize(myApp.navigatorState.currentContext) ? 0.75 : screenFactor;
screenFactor = ScreenSize.isLargeScreenSize(myApp.navigatorState.currentContext) ? 1.14 : screenFactor;
double left = absoluteEdges.left * screenFactor;
double right = absoluteEdges.right * screenFactor;
double top = absoluteEdges.top * screenFactor;
double bottom = absoluteEdges.bottom * screenFactor;
return EdgeInsets.only(left: left, right: right, top: top, bottom: bottom);
}
}
class Test extends StatefulWidget
{
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test>
{
@override
Widget build(BuildContext context)
{
return new Scaffold(
backgroundColor: Color.fromRGBO(235, 235, 235, 1.0),
body: new Stack(children: <Widget>[
new Image.asset('some Image.png',
fit: BoxFit.fill,
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.33
),
ListView(children: <Widget>[
new Padding(
padding: StyleUtils.givePadding(EdgeInsets.only(top: 16.0)),
child: new Center(
child: new Container(
child: ImageAssetUtils.drawImage("my image.png", 100.0, 100.0),
),
)
)
]),
])
);
}
}
如果有任何帮助,将非常感谢,提前感谢。
答案
FractionalTranslation小部件用于操纵子窗口小部件的位置。你还必须将Offset传递给它,这将定义位置操纵。子窗口小部件将是红色矩形,而Offset
将具有值x: 0.0
和y: 0.5
。这会使红色矩形的高度降低一半。
现在你可以将红色矩形放在蓝色矩形上方。为此,您可以使用Stack小部件。你必须设置alignment: Alignment.bottomCenter
,这样红色矩形就会放在中心的下边缘。
您可以在下面找到代码示例。蓝色矩形的大小是屏幕的三分之一。红色矩形是蓝色矩形的一半。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(theme: ThemeData(), home: Home());
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: BlueRedRects(
big: MediaQuery.of(context).size.width / 3.0,
small: MediaQuery.of(context).size.width / 6.0,
),
),
);
}
}
class BlueRedRects extends StatelessWidget {
final double big;
final double small;
BlueRedRects({this.big, this.small});
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
Container(color: Colors.blue, width: big, height: big),
FractionalTranslation(
translation: Offset(0.0, 0.5),
child: Container(
color: Colors.red,
width: small,
height: small,
),
)
],
);
}
}
以上是关于将图像的中心对齐到另一个图像的底部的主要内容,如果未能解决你的问题,请参考以下文章
Android RelativeLayout 将一个视图的中心对齐到另一个视图的右上角