正在裁剪内部图层列表项目中的旋转

时间:2011-06-01 20:55:10

标签: android

我在Android上遇到图层列表问题。我想做一堆简单的图像。我可以使用以下代码实现这一点:

<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <rotate 
        android:pivotX="50%" android:pivotY="50%"
        android:fromDegrees="0" android:toDegrees="0">
        <bitmap
            android:src="@drawable/teste1"
            android:gravity="center" />
    </rotate>
</item>

<item>
    <rotate 
        android:pivotX="50%" android:pivotY="50%"
        android:fromDegrees="-9" android:toDegrees="-9">
        <bitmap
            android:src="@drawable/teste3"
            android:gravity="center" />
    </rotate>
</item>

<item>
    <rotate 
        android:pivotX="50%" android:pivotY="50%"
        android:fromDegrees="9" android:toDegrees="9">
        <bitmap
            android:src="@drawable/teste2"
            android:gravity="center" />
    </rotate>
</item>

</layer-list>

但是当我运行它时,结果会在顶部和底部裁剪,如下图所示:

cropped_image

我有另一个疑问:如果我在<item>上放了一个ID,我如何在我的View上检索它,以便我可以在代码中更改位图? documentation *表示我必须使用View.findViewByID,但我想获取BitmapDrawable,并且我无法将视图转换为Drawable!

我也尝试使用Canvas.drawBitmap在CustomView上编码相同的东西,但它看起来非常难看,如果有人能指出一个很好的解决方案,我也会很感激。

提前致谢

1 个答案:

答案 0 :(得分:1)

你把那个图层列表放在哪里?什么是使用它作为drawable的XML?您是否尝试将一些顶部和底部填充添加到包含图层可绘制的视图中?


至于从代码访问位图,您需要先获取LayerDrawable,然后使用其getDrawable或findDrawableByLayerId方法。

例如,如果您使用一层位图项作为ID为“容器”的视图的背景,则可以执行以下操作:

// get the layer list being used as the background of 'container'
View view = findViewById(R.id.container);
LayerDrawable layer = (LayerDrawable)view.getBackground();

// get the first layer's BitmapDrawable by index
BitmapDrawable bg = (BitmapDrawable)layer.getDrawable(0);

// get the BitmapDrawable of the layer whose id is 'teste2'
BitmapDrawable bgTeste2 = (BitmapDrawable)layer.findDrawableByLayerId(R.id.teste2);

// do whatever you want with the drawable
bg.setAlpha(60);