首页 > 安全资讯 >

androidBitmap圆角与倒影实现

12-11-27

[html]/** * 画一个圆角图 * * @param bitmap * @param roundPx * @return */ public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { Bitmap output = Bitmap....

[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; 
    } 
下面是效果图:


 

相关文章
最新文章
热点推荐