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

然后下面的分别是两个图片,第一个是照片,也就是背景层。第二个是罩盖图。


下面就是我的源码:
好了,上面代码我设置两图相交的模式是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);
}

------解决思路----------------------
写一个缓存画布
我先上效果图:
然后下面的分别是两个图片,第一个是照片,也就是背景层。第二个是罩盖图。
下面就是我的源码:
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);
}
------解决思路----------------------
写一个缓存画布