我在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>
但是当我运行它时,结果会在顶部和底部裁剪,如下图所示:
我有另一个疑问:如果我在<item>
上放了一个ID,我如何在我的View上检索它,以便我可以在代码中更改位图? documentation *表示我必须使用View.findViewByID,但我想获取BitmapDrawable,并且我无法将视图转换为Drawable!
我也尝试使用Canvas.drawBitmap在CustomView上编码相同的东西,但它看起来非常难看,如果有人能指出一个很好的解决方案,我也会很感激。
提前致谢
答案 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);