我有一个包含一个人的png图像,不是一个人的图像区域是透明的。我想在该图像的顶部绘制,但仅限于它不透明的地方。所以,只对这个人。例如,假设我有一个蓝色矩形,我将这个矩形放在这条腿上,那么它应该看起来像是穿着裤子,因为唯一能显示蓝色的是他的腿。
如果在我的片段中我有一个MyImageView并将源设置为png图像我有一个人。然后下面的代码将显示该人物图像。
public class MyImageView extends ImageView {
private HashMap<String, InjuryOverlay> overlays = new HashMap<>();
public MyImageView(Context context) {
super(context);
}
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void addOverlay(String overlayName, MyOverlay overlay) {
overlays.put(overlayName, overlay);
}
public void removeAllOverlays() {
overlays.clear();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (MyOverlay overlay : overlays.values()){
overlay.onDraw(canvas);
}
}
}
如果我在其显示的路径中添加了一些MyOverlay,在我的情况下为RED,并且它很好地覆盖了我可以在其下看到人类的地方,但我不希望显示任何溢出...只有那些直接接触这个人的部分。
public class MyOverlay
{
private String name;
private ArrayList<Point> path;
private int color;
private Paint paint = new Paint();
private Path drawPath = new Path();
public MyOverlay() {
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
}
public MyOverlay(String name, ArrayList<Point> path, int color) {
this();
setName(name);
setPath(path);
setColor(color);
}
public void setName(String name) {
this.name = name;
}
public void setPath(ArrayList<Point> path) {
this.path = path;
}
public void setColor(int color) {
this.color = color;
paint.setColor(this.color);
}
public void onDraw(Canvas canvas) {
if (path != null && path.size() > 1)
{
drawPath.reset();
drawPath.moveTo(path.get(0).x, path.get(0).y);
for (int i = 1; i < path.size(); i++)
{
drawPath.lineTo(path.get(i).x, path.get(i).y);
}
// If the path doesn't end on the same point that we stated then force the path to end on the starting
// point. This is required since we are filling the path as a solid shape.
if (path.get(0).x != path.get(path.size()-1).x || path.get(0).y != path.get(path.size()-1).y)
{
drawPath.lineTo(path.get(0).x, path.get(0).y);
}
canvas.drawPath(drawPath, paint);
}
}
}
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
我能够通过在上面的代码运行之后应用此问题来回答我自己的问题...所以在我添加了我的叠加后,我运行了以下代码并使用了与原始图像相同的图层蒙版。