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

Я хочу добавить эффекты из своего списка слоев на изображение, загружаемое пользователем. В этом коде я могу влиять только на изображение из нарисованного. это мой xml-файл для эффекта

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorPrimary"/>
<item>
    <bitmap android:src="@drawable/icn" android:gravity="center" android:alpha="0.1"/>
</item>

<item android:top="300dp"
    android:left="0dp"
    >
    <rotate
        android:fromDegrees="-12">
        <shape
            android:shape="rectangle">
            <solid
                android:color="?android:colorBackground"/>
        </shape>
    </rotate>
</item>

это мой xml-файл для отображения окончательного изображения

<ImageView
    android:id="@+id/bgImage"
    android:layout_width="match_parent"
    android:gravity="center"
    android:background="@drawable/background"
    android:layout_height="290dp"/>

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

прежде всего Создайте список слоев следующим образом

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:drawable="@drawable/background" />
    <item 
        <shape>
            <solid/>
            <stroke android:width="1dip" android:color="#225786" />
            <corners android:radius="10dip"/>
            <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
        </shape>
    </item> 
  </layer-list> 

просто хочу фон:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/background"
    android:tileMode="repeat" >

</bitmap>

И, наконец, добавить фон для ImageView

<ImageView
    android:id="@+id/bgImage"
    android:layout_width="match_parent"
    android:gravity="center"
    android:background="@drawable/background"
    android:layout_height="290dp"/>
0 голосов
/ 05 июля 2018

Вы можете построить LayerDrawable по коду вместо xml.

Просто новый LayerDrawable и вызов его метода addLayer для добавления Drawable s, и все свойства, которые вы устанавливаете из xml, также могут быть установлены в коде, такие как setLayerInset методы.

Например, определите чертеж:

<?xml version="1.0" encoding="utf-8"?>
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="-12">
    <shape
        android:shape="rectangle">
        <solid
            android:color="?android:colorBackground"/>
    </shape>
</rotate>

Получить отрисовку из кода:

Drawable myDrawable;
Resources res = getResources();
try {
   myDrawable = Drawable.createFromXml(res, res.getXml(R.xml.my_drawable));
} catch (Exception ex) {
   Log.e("Error", "Exception loading drawable"); 
}

Создайте LayerDrawable и добавьте в него слой:

LayerDrawable layerDrawable = new LayerDrawable();
layerDrawable.addLayer(userDrawable); // userDrawable is from the user upload image
layerDrawable.addLayer(myDrawable);
0 голосов
/ 05 июля 2018

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

Вот пример:

Bitmap effects = BitmapFactory.decodeResource(context.getResources(), R.drawable.effect_name);
Bitmap[] parts = new Bitmap[2];
parts[0] = userImage; //Bitmap
parts[1] = effects; //Bitmap
Bitmap result = Bitmap.createBitmap(parts[0].getWidth() * 2, parts[0].getHeight() * 2, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
for (int i = 0; i < parts.length; i++) {
    canvas.drawBitmap(parts[i], parts[i].getWidth() * (i % 2), parts[i].getHeight() * (i / 2), paint);
}
...