3

LayerDrawable を使用して、基になるイメージ (インデックス 0) に一連のホットスポット (インデックス 1+) を構築しています。ホットスポットはユーザー インターフェイスの操作に基づいて追加され、その位置は動的です。そのため、XML を使用するのではなく、プログラムでこれらすべてを実行しています。さらに (おそらく関係ない) 詳細として、FragmentStatePagerAdapter と ViewPager のコンテキストにあるように、Fragment を使用して LayerDrawable を保持しています。

問題は、setDrawableByLayerId を呼び出して LayerDrawable の Drawable を変更して画像を更新しようとすると、画像が変更されないことです (メソッドが true を返すにもかかわらず、レイヤーが見つかったことを示します)。

どうすればこれを機能させることができますか?

4

3 に答える 3

4

ここで自分の質問に答えて、誰かに役立つことを願っています。これを HTC Sensation で動作させる唯一の方法は、LayerDrawable を最初から再作成し、さらに次の変更を加えることでした。

LayerDrawable oldLayerDrawable = (LayerDrawable) imageView.getDrawable();
Drawable[] layers = new Drawable[2];
layers[0] = oldLayerDrawable.getDrawable(0);
layers[1] = getResources().getDrawable(R.drawable.hotspot_dot);
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);

きれいではありませんが、これは既知の問題のようです。

于 2013-03-13T12:01:43.950 に答える
2
newdrawable.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:48:09.410 に答える
0

問題は、「index」と「id」が異なるプロパティであることです。デフォルトでは、レイヤーの layerId は常に -1 です。ただし、を呼び出して明示的に設定しsetId(index, id)、次に呼び出すことができますsetDrawableByLayerId(id, Drawable)

于 2016-05-14T12:55:06.597 に答える