如何在用户上传的图片上添加图层列表?

时间:2018-07-05 06:49:40

标签: android layer-list

我想在用户上传的图像上添加图层列表中的效果。在此代码中,我只能对可绘制图像进行效果,我想将其更改为用户上传图像 这是我生效的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 :(得分:0)

您可以通过组合用户照片的位图和图层列表可绘制对象来实现。

以下是示例:

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);
}

答案 1 :(得分:0)

首先创建一个这样的图层列表

<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"/>

答案 2 :(得分:0)

您可以通过代码而不是xml来构建LayerDrawable

只需新建一个LayerDrawable并调用其addLayer方法即可添加Drawable,并且您在xml中设置的所有属性也可以在代码中进行设置,例如{{1} }方法。

例如,定义可绘制对象:

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