我的TableLayout
填充了ImageView
。我使用这些视图允许人们通过将图标拖放到ImageView
上来绘制图表。
这是如何工作的:我有一个名为IconContainer
的类,它是一个通过tag()属性(ImageView
)分配给ImageView.setTag()
的类,然后存储每个属性该类作为xml文件中的节点。 (该标记用于帮助我进行其他操作并识别ImageViews
)
这就是xml结构的样子:
-<column columnID="1">
<drawableID>2130837525</drawableID>
<compTypeID>-1</compTypeID>
<componentID>-1</componentID>
<rotation>180.0</rotation>
</column>
最后的问题。当我从文件加载xml时,我想根据旋转字段中的值(ex 180度)旋转ImageView
。但是当我设置矩阵时,它会加载一个不可见的ImageView
。该图标根本没有显示,这是我用来在ImageView
保存到文件之前旋转的完全相同的旋转方法,我不知道为什么。这是我加载xml的代码,填充需要填充的所有内容并旋转我的ImageView
for (int r=0; r < rowCount; r++)
{
NodeList cList = rList.item(r).getChildNodes();
TableRow tr = new TableRow(this);
for (int c=0; c < columnCount; c++)
{
int drawableID = -1;
NodeList properties = cList.item(c).getChildNodes();
IconContainer ic = new IconContainer();
//get the drawable id
String stringID = properties.item(0).getTextContent();
drawableID = Integer.valueOf(stringID);
ic.setDrawableID(drawableID);
ic.setCompTypeID(Integer.parseInt(properties.item(1).getTextContent()));
ic.setComponentID(Integer.parseInt(properties.item(2).getTextContent()));
float rotAngle = Float.valueOf(properties.item(3).getTextContent());
ic.setAngle(rotAngle);
Log.i("customException", "angle from laoded xml: " + rotAngle);
//Create our imageview that will act as our cell
ImageView im = new ImageView (this);
im.setOnDragListener(dropListener);
im.setOnClickListener(singleClickListener);
im.setOnLongClickListener(longListen);
im.setMinimumHeight(50);
im.setMinimumWidth(50);
if(drawableID != -1)
{
Bitmap pic = BitmapFactory.decodeResource(getResources(), drawableID);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(pic, 50, 50, false);
im.setImageBitmap(resizedBitmap);
ic.setImage(im);
ic.setName(context.getResources().getString(drawableID));
im.setTag(ic);
//rotate the icon ----------------------------> this is where the problem lays. the icon never shows up(if I take this out, then the icon shows up)
im.setScaleType(ImageView.ScaleType.MATRIX);
Matrix matrix = new Matrix();
matrix.set(im.getImageMatrix());
matrix.postRotate(rotAngle, im.getWidth()/2, im.getHeight()/2);
im.setImageMatrix(matrix);
}
tr.addView(im);
}
table.addView(tr);
}
答案 0 :(得分:0)
想出来。这是因为这条线:
matrix.postRotate(rotAngle, im.getWidth()/2, im.getHeight()/2);
我的im
高度和宽度似乎为0,因此图标永远不会出现。以下是有效的解决方案:
matrix.postRotate(rotAngle, resizedBitmap.getWidth() / 2, resizedBitmap.getHeight() / 2);
我最终使用了我创建的调整大小的位图,并将其用作我现在可用的高度和宽度的图片。