将图像限制为包含视图的大小 (xamarin.android)
Limit Image to size of containing view (xamarin.android)
我正在尝试使用 Xamarin.Android 中的 GridLayout 创建棋盘。 GridLayout 中的每个 View 都是一个图像视图,描绘了一个片段(如果正方形包含一个片段)。添加图片资源前,看板显示正常。但是一旦添加图像,它就会将 ImageView 的大小推得比预期的大得多。
这是我正在使用的代码。以下方法是 运行 为板上的每个方块创建 ImageView 和 returns 将其添加到 GridLayout:
public View BuildSquare(Square squareModel)
{
SquareView rtn = new SquareView(this.Activity, squareModel); //SquareView extends ImageView
rtn.UpdateBackgroundColor(); //set square color
if (squareModel.Piece != null)
{
rtn.DrawPiece();
}
GridLayout.LayoutParams param = new GridLayout.LayoutParams();
//set weight of each row and column to ensure equal size
param.RowSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
param.ColumnSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
rtn.LayoutParameters = param;
return rtn;
}
DrawPiece()方法如下,设置图片资源:
public void DrawPiece()
{
if (squareModel.Piece == null) return;
string key = squareModel.Piece.GetPieceNotation();
int resource = -1;
//get the image resource corresponding to the piece on the ssquare
if (AndroidConstants.PieceResources.TryGetValue(key, out resource))
{
this.SetImageResource(resource);
}
this.SetScaleType(ScaleType.FitXy);
}
当我注释掉 rtn.DrawPiece() 行时,面板正确显示如下所示:
但是当包含该行并设置图片资源时,显示如下:
您在这里看到的是图板上左上角的方块,为了容纳图像而膨胀得很大。我希望缩放图像以适合上面第一张图像中的正方形。我尝试过使用不同的 ScaleTypes,但似乎没有什么区别。这与使用 GridLayout 有关吗?还是这里发生了其他我想念的事情?
我认为您需要将高度和宽度设置为您的 SquareView
。
例如:
public View BuildSquare(Square squareModel)
{
SquareView rtn = new SquareView(this, squareModel); //SquareView extends ImageView
rtn.UpdateBackgroundColor(); //set square color
if (squareModel.Piece ==0)
{
rtn.DrawPiece();
}
//Set the height and width
GridLayout.LayoutParams param = new GridLayout.LayoutParams(new ViewGroup.LayoutParams(50, 50));
//set weight of each row and column to ensure equal size
param.RowSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
param.ColumnSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
rtn.LayoutParameters = param;
return rtn;
}
结果:
我正在尝试使用 Xamarin.Android 中的 GridLayout 创建棋盘。 GridLayout 中的每个 View 都是一个图像视图,描绘了一个片段(如果正方形包含一个片段)。添加图片资源前,看板显示正常。但是一旦添加图像,它就会将 ImageView 的大小推得比预期的大得多。
这是我正在使用的代码。以下方法是 运行 为板上的每个方块创建 ImageView 和 returns 将其添加到 GridLayout:
public View BuildSquare(Square squareModel)
{
SquareView rtn = new SquareView(this.Activity, squareModel); //SquareView extends ImageView
rtn.UpdateBackgroundColor(); //set square color
if (squareModel.Piece != null)
{
rtn.DrawPiece();
}
GridLayout.LayoutParams param = new GridLayout.LayoutParams();
//set weight of each row and column to ensure equal size
param.RowSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
param.ColumnSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
rtn.LayoutParameters = param;
return rtn;
}
DrawPiece()方法如下,设置图片资源:
public void DrawPiece()
{
if (squareModel.Piece == null) return;
string key = squareModel.Piece.GetPieceNotation();
int resource = -1;
//get the image resource corresponding to the piece on the ssquare
if (AndroidConstants.PieceResources.TryGetValue(key, out resource))
{
this.SetImageResource(resource);
}
this.SetScaleType(ScaleType.FitXy);
}
当我注释掉 rtn.DrawPiece() 行时,面板正确显示如下所示:
但是当包含该行并设置图片资源时,显示如下:
您在这里看到的是图板上左上角的方块,为了容纳图像而膨胀得很大。我希望缩放图像以适合上面第一张图像中的正方形。我尝试过使用不同的 ScaleTypes,但似乎没有什么区别。这与使用 GridLayout 有关吗?还是这里发生了其他我想念的事情?
我认为您需要将高度和宽度设置为您的 SquareView
。
例如:
public View BuildSquare(Square squareModel)
{
SquareView rtn = new SquareView(this, squareModel); //SquareView extends ImageView
rtn.UpdateBackgroundColor(); //set square color
if (squareModel.Piece ==0)
{
rtn.DrawPiece();
}
//Set the height and width
GridLayout.LayoutParams param = new GridLayout.LayoutParams(new ViewGroup.LayoutParams(50, 50));
//set weight of each row and column to ensure equal size
param.RowSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
param.ColumnSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
rtn.LayoutParameters = param;
return rtn;
}
结果: