旋转ImageView会导致ImageView图片消失

时间:2014-06-11 17:27:12

标签: java android xml matrix

我的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);
        }

1 个答案:

答案 0 :(得分:0)

想出来。这是因为这条线:

matrix.postRotate(rotAngle, im.getWidth()/2, im.getHeight()/2);

我的im高度和宽度似乎为0,因此图标永远不会出现。以下是有效的解决方案:

matrix.postRotate(rotAngle, resizedBitmap.getWidth() / 2, resizedBitmap.getHeight() / 2);

我最终使用了我创建的调整大小的位图,并将其用作我现在可用的高度和宽度的图片。