当前位置:操作系统 > 安卓/Android >>

androidBitmap圆角与倒影实现

[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, 
补充:移动开发 , Android ,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,