Android 开发中 对下上两个图层的相关操作有关问题,求大神果断喷小弟我吧

Android 开发中 对下上两个图层的相关操作问题,求大神果断喷我吧!
我先上效果图:
Android 开发中 对下上两个图层的相关操作有关问题,求大神果断喷小弟我吧
然后下面的分别是两个图片,第一个是照片,也就是背景层。第二个是罩盖图。
Android 开发中 对下上两个图层的相关操作有关问题,求大神果断喷小弟我吧
Android 开发中 对下上两个图层的相关操作有关问题,求大神果断喷小弟我吧
下面就是我的源码:
package com.example.androidtest;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.View;

public class TestView extends View {
private Paint redPaint;
private Bitmap bmp1, bmp2;

public TestView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}

public TestView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public TestView(Context context) {
super(context);
init();
}

private void init() {
bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.meinv);//背景
bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.meinv2);//罩盖

redPaint = new Paint();
redPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(bmp1, 0f, 0f, null);
canvas.drawBitmap(bmp2, 0f, 0f, redPaint);
}
}

好了,上面代码我设置两图相交的模式是DST_OUT(取下层绘制非交集部分) ,但是现在我不解的是我设置什么模式它都没效果,感情这就是坑人的。现在我要的效果就是保留效果图中的美女部分,其余黑色部分全部清掉,求大神来吧!真诚请教!
------解决思路----------------------
canvas.drawBitmap(bmp2, 0f, 0f, redPaint);只是设置了Paint和bmp2相关的事件,和canvas.drawBitmap(bmp1, 0f, 0f, null);没有关系的啊。
目前我想到的实现是利用Canvas的clipPath来剪裁区域,至于是什么形状的,可以自己定义,显示的图片就是这个形状所圈住的区域。

        //生命一个path并初始化中获取
        path = getSixShape(bmp.getWidth(), bmp.getHeight());

private Path getSixShape(int width, int height){//Path自己定义,显示的效果自己可以设计算法

int bx = background.getWidth() / 4;
int by = background.getHeight() / 2;

Path path = new Path();
path.moveTo(bx, 0);
path.lineTo(bx * 3,  0);
path.lineTo(background.getWidth(), by);
path.lineTo(bx * 3, background.getHeight());
path.lineTo(bx, background.getHeight());
path.lineTo(0, by);
path.moveTo(bx, 0);
path.close();
return path;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.clipPath(path);
canvas.drawBitmap(bmp, 0, 0, paint);
}
Android 开发中 对下上两个图层的相关操作有关问题,求大神果断喷小弟我吧
------解决思路----------------------
写一个缓存画布