Как обменять изображение в списке слоев по растровому изображению? - PullRequest
3 голосов
/ 05 октября 2010

Вот мое растровое изображение

Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(url).getContent());
//Need some code to access "dynamicItem" and exchange it with my Bitmap

А вот мой список слоев (ничего впечатляющего).Я хочу обмениваться dynamicItem с моим Bitmap.

<?xml version="1.0" encoding="utf-8"?>
    <layer-list
      xmlns:android="http://schemas.android.com/apk/res/android">
      <item
        android:id="@+id/dynamicItem"
        android:drawable="@drawable/defaultItem" />
      <item>
        <bitmap

          android:src="@drawable/some_stuff_on_top"
          android:gravity="top|left" />
      </item>
    </layer-list>

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011

Метод setDrawableByLayerId в LayerDrawable принимает (int, Drawable) не (int, Bitmap), поэтому сначала создайте drawable из вашего растрового изображения

Drawable drawable = new BitmapDrawable(bitmap);
layerDrawable.setDrawableByLayerId(R.id.dynamicItem, drawable);
1 голос
/ 07 марта 2012

Чтобы избежать растяжения при смещении изображения, необходимо указать гравитацию.В моем случае это помогает с упомянутым решением:

android:gravity="top|left" 

или программно:

 private void shiftLayer(LayerDrawable pieceDrawable,int level){

        int l=level * shiftSize;
        int r=0;
        int t=0;
        int b=0;
        pieceDrawable.setLayerInset(level, l, t, r,  b);
        ((BitmapDrawable)pieceDrawable.getDrawable(level)).setGravity(Gravity.LEFT|Gravity.TOP);
    }

На экране Вы можете увидеть, что автономное изображение растянуто и размыто с левой стороны

example

stretch zoom

...