4

私は次のものを持っていますLayerDrawable

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/image_source"
        android:bottom="6dp"
        android:drawable="@drawable/default"
        android:left="14dp"
        android:right="14dp"
        android:top="6dp">
    </item>
    <item android:drawable="@drawable/metaphor_photo_portrait"/>

</layer-list>

コードから画像を動的に置き換えることができる必要があり@+id/image_sourceます。以下を使用して、Honeycomb +デバイスで成功しました:

mLayerDrawable.setDrawableByLayerId(R.id.image_source, drawable);
mLayerDrawable.invalidateSelf();

setDrawableByLayerIdただし、Gingerbread デバイスでは不安定であるため、これは Gingerbread デバイスでは機能しません(リンク 1リンク 2 )。ゼロから構築することをお勧めしLayerDrawableます。私はそれを始めましたが、現在intristicInset、最初のレイヤーの設定の問題に直面しています。

使ってみた

mLayerDrawable.setLayerInset(0, dp14, dp6, dp14, dp6);

dpxx自分で計算した定数はどこにありますか。ただし、この方法はジンジャーブレッドでも機能していないようです (リンク 1 )。

したがって、私は別の方法でそれを行うことにしました - 最初のレイヤーに設定したドローアブルの再角度の境界を設定します:

drawable.setBounds(dp14, dp6, dp90 - dp14, dp90 - dp6);

完璧ですが、LayerDrawableレイヤーの境界設定は無視されているようです(リンク1

ここで、2 つの画像ビューを組み合わせて使用​​することをお勧めします。ただし、私LayerDrawableは一部でLevelListDrawableあり、レイアウトを含めることはできないと思います。

LayerDrawable全体として、ハニカム以前のデバイスでは、私のコンテンツを変更することはできません。どのように進めればよいかについてのアドバイスをいただければ幸いです。

4

2 に答える 2

3
drawable.setBounds(mLayerDrawable.findDrawableByLayerId(R.id.image_source).getBounds());
mLayerDrawable.setDrawableByLayerId(R.id.image_source, drawable);        
mLayerDrawable.invalidateSelf();

参考: https ://github.com/ytRino/LayerDrawableSample/blob/master/src/net/nessness/android/sample/layerdrawable/LayerDrawableSampleActivity.java

于 2014-01-10T08:52:44.963 に答える
0

最後に、非常に奇妙な方法で中華鍋に入れました。

LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(layerDrawableResourceId);
layerDrawable.setDrawableByLayerId(R.id.image_source, drawable);
Drawable[] layers = {
   layerDrawable };
LayerDrawable layerDrawableNew = new LayerDrawable(layers);

私の同僚は、 new を作成しLayerDrawable、動作しないメソッドをそれに設定し、これLayerDrawableをさらに別のメソッドでラップすると、視覚化が正しいことを発見しました (画像が変更され、パディングが保持されます)。かなりの微調整と多くの「これは魔法だから触らないで」ですが、これが私たちが解決できる最善の解決策です。

于 2013-12-16T11:36:41.670 に答える