当前位置: 移动技术网 > IT编程>移动开发>Android > android Bitmap圆角与倒影的具体实现代码

android Bitmap圆角与倒影的具体实现代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

l298中文资料,穿越成陈阿娇,杨立杰

[html]

复制代码 代码如下:

/**
     * 画一个圆角图
     * 
     * @param bitmap
     * @param roundpx
     * @return
     */
    public static bitmap getroundedcornerbitmap(bitmap bitmap, float roundpx) {
        bitmap output = bitmap.createbitmap(bitmap.getwidth(),
                bitmap.getheight(), config.argb_8888);
        canvas canvas = new canvas(output);
        final int color = 0xff424242;
        final paint paint = new paint();
        final rect rect = new rect(0, 0, bitmap.getwidth(), bitmap.getheight());
        final rectf rectf = new rectf(rect);
        paint.setantialias(true);
        canvas.drawargb(0, 0, 0, 0);
        paint.setcolor(color);
        canvas.drawroundrect(rectf, roundpx, roundpx, paint);
        paint.setxfermode(new porterduffxfermode(mode.src_in));
        canvas.drawbitmap(bitmap, rect, rect, paint);
        return output;
    }

    /**
     * 创建倒影效果
     * 
     * @return
     */
    public boolean createreflectedimages() {
        // 倒影图和原图之间的距离
        final int reflectiongap = 4;
        int index = 0;
        for (gallerywith3ddata imageid : mimageids) {
            // 返回原图解码之后的bitmap对象
            bitmap originalimage = bitmapfactory.decoderesource(
                    mcontext.getresources(), imageid.getinteger());
            int width = originalimage.getwidth();
            int height = originalimage.getheight();
            // 创建矩阵对象
            matrix matrix = new matrix();
            // 指定矩阵(x轴不变,y轴相反)
            matrix.prescale(1, -1);
            // 将矩阵应用到该原图之中,返回一个宽度不变,高度为原图1/2的倒影位图
            bitmap reflectionimage = bitmap.createbitmap(originalimage, 0,
                    height / 2, width, height / 2, matrix, false);
            // 创建一个宽度不变,高度为原图+倒影图高度的位图
            bitmap bitmapwithreflection = bitmap.createbitmap(width,
                    (height + height / 2), config.argb_8888);
            // 将上面创建的位图初始化到画布
            canvas canvas = new canvas(bitmapwithreflection);
            canvas.drawbitmap(getroundedcornerbitmap(originalimage, 20), 0, 0,
                    null);
            int len = imageid.getstr().length();
            double lenweght = len * 50 * 0.9;
            int ban = width / 2;
            int ban1 = (int) (lenweght / 2);
            int hua = ban - ban1;
            if (imageid.getflagrecommend()) {
                canvas.rotate(30);
                canvas.drawtext(mstrrecommend, hua - 20, 150,
                        createpaint(color.red));
                canvas.rotate(-30);
            }
            paint deafaultpaint = new paint();
            deafaultpaint.setantialias(false);
            canvas.drawbitmap(getroundedcornerbitmap(reflectionimage, 20), 0,
                    height + reflectiongap, null);
            paint paint = new paint();
            paint.setantialias(false);
            /**
             * 参数一:为渐变起初点坐标x位置, 参数二:为y轴位置, 参数三和四:分辨对应渐变终点, 最后参数为平铺方式,
             * 这里设置为镜像gradient是基于shader类,所以我们通过paint的setshader方法来设置这个渐变
             */
            lineargradient shader = new lineargradient(0,
                    originalimage.getheight(), 0,
                    bitmapwithreflection.getheight() + reflectiongap,
                    0x70ffffff, 0x00ffffff, tilemode.mirror);
            // 设置阴影
            paint.setshader(shader);
            paint.setxfermode(new porterduffxfermode(
                    android.graphics.porterduff.mode.dst_in));
            // 用已经定义好的画笔构建一个矩形阴影渐变效果
            canvas.drawrect(0, height, width, bitmapwithreflection.getheight() + reflectiongap, paint);
            canvas.drawtext(imageid.getstr(), hua, 430,
                    createpaint(color.white));
            // 创建一个imageview用来显示已经画好的bitmapwithreflection
            imageview imageview = new imageview(mcontext);
            imageview.setimagebitmap(bitmapwithreflection);
            // 设置imageview大小 ,也就是最终显示的图片大小
            imageview.setlayoutparams(new gallerywith3d.layoutparams(150, 250));
            // imageview.setscaletype(scaletype.matrix);
            mimages[index++] = imageview;
        }
        return true;
    }

下面是效果图:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网