Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          公告

          搜索

          •  

          最新評論

           

          /**
            * This code is courtesy of Neil Davies at http://www.inter-fuser.com
            * @param context the current context
            * @param originalImage The original Bitmap image used to create the reflection
            * @return the bitmap with a reflection
            */
           public static Bitmap createReflectedImage(Context context, Bitmap originalImage) {
                    //The gap we want between the reflection and the original image
                    final int reflectionGap = 4;
                   
                      int width = originalImage.getWidth();
                      int height = originalImage.getHeight();
                      
                
                      //This will not scale but will flip on the Y axis
                      Matrix matrix = new Matrix();
                      matrix.preScale(1, -1);
                      
                      //Create a Bitmap with the flip matrix applied to it.
                      //We only want the bottom half of the image
                      Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height/2, width, height/2, matrix, false);
                      
                          
                      //Create a new bitmap with same width but taller to fit reflection
                      Bitmap bitmapWithReflection = Bitmap.createBitmap(width
                        , (height + height/2), Config.ARGB_8888);
                    
                     //Create a new Canvas with the bitmap that's big enough for
                     //the image plus gap plus reflection
                     Canvas canvas = new Canvas(bitmapWithReflection);
                     //Draw in the original image
                     canvas.drawBitmap(originalImage, 0, 0, null);
                     //Draw in the gap
                     Paint defaultPaint = new Paint();
                     canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);
                     //Draw in the reflection
                     canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null);
                     
                     //Create a shader that is a linear gradient that covers the reflection
                     Paint paint = new Paint();
                     LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0,
                       bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff,
                       TileMode.CLAMP);
                    //Set the paint to use this shader (linear gradient)
                     paint.setShader(shader);
                     //Set the Transfer mode to be porter duff and destination in
                     paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
                     //Draw a rectangle using the paint with our linear gradient
                     canvas.drawRect(0, height, width,
                       bitmapWithReflection.getHeight() + reflectionGap, paint);
                    
                    return bitmapWithReflection;
            }
          posted on 2010-05-07 18:52 calvin 閱讀(192) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 甘肃省| 南丹县| 商洛市| 札达县| 新津县| 吉林省| 北流市| 南安市| 利川市| 武定县| 朔州市| 文成县| 郯城县| 浦城县| 鹰潭市| 桦南县| 莱西市| 宣恩县| 远安县| 于都县| 浦东新区| 江源县| 报价| 乌恰县| 青神县| 明溪县| 马公市| 谢通门县| 贵州省| 亳州市| 哈巴河县| 竹溪县| 黑河市| 崇左市| 城固县| 冀州市| 胶南市| 徐闻县| 湘乡市| 广东省| 彝良县|