A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2020-1-8 17:08 编辑




Android中如何将图片裁切成三角形并设置阴影


Android5.0之后,可以通过轮廓来裁切一个View。但是这种方式只能用来裁切矩形、圆形和圆角矩形。不支持三角形。所以要想实现这个效果,只能另辟蹊径。

我们知道可以利用PorterDuffXferMode来进形图片的混合。所以我们的思路就来了。分两步:

1. 先找一张三角形的图片。然后采用PorterDuff.Mode.SRC_IN将原图裁切成三角形图片,设置给一个ImageView。

2.给这个ImageView设置三角形的阴影。

首先材料准备:


第一步,先用这个三角形的图片把这个美女裁成三角形,并设置个ImageView,代码如下:
[AppleScript] 纯文本查看 复制代码
//先将原图和裁切用的三角形图片准备好
        Bitmap source = BitmapFactory.decodeResource(getResources(), R.drawable.girl);
        Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.triangle);
        
        //穿件一个空的Bitmap用来存放合成的图片
        final Bitmap result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.BLACK);

        canvas.drawBitmap(mask, 0, 0, paint);
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(source, 0, 0, paint);
        paint.setXfermode(null);
        
        iv.setImageBitmap(result);


第二步,给这个ImageView设置一个三角形的阴影,代码如下:
[AppleScript] 纯文本查看 复制代码
iv.setOutlineProvider(new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    int x = (view.getWidth() - result.getWidth()) / 2;
                    int y = (view.getHeight() - result.getHeight()) / 2;

                    Path path = new Path();
                    path.moveTo(x, y);
                    path.lineTo(x+result.getWidth(), y);
                    path.lineTo(x+result.getWidth()/2, y+result.getHeight());
                    path.lineTo(x, y);
                    path.close();

                    outline.setConvexPath(path);
                }
            });


到此,我们完美的实现了这个效果。

cliptriangle.zip (69.74 KB, 下载次数: 288)

点评

好贴,顶一下  发表于 2016-11-30 19:50

评分

参与人数 1黑马币 +5 收起 理由
博弈$人生 + 5 很给力!

查看全部评分

7 个回复

倒序浏览
好帅!!!
回复 使用道具 举报
回复 使用道具 举报
不错,好帖
回复 使用道具 举报
每天都坚持来黑马
回复 使用道具 举报
攀哥,牛啊!
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马