我正在尝试使用 Xamarin.Android 中的 GridLayout 创建棋盘。GridLayout 中的每个 View 都将是一个描绘一块的图像视图(如果正方形包含一块)。在添加图像资源之前,板子显示正常。但是一旦添加了图像,它就会将 ImageView 的大小推到比预期大得多的程度。
这是我正在使用的代码。为板上的每个方块运行以下方法并创建 ImageView 并将其返回以添加到 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;
}
结果:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句